2014-09-24 4 views
0

Мне интересно, в чем причина использования: = в вызове функции. Я знаю: = используется, когда функция вызывает несколько критериев. Вы можете использовать: =, чтобы обозначить, к каким критериям вы обращаетесь. Однако я не понимаю следующие фрагменты. Это от http://www.cpearson.com/excel/PassingAndReturningArrays.htm.Использование: = в вызове функции vba

Sub AAATest() 
    Dim StaticArray(1 To 3) As Long 
    Dim N As Long 
    StaticArray(1) = 1 
    StaticArray(2) = 2 
    StaticArray(3) = 3 
    PopulatePassedArray Arr:=StaticArray 
    For N = LBound(StaticArray) To UBound(StaticArray) 
     Debug.Print StaticArray(N) 
    Next N 
End Sub 

Он использует Arr: = StaticArray. Что такое Arr: = используется? Мой второй пример выглядит следующим образом:

If IsArrayAllocated(Arr:=Arr) = True Then 
     If NumberOfArrayDimensions(Arr:=Arr) = 1 Then 

Он проходит Arr в IsArrayAllocated, но я не понимаю, почему он не может просто использовать IsArrayAllocated (ARR) вместо этого. Спасибо за понимание.

+0

Это странно. Я считаю, что он мог бы просто использовать IsArrayAllocated (Arr) – JNevill

ответ

2

для читаемости

"NumberOfArrayDimensions" является сама функция, которая имеет «Орг:. = Сам аргумент

If NumberOfArrayDimensions(Arr:=Arr) = 1 then 

Вы бы использовать ": =" при отсутствии нескольких аргументов . чисто для удобочитаемости

Примеры: вызов функции, написанные в

HireEmployees NumberOfSalesmanToHire:=4 

гораздо более читабельным, чем скрытый

HireEmployees nbSlms:=4 

Или еще более загадочные

HireEmployees 4 

Вы написать код 1time, но вы должны будете читать это много, много раз. С этой целью приятно понимать, что вы читаете как можно быстрее.

На боковой ноте я предпочитаю не использовать аббревиатуры типа «Arr». Короче ли это для Array или это было написано в Pirate Day? Я предпочитаю, чтобы убедиться, что все явно, так как он не снижает производительность вычислений в любом случае

EDIT ДЛЯ ОБСЛУЖИВАНИЯ

Вы также хотите использовать «: =» в функции требует обслуживания. Допустим, у вас есть это:

Sub HireEmployees(Optional NumberOfSalesmanToHire as Integer=1, Optional NumberOfJanitors as Integer = 0) 
    (do something with Salesman) 
    (do something with Janitors) 
End Sub 

Позже вы изменить этот код, чтобы он не коммивояжера:

в малейшей
Sub HireEmployees(Optional NumberOfJanitors as Integer = 0) 
    (do something with Janitors) 
End Sub 

Теперь, если ваши аргументы не были явными, вы бы начать с funky behavior of-out ваш код:

HireEmployees 4 

Что означал предыдущий dev? Был ли старый коммивояжер, или это изменилось, теперь он работает только со швейцарами ...? Кто знает.

У вас нет этой проблемы, если ваши звонки были явно:

HireEmployees NumberOfSalesman:=4 

Как компилятор будет выдавать предупреждение о том, что это больше не работает, для этого предупреждения вашего кода от интерпретации старого коммивояжера уборщиков.

Смежные вопросы