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ą.