2011-10-12 16 views
8

Utrzymuję aplikację napisaną w programie Microsoft Access z VBA.Ciągi konkatenacyjne w języku VBA

Przeglądam mój kod i zauważyłem, że podświadomie łączę ciągi znaków z symbolem plus (+) zamiast znaku ampersand. Minęło kilka lat odkąd kodowałem w VB6. Czy to może powodować problemy?

Wszystko wydaje się w porządku i zajmie to tylko kilka minut, jestem ciekawy, czy technicznie robię coś złego.

Odpowiedz

12

Znak & jest wyraźnie ciąg operacji, a także jest przeciążony:

Dim num1 As Integer 
num1 = RandomNumberBetween(1, 9) 

Dim num2 As Integer 
num2 = RandomNumberBetween(1, 9) 

Dim randomAge As String 'trying to get a random age between 11 and 99 

' works 
randomDate = "Your age is " & num1 & num2 

'broken 
randomDate = "Your age is " + num1 + num2 

przypadku korzystania z numerów znak plus doda.

+4

To staje się jeszcze bardziej ryzykowne, kiedy mieć wartość zerową z plusem. – Fionnuala

+0

Dobrze, dołączanie łańcucha znaków do wartości zerowej za pomocą znaku ampersand i bezpiecznie powoduje, że wartość jest właśnie taka. – tcarvin

0

Może to powodować problemy.

Jeśli używasz plusa lub ampersanda Łączenie wartości ciągów wyniki są identyczne

przypadku korzystania z plusa do złączyć ciąg z braku wartości ciągu będzie rzucać błąd

Jeśli używasz Znak ampersand vba będzie próbował "łańcuchować" wartości przed konkatenacją.

Więc string_value + int_value + date_value będzie błędów i string_value & int_value & date_value działa dobrze

+1

Twój przykład jest (częściowo) poprawny, ale zdania powyżej są cofnięte. Jeśli używasz znaków ampersand do łączenia łańcucha z wartością inną niż łańcuchowa, wartość nie-łańcuchowa jest konwertowana na ciąg znaków i łączona. Jeśli użyjesz plusa, pojawi się błąd, chyba że wartość ciągu jest liczbowa, w takim przypadku jest konwertowana na liczbę, a wartości są dodawane. Jeśli użyjesz plusa, a jeden z operandów ma wartość NULL, wynikiem jest null; nie dzieje się tak z amepersand. – phoog

+0

Dzięki temu poprawiłem zamienione zdania, aby wyeliminować jakiekolwiek zamieszanie. – Eddy

4

kilka przykładów, z bezpośrednim oknie VBA (różnica między trzecim i czwartym jest szczególnie dokuczliwy):

Print "5" & 6 
56 

Print 5 & 6 
56 

Print "5" + 6 
11 

Print "5" + "6" 
56 

Print "Five" & 6 
Five6 

Print "Five" + 6 'Type mismatch 

Print "5" & Null 
5 

Print "5" + Null 
Null