Глобальная коллекция 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