A coleção global Sheets está realmente se referindo à pasta de trabalho ativa . Evite referências implícitas!
As folhas de trabalho têm uma propriedade (name) . Se você não alterou, o objeto referido por Sheets("Sheet1") pode ser acessado diretamente com o identificador Sheet1 - supondo que seja o caso, isso funcionaria:
Sheet1.doThisFunction
Observe também que a coleção ThisWorkbook.Sheets contém planilhas e planilhas de gráfico. Você normalmente procuraria sua planilha na coleção ThisWorkbook.Worksheets .
Esta linha também é um problema:
MsgBox("hello")
Você está usando uma função como se fosse um procedimento; quando não estiver interessado em um valor de retorno, elimine os parênteses:
MsgBox "hello"
Quando você está chamando uma função, você precisa deles:
result = MsgBox("works?", vbYesNo)
Ao agrupar argumentos de procedimento entre parênteses, você está forçando a passagem de argumentos ByVal , forçando o VBA a avaliar o valor do que você está dando a ele.
Por exemplo:
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