2011-10-12 17 views
8

Tôi đang duy trì một ứng dụng được viết bằng Microsoft Access với VBA.Ghép nối chuỗi trong VBA

Tôi đang liếc qua mã của mình và vừa mới nhận thấy rằng tôi đã vô thức ghép chuỗi bằng dấu cộng (+) thay vì dấu và. Đó là một vài năm kể từ khi tôi đã mã hóa trong VB6. Điều này có thể gây ra bất kỳ vấn đề nào không?

Mọi thứ có vẻ ổn và sẽ chỉ mất vài phút để khắc phục, tôi chỉ tò mò liệu tôi có đang làm gì sai về mặt kỹ thuật hay không.

Trả lời

12

dấu và là một cách rõ ràng hoạt động chuỗi, trong khi cộng bị quá tải:

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 

Khi được sử dụng với số lượng dấu cộng sẽ bổ sung thêm.

+4

Nó được thậm chí không chắc chắn khi bạn nhiều có một null với cộng. – Fionnuala

+0

Điểm tốt, gắn thêm một chuỗi vào một giá trị rỗng với dấu và một cách an toàn dẫn đến một giá trị chỉ là chuỗi – tcarvin

0

Điều này có thể gây ra sự cố.

Nếu bạn sử dụng cộng hoặc dấu và để nối các giá trị chuỗi kết quả giống hệt

Nếu bạn sử dụng một cộng để nối một chuỗi với một giá trị chuỗi không nó sẽ ném ra một lỗi

Nếu bạn sử dụng một dấu vba và dấu vba sẽ cố gắng 'xâu chuỗi' các giá trị trước khi ghép.

Vì vậy string_value + int_value + date_value sẽ báo lỗi và string_value & int_value & date_value hoạt động tốt

+1

Ví dụ của bạn là (một phần) chính xác, nhưng các câu ở trên là ngược lại. Nếu bạn sử dụng dấu và để ghép một chuỗi có giá trị không phải chuỗi, giá trị không phải chuỗi sẽ được chuyển thành chuỗi và được ghép nối. Nếu bạn sử dụng dấu cộng, bạn nhận được một lỗi, trừ khi giá trị chuỗi là số, trong trường hợp đó nó được chuyển thành một số và các giá trị được thêm vào. Ngoài ra, nếu bạn sử dụng dấu cộng và một trong các toán hạng là null, kết quả là null; điều này không xảy ra với amepersand. – phoog

+0

Cảm ơn tôi đã sửa các câu được đổi chỗ để loại bỏ bất kỳ sự nhầm lẫn nào. – Eddy

4

Một số ví dụ, từ cửa sổ ngay lập tức VBA (phần chênh lệch giữa thứ ba và thứ tư là đặc biệt gây nhiều tranh cãi):

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