2011-10-12 9 views
8

Sto mantenendo un'applicazione scritta in Microsoft Access con VBA.Concatenazione di stringhe in VBA

Sto dando un'occhiata al mio codice e ho appena notato che ho inconsciamente concatenato stringhe insieme al simbolo più (+) invece della e commerciale. Sono passati alcuni anni da quando ho codificato in VB6. Questo potrebbe causare problemi?

Tutto sembra a posto e ci vorranno solo pochi minuti per sistemare, sono solo curioso di sapere se tecnicamente sto facendo qualcosa di sbagliato.

risposta

12

La e commerciale è esplicitamente un'operazione di stringa, mentre il più è in sovraccarico:

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 

Quando viene utilizzato con i numeri sul segno più aggiungerà.

+4

diventa ancora più rischiosa quando si avere un null con plus. – Fionnuala

+0

Buon punto, aggiungendo una stringa a un valore null con la e commerciale si ottiene in modo sicuro un valore che è proprio quella stringa – tcarvin

0

Ciò può causare problemi.

Se si utilizza il più o commerciale per concatenare valori di stringa i risultati sono identici

Se si utilizza un plus per concatenare una stringa con un valore non stringa di esso genera un errore

Se si utilizza un il segno e commerciale vba proverà a "stringificare" i valori prima della concatenazione.

Così string_value + int_value + date_value sarà all'errore e string_value & int_value & date_value funziona bene

+1

L'esempio è (parzialmente) corretto, ma le frasi sopra riportate sono al contrario. Se si usa la e commerciale per concatenare una stringa con un valore non stringa, il valore non stringa viene convertito in una stringa e concatenato. Se si utilizza più, si ottiene un errore, a meno che il valore stringa sia numerico, nel qual caso viene convertito in un numero e vengono aggiunti i valori. Inoltre, se si utilizza più e uno degli operandi è nullo, il risultato è nullo; questo non succede con un amico. – phoog

+0

Grazie ho corretto le frasi scambiate per eliminare ogni confusione. – Eddy

4

Alcuni esempi, dalla finestra immediata VBA (la differenza tra la terza e la quarta è particolarmente fastidioso):

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