UserForm1.Show给出错误9

时间:2016-03-21 21:06:21

标签: excel vba excel-vba

我创建了一个ActiveX按钮,使用行

打开表单
except

但是当我点击按钮时,我得到错误9(下标超出范围)。表单存在,表单的名称是UserForm1。当我调试时,它会突出显示UserForm1.Show行,但我无法弄清楚出了什么问题。

编辑:

初始化代码位于

之下
UserForm1.Show 

2 个答案:

答案 0 :(得分: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语句。

答案 1 :(得分:0)

所以我知道这是一篇过时的文章,但是我开始从事一个项目,遇到相同的问题后才发现。

我需要的是在初始化用户窗体时填充ListBox的代码,起初,我尝试使用数组和集合来完成操作,这产生了错误(9),并将我带到这里。然后,我只是取出数组并将数据直接添加到ListBox中。您也可以使用ComboBox进行此操作。见下文。大卫·泽门斯(David Zemens)的答案是可行的,但您无法调整已确定尺寸的数组的大小,因此必须使数组变大,然后才能使用,只能在ListBox中添加空白。

Option Explicit

Private Sub UserForm_Initialize() 'Get headers for List Box
Dim colCount As Integer
Dim i As Integer

colCount = Cells(1, Columns.Count).End(xlToLeft).Column 'How many headers to work with

For i = 1 To colCount
 lBox_headers.AddItem Cells(1, i) 'Add headers to this listbox
Next i

End Sub

此代码只是获取列标题并将其添加到列表框中。希望它对在这里找到自己的人有所帮助。