Como usar a função CallByName em VBA?

A função `CallByName` no VBA (Visual Basic for Applications) é utilizada para chamar uma propriedade ou método de um objeto em tempo de execução, usando o nome da propriedade ou do método como uma string. Esta função é particularmente útil quando você quer chamar métodos ou acessar propriedades dinamicamente, sem saber qual exatamente será chamada no momento de escrever o código.

A assinatura da função `CallByName` é:

CallByName(object, procname, calltype, [arguments()])
  • `object`: O objeto que contém a propriedade ou método que você quer acessar.
  • `procname`: Uma string que representa o nome da propriedade ou método.
  • `calltype`: Uma constante que especifica o que você quer fazer. As opções são:
    • `VbGet`: Para obter o valor de uma propriedade.
    • `VbLet`: Para definir o valor de uma propriedade.
    • `VbSet`: Para definir o valor de uma propriedade de objeto.
    • `VbMethod`: Para chamar um método.
  • `arguments()`: Argumentos opcionais que você pode passar para métodos.

Exemplos de Uso

Chamando um Método

Suponha que você tenha um objeto `Worksheet` e queira selecionar a planilha dinamicamente:

Sub CallSheetMethod()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' Chamando o método "Select" na planilha ws
    CallByName ws, "Select", VbMethod
End Sub

Acessando uma Propriedade

Para acessar ou definir o valor de uma propriedade, por exemplo, definindo a visibilidade de uma planilha:

Sub SetSheetVisibility()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' Definindo a propriedade "Visible"
    CallByName ws, "Visible", VbLet, xlSheetVisible
End Sub

Obtendo o Valor de uma Propriedade

Para obter o valor de uma propriedade, como o nome de uma planilha:

Sub GetSheetName()
    Dim ws As Worksheet
    Dim sheetName As String
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' Obtendo o valor da propriedade "Name"
    sheetName = CallByName(ws, "Name", VbGet)
    MsgBox sheetName
End Sub

Considerações

  • Utilize `CallByName` quando precisar de flexibilidade ao chamar métodos ou acessar propriedades de objetos no VBA.
  • Este recurso é poderoso em situações em que o objeto que você está manipulando pode mudar durante a execução do programa.
  • Mantenha a atenção ao passar os argumentos corretos e ao usar as constantes apropriadas (`VbGet`, `VbLet`, `VbSet`, `VbMethod`) para evitar erros de tempo de execução.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project