Vba 显示错误9

Vba 显示错误9,vba,excel,Vba,Excel,我创建了一个ActiveX按钮,以使用该行打开表单 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

我创建了一个ActiveX按钮,以使用该行打开表单

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

您没有正确声明
list1
变量

始终声明所有变量,对于数组,如果可能在初始化时进行标注,请这样做。或者,将它们保留为变量,您可以使用
数组(…)
函数进行分配(就像您对
颜色所做的那样)。但是对于
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) = ...

(如果以后需要调整大小,可以使用
ReDim
ReDim Preserve
语句)。

您没有正确声明
list1
变量

始终声明所有变量,对于数组,如果可能在初始化时进行标注,请这样做。或者,将它们保留为变量,您可以使用
数组(…)
函数进行分配(就像您对
颜色所做的那样)。但是对于
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) = ...

(如果以后需要调整大小,可以使用
ReDim
ReDim Preserve
语句)。

所以我知道这是一篇老文章,但我开始从事一个项目,在遇到同样的问题后遇到了这个问题

我需要的是在初始化userform时填充列表框的代码,起初,我尝试使用数组和集合来填充列表框,结果出现了错误(9),并将我带到了这里。然后我取出数组,直接将数据添加到列表框中。您也可以使用组合框来完成此操作。见下文。David Zemens的答案是可行的,但是你不能调整已经标注尺寸的数组的大小,所以你必须使数组比你可以使用的更大,而只是在列表框中添加空白

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

这段代码只是获取列标题并将其添加到列表框中。希望它能帮助那些发现自己在这里的人。

所以我知道这是一篇老文章,但我开始从事一个项目,在遇到同样的问题后,我遇到了这个问题

我需要的是在初始化userform时填充列表框的代码,起初,我尝试使用数组和集合来填充列表框,结果出现了错误(9),并将我带到了这里。然后我取出数组,直接将数据添加到列表框中。您也可以使用组合框来完成此操作。见下文。David Zemens的答案是可行的,但是你不能调整已经标注尺寸的数组的大小,所以你必须使数组比你可以使用的更大,而只是在列表框中添加空白

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

这段代码只是获取列标题并将其添加到列表框中。希望它能帮助发现自己在这里的其他人。

在尝试显示表单之前是否加载了表单
加载用户表单1
?表单上是否有代码(例如
初始化
激活
)?如果是,请将代码附加到您的问题中。表单上是否有任何链接源(例如,一个列表框中的数据源调用一个已断开的命名范围等)?在大多数此类错误情况下,
userform
。show`code不是错误,而是
userform\u initialize
出错,因为
initialize
代码中有错误,调试将在
userform1处停止。show
@Colleen-您可以在UserForm\u Initialize()中共享代码吗?我已经添加了请求的code@Jeeped-您可以在常规VBA sub中使用
Let
,只是这样做没有意义(据我所知):
Dim v$(1到3):让v(1)=“你好”
Dim dbl#:让dbl=3.1
在尝试显示表单之前是否加载了表单
加载用户表单1
?表单上是否有代码(例如
初始化
激活
)?如果是,请将代码附加到您的问题中。表单上是否有任何链接源(例如,一个列表框中的数据源调用一个已断开的命名范围等)?在大多数此类错误情况下,
userform
。show`code不是错误,而是
userform\u initialize
出错,因为
initialize
代码中有错误,调试将在
userform1处停止。show
@Colleen-您可以在UserForm\u Initialize()中共享代码吗?我已经添加了请求的code@Jeeped-您可以在常规VBA sub中使用
Let
,只是这样做没有意义(据我所知):
Dim v$(1到3):让v(1)=“你好”
Dim dbl#:让dbl=3.1