Vba 运行时错误';1004';:方法';范围';对象的'_工作表';失败

Vba 运行时错误';1004';:方法';范围';对象的'_工作表';失败,vba,excel,Vba,Excel,当使用此子项标记复选框时,我正在尝试写入单元格 Sub CheckBox7_Click() If ws1.Shapes("Check Box 7").OLEFormat.Object.Value = 1 Then ws2.Range(comment).Offset(0, 2).Value = "1" Else ws2.Range(comment).Offset(0, 2).Value = "0" End If End Sub 但是如果我只是打开工作表并单击复选框,我会得到运行时错误“1004”

当使用此子项标记复选框时,我正在尝试写入单元格

Sub CheckBox7_Click()
If ws1.Shapes("Check Box 7").OLEFormat.Object.Value = 1 Then
ws2.Range(comment).Offset(0, 2).Value = "1"
Else
ws2.Range(comment).Offset(0, 2).Value = "0"
End If
End Sub
但是如果我只是打开工作表并单击复选框,我会得到运行时错误“1004”:对象“\u工作表”的方法“Range”失败错误

我在模块顶部定义了变量:

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim comment As String
Dim rown As Integer
我在工作簿打开时设置变量:

Private Sub Workbook_Open()
rown = 3
comment = "F" & rown
Set ws1 = ThisWorkbook.Sheets("Rating test")
Set ws2 = ThisWorkbook.Sheets("Comments test")
End Sub
奇怪的是,如果我第一次按下模块中包含以下代码的按钮,我不会再收到错误,即使它与我放入工作簿_open事件中的代码相同:

Sub First_Comment()
Set ws1 = ThisWorkbook.Sheets("Rating test")
Set ws2 = ThisWorkbook.Sheets("Comments test")

    rown = 3
    comment = "F" & rown

End Sub

谢谢你的帮助,我是VBA新手

您需要将全局变量声明为
Public
,否则
工作簿_Open
将创建并处理自己的变量,因为这些变量不在其范围内

Public ws1 As Worksheet
Public ws2 As Worksheet
Public comment As String
Public rown As Integer

您应该直接使用
ws1

Sub CheckBox7_Click()
Set ws1 = ThisWorkbook.Sheets("Rating test")
If ws1.Shapes("Check Box 7").OLEFormat.Object.Value = 1 Then
ws2.Range(comment).Offset(0, 2).Value = "1"
Else
ws2.Range(comment).Offset(0, 2).Value = "0"
End If
End Sub

您在哪里定义了
工作簿\u open
?您确定工作簿\u open子运行吗?如果是,它必须在“ThisWorkbook”(在“Microsoft Excel对象”下)中,并且所有其他代码也必须在那里。是的,打开的工作簿在“ThisWorkbook”(在“Microsoft Excel对象”下)中定义,其他代码在同一VBA项目的“模块”中的模块1中。我还确信工作簿\u Open子会运行,因为当我将“msgbox comment”添加到工作簿\u Open时,它会显示一个带有“F3”的msgbox谢谢,这解决了问题!将公共变量用于工作表名称不是一个好的解决方案-只需直接在子表中应用它们。为什么将公共变量用于工作表名称不是一个好主意?我想在整个项目中多次引用该工作表,如果每次都要设置它,它会使我的代码变得混乱,因为该对象可能被错误地用于其他地方。对于这样一个简单的应用程序,您不需要全球化。