Excel 2016不允许我将工作表分配给变量

时间:2018-03-31 05:32:16

标签: excel vba excel-vba excel-2016

我是一位经验丰富的C / C ++ / Java / C#开发人员,在Excel 2016中第一次尝试使用VBA,并使用以下完整宏来解决一个令人困惑的问题:

Sub AddDataToSheet1()
10  Dim ws As Worksheet
20  ws = Worksheets(1)
30  ws.Activate
40  ws.Range("A1").Value = "Apple Pie"
End Sub

在第20行,它因错误而崩溃:

Runtime error '91'
Object variable or With block variable not set
嗯......我试图设置它?这是在Windows 10 Pro上全新安装Office 365时创建的第一个工作簿。该工作簿中包含两个工作表,"Main Sheet""Aux Sheet 1"

如果我将第20行更改为:

20  ws = Sheets(1)

发生同样的错误。如果我尝试使用工作表或表格(例如

)按工作表名称进行索引,也会发生这种情况
20  ws = Sheets("Main Sheet")

即使使用应用程序进行限定也会导致相同的错误:

20  ws = Application.Workheets("Main Sheet")

Intellisense似乎认为Sheets,Worksheets,Application.Sheets和Application.Worksheets都是有效对象,_Default(index)作为可用操作。

知道这里可能会发生什么吗?

1 个答案:

答案 0 :(得分:1)

您设置对象但为变量赋值。您需要SET ws = Worksheets(1)

Sub AddDataToSheet1()
    Dim ws As Worksheet, str as string
    Set ws = Worksheets(1)
    ws.Activate
    ws.Range("A1").Value = "Apple Pie"
    str = ws.Range("A1").Value
    debug.print str
End Sub