如果…则中的VBA变量不会递增

如果…则中的VBA变量不会递增,vba,excel,Vba,Excel,已更新-仍未解决 模数 形式 所以我有一个按钮,它打开一个userformmodul,其中有一个cmdButton。如果我单击cmdButtonName\u click,它将启动一些代码表单。但它不会存储递增的变量。MsgBox start&igOneVar中的变量为0并保持为0。此解决方案对我有效。我只是将变量存储在excel工作表中。这不是最好的方法,但我没有别的办法 模数 形式 因为变量igOneVar是公共的,所以它的作用域扩展到userform,当activesheet的单元格B2=2

已更新-仍未解决

模数

形式


所以我有一个按钮,它打开一个userformmodul,其中有一个cmdButton。如果我单击cmdButtonName\u click,它将启动一些代码表单。但它不会存储递增的变量。MsgBox start&igOneVar中的变量为0并保持为0。

此解决方案对我有效。我只是将变量存储在excel工作表中。这不是最好的方法,但我没有别的办法

模数

形式


因为变量igOneVar是公共的,所以它的作用域扩展到userform,当activesheet的单元格B2=2和单元格C2=3时,它将增加


只要这两个条件都为真,由于EXIT FOR语句,igOneVar应该只增加到1。尝试设置一个断点,因为唯一的问题似乎是递增igOneVar的行永远不会执行

如果此条件为真,则。。。然后igOneVar只能更改为igOneVar=1,因为您已经退出,但我需要他在这一点上停止。在我的ElseIf中有增加变量的选项吗?它已经增加了。但是,由于您有Exit For,igOneVar只能在私有子代码上方的代码顶部将Dim igOneVar作为整数进行一次递增,以使其成为全局变量。删除igOneVar=0Thx的建议@JohnBustos我刚刚删除了我的答案并更新了问题。您在下面发表的评论附于此评论。首先,你是在发布问题的补充信息,而不是解决方案。。这不是做这件事的方式。。。接下来,您的问题是,您使变量的作用域仅限于您将该声明放置在sub之外的userform,而不是表单的代码中。问题是您有一行Unload UserForm1,它结束了该变量的生命周期。把你的变量放在一个单独的模块中,这会解决你的问题。。。
Public igOneVar As Integer 

Sub ShowUserForm1() 

    UserForm1.Show 

End Sub 
Private Sub Name_Click() 

Dim laufVar As Integer 

MsgBox "start " & igOneVar 

If ActiveSheet.Range("B2").Value = 2 Then 
    For laufVar = 8 To 250 
        If ActiveSheet.Range("C2").Value = 2 Then 
            ActiveSheet.Range("C3").Value = "If" 
            Exit For 
        ElseIf ActiveSheet.Range("C2").Value = 3 Then 
            ActiveSheet.Range("C3").Value = "ElseIf" 
            igOneVar = igOneVar + 1 
            Exit For 
        End If 
    Next laufVar 
End If 

MsgBox "end " & igOneVar 

Unload UserForm1 

End Sub 
Sub ShowUserForm1() 

    UserForm1.Show 

End Sub
Private Sub Name_Click() 

Dim laufVar As Integer 
Dim igOneVar As Integer

igOneVar = Worksheets("Test").Range("A10").Value

If ActiveSheet.Range("B2").Value = 2 Then 
    For laufVar = 8 To 250 
        If ActiveSheet.Range("C2").Value = 2 Then 
            ActiveSheet.Range("C3").Value = "If" 
            Exit For 
        ElseIf ActiveSheet.Range("C2").Value = 3 Then 
            ActiveSheet.Range("C3").Value = "ElseIf" 
            igOneVar = igOneVar + 1
            Worksheets("Test").Range("A10").Value = igOneVar
            Exit For 
        End If 
    Next laufVar 
End If 

Unload UserForm1 

End Sub