Я пытаюсь записать в ячейку, когда флажок установлен с помощью этой подпрограммы

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»: Ошибка метода «Диапазон» объекта «_worksheet».

Я определил переменные в верхней части модуля:

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

Что для меня странно, если я сначала нажму кнопку со следующим кодом в модуле, я больше не получу ошибку, даже если это тот же код, который я поместил в событие Workbook_open:

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

    rown = 3
    comment = "F" & rown

End Sub

Спасибо за помощь, я новичок в VBA!

1
Mustika 13 Май 2014 в 12:39

2 ответа

Лучший ответ

Вам необходимо объявить свои глобальные переменные как Public, иначе Workbook_Open будет создавать свои собственные переменные и работать с ними, поскольку они находятся вне его области видимости.

Public ws1 As Worksheet
Public ws2 As Worksheet
Public comment As String
Public rown As Integer
1
z̫͋ 13 Май 2014 в 10:27

Просто используйте 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
0
brettdj 17 Май 2014 в 08:39