2013-11-29 3 views
7

Я пытаюсь передать два строковых параметра в Sub, но это не позволяет мне сделать это. Подход, который я использовал, приведен ниже.Как передать несколько аргументов процедуре в VBA?

Sub callByValue(str1 As String, str2 As String) 
MsgBox str1 
MsgBox str2 

End Sub 

Вызывающие Макросы:

Dim s1, s2 As String 
callByValue(s1,s2) 

Призывая callByvalue, он бросает ошибку компилятора.

+0

Я не проголосовал, так как вы можете легко решить эту проблему самостоятельно. – jacouh

ответ

11

Вы должны удалить скобки

callByValue s1, s2 

запомнить Также в VBA, когда вы говорите Dim s1, s2 As String только s2 будет объявлен как String и первый из них будет объявлен Variant

Еще одна вещь, которая Я заметил, что вы не назначали значения s1 и s2 перед вызовом sub. Вы получите пробел для обоих.

Например, сделайте это.

Sub Sample() 
    Dim s1 As String, s2 As String 
    s1 = "Blah": s2 = "Blah Blah" 
    callByValue s1, s2 
End Sub 
+0

+ 1 за дополнительные мили –

+0

Большое спасибо. Это работает для меня – Samraan

+0

+1 Как вы ответили на синтаксическую ошибку OP ... Я не видел этого. – jacouh

2

Это лучшее определение для вспомогательного вызова ByVal.

Sub callByValue(ByVal str1 As String, ByVal str2 As String) 
    MsgBox str1 
    MsgBox str2 
End Sub 

Sub sof20285505callByVal() 
    Dim s1, s2 As String 
    callByValue s1, s2 
End Sub 
+0

+ 1 Теперь, после вашего редактирования, я могу выделить: P –

+1

Обратите внимание, что 'dim s1, s2 as String' объявляет только' s2' как String и 's1' как вариант –

+0

@mehow, это только качество моей подписи , Все вызывающие аргументы преобразуются в строку перед передачей в нее ... Вы можете даже назвать ее с типом даты без ошибок. – jacouh

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