Vba “运行时错误”;9“;下标范围不够

Vba “运行时错误”;9“;下标范围不够,vba,excel,Vba,Excel,因此,这段代码是在excel 2013中编写的,我必须使用它的工作站是在2003年运行的。2013年,它工作正常,2003年返回“运行时错误”9“下标超出范围”。如果有人能帮我解决这个问题,我将不胜感激。看来问题出在这一点数据上 Set wsSheet=工作表(“Sheet1”) 再次感谢你的帮助 `Private Sub UserForm_Initialize() Dim wsSheet As Worksheet Dim rnData As Range Dim vaData As Var

因此,这段代码是在excel 2013中编写的,我必须使用它的工作站是在2003年运行的。2013年,它工作正常,2003年返回“运行时错误”9“下标超出范围”。如果有人能帮我解决这个问题,我将不胜感激。看来问题出在这一点数据上

Set wsSheet=工作表(“Sheet1”)

再次感谢你的帮助

`Private Sub UserForm_Initialize()
 Dim wsSheet As Worksheet
 Dim rnData As Range
 Dim vaData As Variant
 Dim ncData As New VBA.Collection
 Dim lnCount As Long
 Dim vaItem As Variant

 Set wsSheet = Worksheets("Sheet1")

 With wsSheet
     Set rnData = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
 End With

 vaData = rnData.Value

 On Error Resume Next
     For lnCount = 1 To UBound(vaData)
     ncData.Add vaData(lnCount, 1), CStr(vaData(lnCount, 1))
 Next lnCount
 On Error GoTo 0

 With ComboBox1
     .Clear
     For Each vaItem In ncData
         .AddItem ncData(vaItem)
     Next vaItem
 End With
 End Sub

 Private Sub CommandButton1_Click()
Dim c As Range
 With Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
     Set c = .Find(ComboBox2.Value, LookIn:=xlValues)
     c.Activate
     ActiveCell.EntireRow.Copy
     Sheets("Sheet2").Select
     RowCount = Cells(Cells.Rows.Count, "a").End(xlUp).Row
     Range("a" & RowCount + 1).Select
     ActiveSheet.Paste
     Application.CutCopyMode = False
 End With
 Sheets("Sheet1").Select
 Range("a1").Select
 Unload Me
End Sub


Private Sub ComboBox1_Change()

Dim cell As Range
Me.ComboBox2.Clear
For Each cell In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
 If cell.Value = Me.ComboBox1 Then
     Me.ComboBox2.AddItem (cell.Offset(0, 1).Value)
 End If
Next cell
Me.ComboBox2.ListIndex = 0

End Sub`
可能是这种打字错误(您缺少两个范围前的点):

正如rory在上面的评论中指出的那样,检查您是否使用了正确的工作簿。为了安全起见,可以添加以下内容:

 Set wsSheet = ThisWorkbook.Worksheets("Sheet1")

如果该行出现错误,则工作表名称不正确,或者错误的工作簿处于活动状态。2003 Excel可能是本地化版本吗?谢谢Rory和Sun,将工作表名称更改为实际的工作表名称,并添加了两个点,现在问题已经解决了…现在我遇到了编译错误,但在将其放在这里之前,我将尝试找出它。谢谢你的帮助,我还在学习。LocEngineer,是的,这是一个本地化版本。然后工作表名称不再是“Sheet1”,而是“Tabelle1”或“Tableau1”之类的。请尝试以下操作:
Set wsSheet=Worksheets(1)
。通过使用索引而不是名称,您应该能够避免此类问题。另外:请参阅下面@Sun关于圆点的回答。您的
范围必须合格。谢谢您的反馈和Rory的帮助,我们取得了一些进步。
 With wsSheet
     Set rnData = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)
 End With
 Set wsSheet = ThisWorkbook.Worksheets("Sheet1")