VBA运行时错误:' 9'

时间:2017-12-08 17:37:04

标签: excel vba runtime-error

我正在尝试创建一个函数,它接受所选位置和日期的一些输入,然后使用日输入,扫描匹配表单中的数据。但是,将字符串传递给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 - 下标超出范围

对于额外的细节,一天的价值是"星期一"我有一张名为星期一的表。

1 个答案:

答案 0 :(得分:1)

Day 是一个保留字,因此您无法将其用作变量。将对该变量的所有引用更改为其他内容,例如 myDay

在VB编辑器中,按 F2 打开对象浏览器:所列出的 none 基本上应该用于命名对象/变量/张/等,因为它们对于VBA,保留

如果您仍然遇到问题,请尝试修改后的行(例如,使用 myDay ),然后执行此操作:

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

...添加一行:

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

再次运行代码时会说什么?

  • 2行是否相同?

  • 如果您收到错误消息,请附上错误的全文或屏幕截图以及错误代码。