我正在尝试创建一个函数,它接受所选位置和日期的一些输入,然后使用日输入,扫描匹配表单中的数据。但是,将字符串传递给Sheets.Activate会导致我获得
运行时错误9
我不确定为什么会发生这种情况,因为其他人在堆栈溢出的类似解决方案中这样做了。这是我的代码
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
我已经测试了所有代码,同时排除抓住当天然后激活日期表并且工作正常,但是当我尝试接收字符串然后使用
转到该表Sheets(day).Activate
导致
运行时错误9 - 下标超出范围
对于额外的细节,一天的价值是"星期一"我有一张名为星期一的表。
答案 0 :(得分:1)
Day
是一个保留字,因此您无法将其用作变量。将对该变量的所有引用更改为其他内容,例如 myDay
。
在VB编辑器中,按 F2 打开对象浏览器:所列出的 none 基本上应该用于命名对象/变量/张/等,因为它们对于VBA,保留。
如果您仍然遇到问题,请尝试修改后的行(例如,使用 myDay
),然后执行此操作:
myDay = ThisWorkbook.Sheets("Coverage").Range("C3")
...添加一行:
MsgBox "--" ActiveSheet.Name & "--" & vbcrlf & "--" & myDay& "--"
再次运行代码时会说什么?
2行是否相同?
如果您收到错误消息,请附上错误的全文或屏幕截图以及错误代码。