注册 登录
编程论坛 VB6论坛

EXIT SUB的矛盾

linandceline 发布于 2015-11-20 09:52, 1292 次点击
Private Sub Com1_Click()
If ListView1.ListItems.Count <= 0 Then
  MsgBox "没有输入", vbInformation, "提示"
  Exit Sub
End If
Form5.Show
End Sub
我有EXIT SUB
单从程序上说 MSG 跟后面的 SHOW 是矛盾的吧?
为什么我一运行,先有MSG,后面又跟着有SHOW呢
12 回复
#2
风吹过b2015-11-20 10:20
测试的没问题啊,测试代码:
Private Sub Command1_Click()
MsgBox 1
Exit Sub
MsgBox 2
End Sub

#3
linandceline2015-11-20 10:24
回复 2楼 风吹过b
想不通哪里出问题
#4
linandceline2015-11-20 10:29
只有本站会员才能查看附件,请 登录

我特意用了一个text来记录listview的count
实际结果是1。
但是问题是,如果是1,不会进入IF,不会有MSG
哪里出问题
#5
风吹过b2015-11-20 11:17
那你这样改吧,让代码二选一,看看那里的问题。
还有,你4楼的提示与1楼的代码不相符,检查一下是不是别的地方的提示,而不是这里的提示。
Private Sub Com1_Click()
If ListView1.ListItems.Count <= 0 Then
  MsgBox "没有输入", vbInformation, "提示"
'  Exit Sub
Else
  Form5.Show
End If
End Sub
#6
linandceline2015-11-20 11:33
回复 5楼 风吹过b
那个提示内容是因为复制过来的时候有乱码,我重新输入时懒了下,少输了几个字

改了之后也是一样的结果,仍然是进入IF又SHOW
#7
wmf20142015-11-20 11:41
这是你窗口刚启动时,有其他事件触发引起的。要看到你整个代码就好分析了,很多控件在窗口初始化时会触发一些事件,这些事件可能等候是预料不到的,就产生了预料不到的错误。
#8
linandceline2015-11-20 11:58
回复 7楼 wmf2014
只有本站会员才能查看附件,请 登录

复制上来有很多中文乱码,我还是打包吧
#9
风吹过b2015-11-20 12:15
回复 6楼 linandceline
改了后,还出现,那说明不是在这里触发的这个显示。

那你只能单步了,
你按 F8启动,然后一行一行的执行过去,如果一大段循环,可以到循环后面下个断点,然后按F5运行到断点停止,然后再继续 F8 ,单步下去。

#10
风吹过b2015-11-20 12:39
跟踪后,你的提示出现在这个部分:

Private Sub Form_Load()
Dim n As Integer

n = ListView1.ListItems.Count
If n <= 0 Then
  MsgBox "没有输入物料编码", vbInformation, "提示"
  Exit Sub
End If

是 Form5 的初始化部分,你总抓着前面的去弄,当然找不对。
---------------------------------------------
m = FormatDateTime(Now(), vbShortDate)
m = Left(m, 4)
n = Val(m)

Combo2.AddItem n - 1 & "年"
Combo2.AddItem n & "年"
Combo2.AddItem n + 1 & "年"

For i = 1 To 12
  Combo3.AddItem i & "月"
Next

For i = 1 To 31
  Combo4.AddItem i & "日"
Next

Combo9.AddItem n - 1 & "年"
Combo9.AddItem n & "年"
Combo9.AddItem n + 1 & "年"

For i = 1 To 12
  Combo10.AddItem i & "月"
Next

For i = 1 To 31
  Combo11.AddItem i & "日"
Next
这一大段代码都要简化。
首先,取年:
n = Year(Now())
然后,添加年和月的代码,可以并到一起。

For i = n-1 To n+1
  Combo2.AddItem i & "年"
  Combo9.AddItem i & "年"
Next i
For i = 1 To 12
  Combo3.AddItem i & "月"
  Combo10.AddItem i & "月"
Next
日期,建议使用动态添加,而不在窗体初始化过程中加入。
如这个过程改一下,
Private Sub Combo2_Click()
If Combo2.ListIndex > -1 And Combo3.ListIndex > -1 Then
    Combo4.Clear
    Dim i As Long
    For i = 1 To Day(DateSerial(Val(Combo2.Text), Val(Combo3.Text) + 1, 0))
        Combo4.AddItem i & "日"
    Next i
    Showcom
End If
End Sub
Private Sub Combo3_Click()
If Combo2.ListIndex > -1 And Combo3.ListIndex > -1 Then
    Combo4.Clear
    Dim i As Long
    For i = 1 To Day(DateSerial(Val(Combo2.Text), Val(Combo3.Text) + 1, 0))
        Combo4.AddItem i & "日"
    Next i
    Showcom
End If
End Sub
对应,9 10 二个combo 也相应修改一下。

#11
风吹过b2015-11-20 12:42
代码格式,可以,但代码质量有待提高。
想不出的,多百度,很多东西都可以优化。
特别初始化中,减少代码的书写量,一可以提高输入速度,二是提高程序运行速度,三可以提高代码的复用量。
如10楼最后二个过程,你也完全可以封装成一个函数,然后供这二个事件调用。
函数、过程不怕多。
#12
linandceline2015-11-20 12:54
回复 10楼 风吹过b
form5的代码是从1那里复制过去准备修改的,没想到这点出了问题
多谢辛苦解答
#13
linandceline2015-11-20 13:22
回复 11楼 风吹过b
嘿嘿,初学者
1