Глобальная коллекция Sheets
действительно относится к активной книге. Избегайте неявных ссылок!
Рабочие листы имеют свойство (name)
. Если вы не изменили его, то к объекту, на который ссылается Sheets("Sheet1")
можно получить прямой доступ с помощью идентификатора Sheet1
- если это так, это будет работать:
Sheet1.doThisFunction
Также обратите внимание, ThisWorkbook.Sheets
содержит диаграммы и рабочие листы. Обычно вы ищете свой лист в ThisWorkbook.Worksheets
.
Эта строка также является проблемой:
MsgBox("hello")
Вы используете функцию, как если бы это была процедура; если вас не интересует возвращаемое значение, уберите скобки:
MsgBox "hello"
Когда вы вызываете функцию, они вам нужны:
result = MsgBox("works?", vbYesNo)
Оборачивая аргументы процедуры в скобках, вы принудительно передаете аргументы ByVal
, заставляя VBA оценить значение того, что вы ему даете.
Например:
Sub DoSomething(ByRef foo As Object)
'foo is passed by reference
End Sub
Sub Foobar()
DoSomething (ThisWorkbook) 'ThisWorkbook is force-passed by value
End Sub