2015-02-05 89 views
1

我试图循环遍历表单中的所有控件,并且每次它捕获一个Label时,标签的Tag元素都被添加到阵列。下标超出范围,Excel VBA,试图在循环内创建一个数组

Dim labelCounter As Integer 
labelCounter = 0 
Dim arrayTag() As String 

For Each ctl In Me.Controls 
    Select Case TypeName(ctl) 
     Case "Label" 
     arrayTag(labelCounter) = ctl.Tag 
     labelCounter = labelCounter + 1 
    End Select 
Next 

我不断收到下标超出范围的错误。这里有什么问题?

+0

什么是labelCounter的价值,当它倒下?你有没有Option Base设置为1? – barryleajo 2015-02-05 22:29:52

+0

代码驻留在用户窗体或单独的模块中。如果后者不使用'Me',则使用实际的表单名称 – Jeanno 2015-02-05 22:38:58

回答

0

我认为你唯一的问题是你创建了一个数组(arrayTag),而没有指定它有多少个元素。据我记得,当创建一个数组时,你需要A.)指定它中的元素数量,或B.)按照你的方式创建一个数组(使用空括号),然后一旦你达到一个点在代码执行中你知道它有多少个元素。我想你也可以ReDim Preserve更改数组的大小而不删除其内容。

Dim labelCounter As Integer 
labelCounter = 0 
Dim arrayTag(50) As String 

For Each ctl In Me.Controls 
    Select Case TypeName(ctl) 
     Case "Label" 
     arrayTag(labelCounter) = ctl.Tag 
     labelCounter = labelCounter + 1 
    End Select 
Next 
5
Sub Tester() 

    Dim labelCounter As Integer 
    Dim arrayTag() As String 
    Dim ct As String, ctl 

    labelCounter = 0 
    ReDim arrayTag(0 To labelCounter) 
    For Each ctl In Me.Controls 
     ct = TypeName(ctl) 
     If ct = "Label" Then 
      If labelCounter > 0 Then 
       ReDim Preserve arrayTag(0 To labelCounter) 
      End If 
      arrayTag(labelCounter) = ctl.Tag 
      labelCounter = labelCounter + 1 
     End If 
    Next 
    'Debug.Print Join(arrayTag, ",") 
End Sub 
+0

完美!谢谢 – kraimecj 2015-02-06 15:01:00