Szukaj…


Składnia

  • IdentifierName [ argumenty ]
  • Call IdentifierName [ (argumenty) ]
  • [Let | Set] expression = IdentifierName [ (argumenty) ]
  • [Let | Set] IdentifierName [ (arguments) ] = expression

Parametry

Parametr Informacje
IdentifierName Nazwa procedury do wywołania.
argumenty Rozdzielona przecinkami lista argumentów, które należy przekazać do procedury.

Uwagi

Dwie pierwsze składnie służą do wywoływania procedur Sub ; zauważ, że pierwsza składnia nie zawiera nawiasów.

Zobacz To jest mylące. Dlaczego nie zawsze używać nawiasów? dla dokładnego wyjaśnienia różnic między dwiema pierwszymi składniami.

Trzecia składnia służy do wywoływania procedur pobierania Function i Property Get ; gdy są parametry, nawiasy są zawsze obowiązkowe. Let kluczowe Let jest opcjonalne podczas przypisywania wartości , ale słowo kluczowe Set jest wymagane podczas przypisywania odniesienia .

Czwarta składnia służy do wywoływania procedur Property Let Property Set i Property Set ; expression po prawej stronie przypisania jest przekazywane do parametru wartości właściwości.

Składnia niejawnego połączenia

ProcedureName
ProcedureName argument1, argument2

Wywołaj procedurę po nazwie bez nawiasów.


Obudowa krawędzi

Call kluczowe Call jest wymagane tylko w jednym przypadku krawędzi:

Call DoSomething : DoSomethingElse

DoSomething i DoSomethingElse są wywoływane. Jeśli słowo kluczowe Call zostanie usunięte, wówczas DoSomething zostanie przeanalizowany jako etykieta linii zamiast wywołania procedury, co spowoduje uszkodzenie kodu:

DoSomething: DoSomethingElse 'only DoSomethingElse will run

Zwracane wartości

Aby pobrać wynik wywołania procedury (np. Procedury Function lub pobierania Property Get ), umieść wywołanie po prawej stronie zadania:

result = ProcedureName
result = ProcedureName(argument1, argument2)

Nawiasy muszą być obecne, jeśli istnieją parametry. Jeśli procedura nie ma parametrów, nawiasy są zbędne.

To jest mylące. Dlaczego nie zawsze używać nawiasów?

Nawiasy są używane do zawarcia argumentów wywołań funkcji . Używanie ich do wywołań procedur może powodować nieoczekiwane problemy.

Ponieważ mogą wprowadzać błędy, zarówno w czasie wykonywania, przekazując do procedury potencjalnie niezamierzoną wartość, jak i podczas kompilacji, po prostu z powodu niepoprawnej składni.

Czas pracy

Nadmiarowe nawiasy mogą wprowadzać błędy. Biorąc pod uwagę procedurę, która przyjmuje odwołanie do obiektu jako parametr ...

Sub DoSomething(ByRef target As Range)
End Sub

... i wywoływane w nawiasach:

DoSomething (Application.ActiveCell) 'raises an error at runtime

Spowoduje to błąd wykonania „Wymagany obiekt” # 424. Inne błędy są możliwe w innych okolicznościach: tutaj referencja do obiektu Application.ActiveCell Range jest oceniana i przekazywana przez wartość niezależnie od podpisu procedury określającej, że target zostanie przekazany ByRef . Rzeczywista wartość przekazana ByVal do DoSomething w powyższym fragmencie to Application.ActiveCell.Value .

Nawiasy zmuszają VBA do oceny wartości wyrażenia w nawiasach i przekazują wynik ByVal do wywoływanej procedury. Gdy typ ocenianego wyniku jest niezgodny z oczekiwanym typem procedury i nie można go niejawnie przekonwertować, pojawia się błąd czasu wykonywania.

Czas kompilacji

Ten kod się nie skompiluje:

MsgBox ("Invalid Code!", vbCritical)

Ponieważ wyrażenie ("Invalid Code!", vbCritical) nie może zostać ocenione do wartości.

To skompiluje i zadziała:

MsgBox ("Invalid Code!"), (vbCritical)

Ale na pewno wyglądałby głupio. Unikaj zbędnych nawiasów.

Jawna składnia wywołania

Call ProcedureName
Call ProcedureName(argument1, argument2)

Wyraźna składnia wywołania wymaga słowa kluczowego Call i nawiasów wokół listy argumentów; nawiasy są zbędne, jeśli nie ma parametrów. Ta składnia stała się przestarzała, gdy do VB dodano bardziej nowoczesną składnię połączeń niejawnych.

Opcjonalne argumenty

Niektóre procedury mają opcjonalne argumenty. Argumenty opcjonalne zawsze następują po wymaganych argumentach, ale procedurę można wywołać bez nich.

Na przykład, jeśli funkcja, ProcedureName było mieć dwa wymagane argumenty ( argument1 , argument2 ) i jeden opcjonalny argument, optArgument3 , można go nazwać co najmniej cztery sposoby:

' Without optional argument
result = ProcedureName("A", "B")

' With optional argument
result = ProcedureName("A", "B", "C")

' Using named arguments (allows a different order)
result = ProcedureName(optArgument3:="C", argument1:="A", argument2:="B")

' Mixing named and unnamed arguments 
result = ProcedureName("A", "B", optArgument3:="C")

Wywoływana tutaj struktura nagłówka funkcji wyglądałaby mniej więcej tak:

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String) As String

Optional słowo kluczowe wskazuje, że ten argument można pominąć. Jak wspomniano wcześniej - wszelkie opcjonalne argumenty wprowadzone w nagłówku muszą pojawić się na końcu, po wymaganych argumentach.

Możesz również podać wartość domyślną dla argumentu w przypadku, gdy wartość nie zostanie przekazana do funkcji:

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String = "C") As String

W tej funkcji, jeśli argument dla c nie zostanie podany, jego wartością będzie domyślnie "C" . Jeśli wartość nie jest dostarczany, wówczas będzie to zastąpić wartość domyślną.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow