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
    
por user590792 05.05.2016 / 21:50

2 respostas

2

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
    
por 05.05.2016 / 22:20
0

Call é uma declaração obsoleta e redundante, basta remover a palavra-chave Call ...

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 da planilha, o que estou dizendo que você tem como Sheet1 , mas precisará ajustar o código, se tiver chamado algo mais.

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
    
por 05.05.2016 / 22:00