2016-03-21 141 views
1

我創建了一個ActiveX按鈕使用線路UserForm1.Show給出錯誤9

UserForm1.Show 

打開窗體,但是當我按一下按鈕,我得到錯誤9(下標越界)。該窗體存在,窗體的名稱是UserForm1。當我調試時,它突出顯示UserForm1.Show行,但我無法弄清楚什麼是錯的。

編輯:

初始化代碼如下

Private Sub UserForm_Initialize() 
Let list1 = Array() 
For j = 0 To 67 
list1(j) = Sheet2.Cells(2+j, 1) 
Next 
Let colors = Array("Blue", "Black", "Gold", "Green") 
ComboBox1.List = list1 
ListBox1.List = colors 
End Sub 
+0

您是否在嘗試顯示「加載用戶窗體1」之前加載窗體?你有表單上的代碼(例如'initialize'或'activate')嗎?如果是這樣,請將代碼附加到您的問題。你在表單上有任何鏈接的源代碼(例如一個帶有數據源的列表框,調用一箇中斷的命名區域等)? – Ralph

+4

在這種類型錯誤的大多數情況下,'userform'.show'代碼不是錯誤,但'userform_initialize'錯誤,因爲'initialize'代碼中有錯誤,調試將停止在'userform1 .show' – Davesexcel

+0

@Colleen - 你可以在UserForm_Initialize()分享代碼 – Mrig

回答

0

你不正確申報您的list1變量。

總是聲明所有的變量,對於數組,如果可能的話,在初始化時進行維度定義。或者,將它們留作變體,您可以使用Array(...)函數進行分配(就像您使用colors一樣)。但對於list1數組,您已將其初始化爲空數組,其上限爲-1,因此list1(0)的第一個分配將失敗,因爲0超出範圍。相反,因爲你知道這個數組需要有LEN = 68,只標註尺寸與Dim聲明方式:

Option Explicit ' # Enforce variable declaration!! 
Private Sub UserForm_Initialize() 
Dim list1(67) 
Dim colors() 
Dim j as Long 

colors = Array("Blue", "Black", "Gold", "Green") 

For j = 0 to 67 
    list1(j) = ... 

(如果以後需要調整,你可以使用ReDimReDim Preserve語句)。

+0

謝謝,這是有幫助的 – Colleen