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