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