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.