Estou recebendo um erro de função de chamada em vba?

1

Eu tenho algumas funções em uma planilha excel objetos que eu quero em excesso de um dos meus formulários. O erro é "Objeto requerido" Alguma idéia do que eu preciso?

Microsoft Excel Object:
    Public sub doThisFunction()
        msgbox("hello")
    End Sub

Forms:
    Call Sheets("Sheet1").doThisFunction
user590792
fonte

Respostas:

2

o Sheets coleção global é realmente referindo-se ao livro ativo . Evite referências implícitas!

Planilhas têm um (name) propriedade. Se você não mudou, então o objeto referido por Sheets("Sheet1") pode ser acessado diretamente com o Sheet1 identificador - assumindo que é o caso, isso funcionaria:

Sheet1.doThisFunction

Observe também que ThisWorkbook.Sheets coleção contém folhas de gráfico e planilhas. Você tipicamente procuraria sua folha no ThisWorkbook.Worksheets coleção.


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 envolver os argumentos do procedimento entre parênteses, você está forçando argumentos ByVal, forçando a VBA a avaliar o valor do que você está dando.

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
Mathieu Guindon
fonte
0

Call é uma declaração obsoleta e redundante, você pode simplesmente remover Call palavra chave ...

Se a sua chamada de msgbox não estiver retornando um valor, você poderá omitir os colchetes.

E para ter certeza de que você está trabalhando com a planilha certa, tente usar o codinome de planilhas, que estou assumindo que você tenha como Sheet1 mas você precisará ajustar o código, se você o chamou de outra coisa.

Microsoft Excel Object:
'This needs to be in Sheet1
    Public sub doThisFunction()
        msgbox "hello"
    End Sub

Forms:
    'This line needs to be in a `Sub` or `Function` block...
    Sheet1.doThisFunction
ThunderFrame
fonte
não está funcionando. Eu tentei a mesma coisa.
user590792
editei minha resposta
ThunderFrame