注册 登录
编程论坛 VB6论坛

如果有几百个 If ..... Then ........... ........... End If 在Command1超行数如何解决

益西翁登 发布于 2013-09-13 07:24, 1012 次点击
如果有几百个:
  If ..... Then
   ...........
   ...........
   End If
放在Command1下会因为行数太多无法通过,应当怎么处理?是否可以建个模块放在里边?
下面是报错提示:
只有本站会员才能查看附件,请 登录


[ 本帖最后由 益西翁登 于 2013-9-13 10:19 编辑 ]
12 回复
#2
风吹过b2013-09-13 08:40
超行数???

没听过超行数的问题,只听过超行长的问题。
#3
益西翁登2013-09-13 09:55
如果有几百个:
  If ..... Then
   ...........
   ...........
   End If
放在Command1下会太多无法通过,应当怎么处理?是否可以建个模块放在里边?
下面是报错提示:
只有本站会员才能查看附件,请 登录


[ 本帖最后由 益西翁登 于 2013-9-13 10:18 编辑 ]
#4
风吹过b2013-09-13 11:53
代码过才,估计是编译后一个段(64K)放不下吧。

如果 IF 能分组,每组能 明确一个返回值,
那么,每组放一个 函数吧,有返回值的那种。

没看到代码,无法给出解决方案。
#5
bczgvip2013-09-13 15:15
呃,是否在函数中用了类似
dim t(1 to &h20000) as byte
之类的?
#6
益西翁登2013-09-13 17:01
下边只是弄了两年的,我想弄个两百年的,照这个方法根本行不通,请教各位老师如何优化,我想弄成数组或模块应当怎么弄?盼高手解答,谢谢!
If Combo1.Text = "1924" And Combo2.Text = "1" Then
   y(0).Caption = "8"
   y(1).Caption = "9"
   y(2).Caption = "1"
   y(3).Caption = "2"
   y(4).Caption = "3"
   y(5).Caption = "4"
   y(6).Caption = "5"
   y(7).Caption = "6"
   y(8).Caption = "7"
End If

[ 本帖最后由 益西翁登 于 2013-9-14 06:47 编辑 ]
#7
lowxiong2013-09-13 17:22
你难道看不出这些数据的规律吗?应该只要几句即可搞定的(应该不超过10行代码)。
#8
风吹过b2013-09-13 17:50
哪怕你怕出现错误,那也使用 文件保存这些数据时,不要使用 大量的 IF 块了。

数据文件,如果想简单一点,就用 TXT 文件。
文件结构如下:
每一行代表一串数据。
每串数据:如第一行:
1924,1,8,9,1,2,3,4,5,6,7
1924,2,7,8,9,1,2,3,4,5,6
......

--------------------------
程序代码:
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim sL As Long
Dim i As Long
Dim fj() As String

s1 = Combo1.Text & "," & Combo2.Text
sL = Len(s1)


Open "data.txt" For Input As #1

Do While EOF(1)
Line Input #1, s2
    s3 = Left(s2, sL)
    If s3 = s1 Then
        fj = Split(s2, ",")
        For i = 0 To 8
            y(i).Caption = fj(i + 2)
        Next i
        Exit Do
    End If
Close #1


------------------------
如果按6楼说的,那么简单的规律,那么直接写程序计算就是了。
#9
益西翁登2013-09-13 19:28
谢谢风吹过b老师的解答,但我不想用调用文本的方式,盼望lowxiong老师给出代码答案,多谢二位老师!
#10
lowxiong2013-09-13 19:47
'拷贝下列代码,10000年都行的,反正你这个不需要闰年的算法
Private Sub Command1_Click()
  Dim l As Long, a As Integer
  l = Val(Combo1) * 12 + Val(Combo2) - (1924 * 12 + 8)
  l = l Mod 9
  If l > 0 Then
    l = 9 - l
  Else
    l = Abs(l)
  End If
  For i = 0 To 8
    a = l + i + 1
    If a > 9 Then a = a - 9
    y(i).Caption = a
  Next
End Sub


[ 本帖最后由 lowxiong 于 2013-9-13 19:57 编辑 ]
#11
lowxiong2013-09-13 20:53
'为了7楼的吹牛说10行内完成,就再优化了一下代码,共9行可达到目的
Private Sub Command1_Click()
  Dim l As Long, a As Integer
  l = 9 - ((Val(Combo1) * 12 + Val(Combo2) - 3) Mod 9)
  For i = 0 To 8
    a = l + i
    If a > 9 Then a = a - 9
    y(i).Caption = a
  Next
End Sub
#12
tonoy2013-09-13 20:59
吃饱饭 没事干~
#13
益西翁登2013-09-14 06:46
回复 11楼 lowxiong
多谢老师指导,非常感谢!
1