VBA运行时错误:“9”

我试图创build一个function,需要一些input的选定的位置和date,然后使用日input,扫描匹配的工作表数据。 但是,将一个string传递给Sheets.Activate正在使我得到

运行时错误9

我不确定为什么会发生这种情况,因为其他人在堆栈溢出的类似解决scheme中做了这个。 这是我的代码

Sub GatherNames() Dim x As Integer Dim y As Integer Dim rowN As Integer Dim cell As String Dim day As String Dim position As String day = ThisWorkbook.Sheets("Coverage").Range("C3") Sheets(day).Activate Application.ScreenUpdating = False 'Acquire entire data range NumRows = Range("B3", Range("B3").End(xlDown)).Rows.Count NumRows = NumRows / 2 'Start at beginning of data rowN = 3 cell = "B" & rowN Range(cell).Select 'Run for loop to check all rows For y = 1 To NumRows 'Get Rows Value Range(cell).End(xlToRight).Select 'Add to list If (ActiveCell.Value > 1) Then Debug.Print ActiveCell.Value End If 'Reset Cell to beginning of next Row rowN = rowN + 2 cell = "B" & rowN Range(cell).Select Next Application.ScreenUpdating = True End Sub 

我已经testing了所有的代码,而不包括抓住一天,然后激活date表,它工作正常,但是当我试着拿一个string,然后去使用该表

 Sheets(day).Activate 

它导致

运行时间错误9 – 下标超出范围

对于额外的细节,日的价值是“星期一”,我有一个名为星期一。

Day是一个保留字,所以你不能使用它作为一个variables。 将所有对该variables的引用更改为其他内容,例如myDay

在VB编辑器中,按F2打开对象浏览器:基本上没有列出的应该用于命名对象/variables/图纸/等,因为它们是为VBA 保留的。

如果您仍然遇到问题,请尝试在修改过的行上(例如使用myDay ),在此之后:

 myDay = ThisWorkbook.Sheets("Coverage").Range("C3") 

…添加一行:

 MsgBox "--" ActiveSheet.Name & "--" & vbcrlf & "--" & myDay& "--" 

当你再次运行代码时,它会说什么?

  • 这两条线是否相同?

  • 如果您遇到错误,请包含错误的全文或截图,以及破解代码的位置。