【问题标题】:VBA Compile Error: "For control variable already in use"VBA 编译错误:“对于已在使用的控制变量”
【发布时间】:2021-01-23 20:20:16
【问题描述】:

这种嵌套“For”的特殊用法是我没想到的。我已将其精简为一个非常简单的示例。 outer For 循环使用“abc”类型的成员可以完美运行,但是enclosed For 语句会产生编译器错误。我一直在寻找解释,但到目前为止还没有找到。

Option Explicit

Private Type abc
    i As Integer
    j As Integer
End Type

Private Sub CommandButton1_Click()
    Dim dog As abc
    Dim cat As abc
    
    For dog.i = 1 To 10
        For cat.i = 5 To 9
        
        Next
    Next
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    根据this documentation,嵌套的 for 循环必须为其控制计数器使用不同的变量。并且根据this documentation,Type 元素遵循与变量相同的规则。

    元素名称也遵循标准变量命名约定,除了关键字可以 使用。

    我想结构 (Type) 一定有一些东西,当您引用它的一个元素时,它会将其用作某种命名变量。因此,因为您的两个控件 abcs 有一个名为 i 的元素,所以 for 循环说 “嘿,我上面已经有另一个 for 循环使用名为 i 的控制变量”强>。请注意,如果将dog.i 用于外部循环,将cat.j 用于内部循环,则不会遇到同样的问题。

    至于解决方案,您可以将dog.icat.i 的值存储到一个单独的变量中以用于此循环结构:

    Private Sub CommandButton1_Click()
        Dim dog As abc
        Dim cat As abc
        Dim x As Integer
        Dim y As Integer
        
        x = dog.i
        y = cat.i
        
        For x = 1 To 10
            For y = 5 To 9
    
            Next
        Next
    End Sub
    

    【讨论】:

      【解决方案2】:

      我想确定我看到的错误是否是 VBA 限制(缺陷),或者是否有一些我不知道的设置或选项,这将是适当的。
      我想出了一个我需要做的可以接受的变通方法。

      Option Explicit
      
      Private Type abc1
          i As Byte
          j As Byte
      End Type
      
      Private Type abc2
          i As Byte
          j As Byte
      End Type
      
      Private Sub CommandButton1_Click()
          Dim dog As abc1
          Dim cat As abc2
          
          For dog.i = 1 To 10
              For cat.i = 5 To 9
              
              Next
          Next
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 1970-01-01
        • 2010-12-15
        • 2021-09-11
        • 2019-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多