函数执行次数的问题,想了一下午,没想出来

时间:2021-08-25 08:07:32
Private Sub ()
                        If (Cip(0) <> "") Then
                             k = 0
                        End If
                        If (Cip(1) <> "") Then
                             k = 1
                        End If
                        If (Cip(2) <> "") Then
                            k = 2
                        End If
                        If (Cip(3) <> "") Then
                            k = 3
                        End If  
If Value = 0 Then
      GoTo Label1
  Else
      i = k+1  'i 是静态变量
  End If

End Sub
 
Label1:       If Value = 0 And i = k + 1 Then


当k=0的时候value=0,然后是1,然后第三次给value赋值的时候执行label1
当k=1的时候仍然是value=0,然后是1,......然后第五次给value赋值的时候执行label1
当k=2的时候仍然是value=0,然后是1,......然后第七次给value赋值的时候执行label1
......怎么办那?我的代码不行呀.只能符合K=0的时候的情况,其他的就乱了

13 个解决方案

#1


看的我都晕了,用循环不好吗?

#2


实在是不知道怎么用啊!

#3


For...Next
在不知道循环内需要执行多少次语句时,宜用 Do 循环。但是,在知道要执行多少次时,则最好使用 For...Next 循环。与 Do 循环不同, For 循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For 循环的语法如下:

For counter = start To end [Step increment]
statements

Next [counter]

参数 Counter、Start、end 和 increment 都是数值型的。

注意   increment 参数可正可负。如果 increment 为正,则 Start 必须小于等于 end,否则不能执行循环内的语句。如果 increment 为负,则 Start 必须大于等于 end,这样才能执行循环体。如果没有设置 Step,则 increment 缺省值为 1。

在执行 For 循环时,Visual Basic 

设置 counter 等于 start。


测试 counter 是否大于 end。若是的话,则 Visual Basic 退出循环。 
(若 increment 为负,则 Visual Basic 测试 counter 是否小于 end。)

执行语句。


counter 增加一,或者增加 increment(如果已指定的话)。


重复步骤 2 到步骤 4。 
以下代码打印出所有有效的屏幕字体名:

Private Sub Form_Click ()
   Dim I As Integer
   For i = 0 To Screen.FontCount
      Print Screen.Fonts (i)
   Next
End Sub

在 VCR 示例应用程序中,HighlightButton 过程使用 For...Next 循环,一步步经过 VCR 窗体的控件集合,并显示适当的 Shape 控件:

Sub HighlightButton (MyControl As Variant)
   Dim i As Integer
   For i = 0 To frmVCR.Controls.Count - 1
      If TypeOf frmVCR.Controls (i) Is Shape Then
         If frmVCR.Controls (i).Name = MyControl Then
            frmVCR.Controls (i).Visible = True
         Else
            frmVCR.Controls (i).Visible = False
         End If
      End If
   Next
End Sub

#4


我循环会用。只是针对这个问题不知道怎么用

#5


愣没看懂楼主意思:

不知理解得对不对?

Private Sub Command1_Click()
Dim I As Integer, K As Integer, VALUE As Integer
For K = 0 To 3
VALUE = 0
For I = 1 To 2 * K + 3
VALUE = VALUE + 1
Next
Debug.Print "K="; K; "I="; I - 1; "VALUE="; VALUE
Next
End Sub
--------------------

K= 0 I= 3 VALUE= 3 
K= 1 I= 5 VALUE= 5 
K= 2 I= 7 VALUE= 7 
K= 3 I= 9 VALUE= 9

#6


楼上的大哥是没有明白我的意思。我的value只有两个值0或者1。

#7


楼主在把问题说清楚点好不,看不明白什么意思呀?

#8


对不起了。我没太说清楚。现在就我这个函数每次执行的时候都会先把value的值赋0,然后再赋1(value=0,然后value=1),这两次赋值的过程只有20毫秒间隔。现在我的目的就是:当K=0的时候函数执行1次这样的过程。当K=1的时候函数执行3次这样的过程,......

#9



Private Sub xx()
  Dim Sum As Integer
  Dim j As Integer
   For j = 0 To 3
     If Cip(j) <> "" Then k = j
   Next
   
   Sum = k * 2 + 1
   For j = 1 To Sum
       Value = 0
       '延史20ms
       Value = 1
   Next
   
  
End Sub
 

是不是这样?

#10


晕啊,你还是说清楚SUB的意图的好。

#11


同意楼上,真的很晕!!

#12


先说明一下意图

#13


算了。今天自己解决了问题。大家伙别晕了。呵呵。散分了。多谢关注!

#1


看的我都晕了,用循环不好吗?

#2


实在是不知道怎么用啊!

#3


For...Next
在不知道循环内需要执行多少次语句时,宜用 Do 循环。但是,在知道要执行多少次时,则最好使用 For...Next 循环。与 Do 循环不同, For 循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For 循环的语法如下:

For counter = start To end [Step increment]
statements

Next [counter]

参数 Counter、Start、end 和 increment 都是数值型的。

注意   increment 参数可正可负。如果 increment 为正,则 Start 必须小于等于 end,否则不能执行循环内的语句。如果 increment 为负,则 Start 必须大于等于 end,这样才能执行循环体。如果没有设置 Step,则 increment 缺省值为 1。

在执行 For 循环时,Visual Basic 

设置 counter 等于 start。


测试 counter 是否大于 end。若是的话,则 Visual Basic 退出循环。 
(若 increment 为负,则 Visual Basic 测试 counter 是否小于 end。)

执行语句。


counter 增加一,或者增加 increment(如果已指定的话)。


重复步骤 2 到步骤 4。 
以下代码打印出所有有效的屏幕字体名:

Private Sub Form_Click ()
   Dim I As Integer
   For i = 0 To Screen.FontCount
      Print Screen.Fonts (i)
   Next
End Sub

在 VCR 示例应用程序中,HighlightButton 过程使用 For...Next 循环,一步步经过 VCR 窗体的控件集合,并显示适当的 Shape 控件:

Sub HighlightButton (MyControl As Variant)
   Dim i As Integer
   For i = 0 To frmVCR.Controls.Count - 1
      If TypeOf frmVCR.Controls (i) Is Shape Then
         If frmVCR.Controls (i).Name = MyControl Then
            frmVCR.Controls (i).Visible = True
         Else
            frmVCR.Controls (i).Visible = False
         End If
      End If
   Next
End Sub

#4


我循环会用。只是针对这个问题不知道怎么用

#5


愣没看懂楼主意思:

不知理解得对不对?

Private Sub Command1_Click()
Dim I As Integer, K As Integer, VALUE As Integer
For K = 0 To 3
VALUE = 0
For I = 1 To 2 * K + 3
VALUE = VALUE + 1
Next
Debug.Print "K="; K; "I="; I - 1; "VALUE="; VALUE
Next
End Sub
--------------------

K= 0 I= 3 VALUE= 3 
K= 1 I= 5 VALUE= 5 
K= 2 I= 7 VALUE= 7 
K= 3 I= 9 VALUE= 9

#6


楼上的大哥是没有明白我的意思。我的value只有两个值0或者1。

#7


楼主在把问题说清楚点好不,看不明白什么意思呀?

#8


对不起了。我没太说清楚。现在就我这个函数每次执行的时候都会先把value的值赋0,然后再赋1(value=0,然后value=1),这两次赋值的过程只有20毫秒间隔。现在我的目的就是:当K=0的时候函数执行1次这样的过程。当K=1的时候函数执行3次这样的过程,......

#9



Private Sub xx()
  Dim Sum As Integer
  Dim j As Integer
   For j = 0 To 3
     If Cip(j) <> "" Then k = j
   Next
   
   Sum = k * 2 + 1
   For j = 1 To Sum
       Value = 0
       '延史20ms
       Value = 1
   Next
   
  
End Sub
 

是不是这样?

#10


晕啊,你还是说清楚SUB的意图的好。

#11


同意楼上,真的很晕!!

#12


先说明一下意图

#13


算了。今天自己解决了问题。大家伙别晕了。呵呵。散分了。多谢关注!