2011-10-12 21 views
8

Microsoft Access'te VBA ile yazılmış bir uygulamayı sürdürüyorum.VBA'da birleştirme dizeleri

Koduma bakıyorum ve fark ettim ki, bilinçdışında dizeleri artı işareti yerine artı (+) simgesiyle birleştiriyorum. VB6'da kodlandığımdan birkaç yıl geçti. Bu herhangi bir sorun olabilir mi?

Her şey iyi görünüyor ve düzeltmek sadece birkaç dakika sürecek, teknik olarak yanlış bir şey yapıp yapmadığımı merak ediyorum. artı aşırı ederken

cevap

12

ve işareti, açıkça bir dize operasyondur: sayılarla kullanıldığında artı işareti katacak

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 

.

+4

Hatta daha sizi riskli alır artı bir null var. – Fionnuala

+0

İyi bir nokta, bir dizgeyi bir değere güvenli bir şekilde ekleyerek, bu dizgeyi – tcarvin

0

Bu, sorunlara neden olabilir.

sonuçların aynıdır dize değerlerini birleştirmek için artı ya da işareti kullanırsanız olmayan bir dize değeri olan bir dizeyi bağlamak için bir artı kullanırsanız, bir kullanırsanız

bir hata

atacağım ampersand sign vba, birleştirmeden önce değerleri 'dizginlemeye' çalışacaktır.

Yani string_value + int_value + date_value hata ve string_value & int_value & date_value VBA hemen penceresinden, ince

+1

olan bir değere götürür. Örneğiniz (kısmen) doğrudur, ancak yukarıdaki cümleler geriye doğrudur. Bir dize olmayan bir değerle bir dizeyi birleştirmek için ve işareti kullanırsanız, dize olmayan değer bir dizeye dönüştürülür ve birleştirilmiş olur. Artı kullanırsanız, dize değeri sayısal olmadıkça bir hata alırsınız, bu durumda sayıya dönüştürülür ve değerler eklenir. Ayrıca, artı kullanırsanız ve işlenenlerden biri boşsa sonuç null olur; Bu amepersand ile olmaz. – phoog

+0

Teşekkürler Karışıklığı gidermek için değiştirilen cümleleri düzelttim. – Eddy

4

Bazı örnekler çalışır (üçüncü ve dördüncü arasındaki fark özellikle eziyetli olan):

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