Função CallByName

Invoca uma sub rotina usando seu nome como uma String.

Sintaxe:

CallByName(objeto As Object, NomeProc As String, TipoChamada As Integer [,arg0 [,arg1 …]])

Valor de retorno:

resultado: Variável opcional que contém o resultado do método ou propriedade chamado.

Parâmetros:

objeto: Módulo Basic, instância ClassModule ou serviço Uno que contém propriedades ou métodos.

NomeProc: Function, Sub ou Property que está sendo chamada.

TipoChamada: Tipo da ação a ser executada, tais como Get, Let, Method e Set.

arg0, arg1 …: Parâmetros opcionais da Function passados como argumentos posicionais.

Argumentos são passados na mesma ordem definida na assinatura do método. Argumentos de palavra-chave não são permitidos.

Valor

Descrição do TipoChamada

1

Method: Chama um procedimento como uma função ou sub rotina.

2

Get: Lê os conteúdos de uma propriedade ou variável.

4

Let: Atribui os conteúdos de uma Property a uma variável.

8

Set: Atribui um valor de referência a uma variável Object ou Variant.


Exemplo:

  1. O módulo Calc.Maths contém uma função Multiply que requer uma lista variável de números.

  2. Informação ScriptForge.Platform.Architecture é obtida.

  3. Propriedade DisplayDirectory do serviço UNO com.sun.star.ui.dialogs.FilePicker é definida como o diretório de usuário. Seu conteúdo é lidos duas vezes.

Sub CallByName_example
    Const _Method = 1, _Get = 2, _Let = 4, _Set = 8

    BasicLibraries.loadLibrary("Calc") ' Biblioteca de usuário Calc.Maths (biblioteca.módulo)
    Dim cm As Object : cm = Calc.Maths
    MsgBox CallByName(cm, "Multiply", _Method, 3, 45, 1, 89)		' 12015
    MsgBox CallByName(cm, "Multiply", _Method, 1.85e15, 44, 10^8)	' 8.14E+24

    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim p As Object : p = CreateScriptService("ScriptForge.Platform")
    MsgBox CallByName(p, "Architecture", _Get) ' 32bit/64bit

    Dim uno As Object : uno = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
    Dim fs As Object  : fs  = CreateScriptService("ScriptForge.FileSystem")
    CallByName(uno, "DisplayDirectory", _Let, fs.HomeFolder)
    MsgBox CallByName(uno, "DisplayDirectory", _Get)
    var = CallByName(uno, "getDisplayDirectory", _Get)
End Sub

Módulo Calc.Maths

Option Compatible ' Módulo Calc.Maths
Option Explicit

Public Function Multiply(ParamArray args() As Double) As Variant
    ''' Multiply uma lista variável de números '''
    Dim ndx As Integer
    If UBound(args) >= 0 Then
        Multiply = 1.0
        For ndx = 0 To UBound(args)
            Multiply = Multiply * args(ndx)
        Next ndx
    End If
End Function 'Calc.Maths.Multiply()

♥ Doe para nosso projeto! ♥