2012-07-21 295 views

回答

168

CSTR(45)我想是所有你需要(字符串轉換)

84

嘗試CSTR的()函數

Dim myVal as String; 
Dim myNum as Integer; 

myVal = "My number is:" 
myVal = myVal & CStr(myNum); 
36

大多數時候,你將不再需要 「轉換」; VBA會爲你做安全的隱式類型轉換,沒有使用轉換器如CStr

下面的代碼沒有任何問題,因爲變量是類型字符串,並且隱式類型轉換自動完成!

Dim myVal As String 
Dim myNum As Integer 

myVal = "My number is: " 
myVal = myVal & myNum 

結果:

「我的號碼是:0」

你甚至沒有得到那個花哨,這也工作:

Dim myString as String 
myString = 77 

「77」

你將需要轉換的唯一時間是當變量類型是不明確的(例如,類型變體,或細胞的Value(其變體))。

即使如此,如果您正在與另一個字符串變量或常量複合,您將不必使用CStr函數。就像這樣:

Sheet1.Range("A1").Value = "My favorite number is " & 7 

「我最喜歡的號碼是7」

所以,真的,只有罕見的情況是當你真的要存儲一個整數值,爲變體或單元格的值,當還與另一個字符串複合(這是一種非常罕見的側情況下,我可以補充):

Dim i as Integer 
i = 7 
Sheet1.Range("A1").Value = i 
Dim i as Integer 
i = 7 
Sheet1.Range("A1").Value = CStr(i) 

「7」

+2

我不明白爲什麼這個答案不會有更多的選票,因爲它是真實的。值得注意的是,類型轉換並非總是執行,而是取決於正在使用的操作員。例如,+操作並不總是將整數加寬爲一個字符串。 – 2015-11-11 11:46:40

+0

@MarkCh我知道這是舊的,但是...也許是因爲VBA的令人討厭的隱式轉換和默認的成員調用是如何使得如此多的VBA代碼變得脆弱,令人驚訝和容易出錯的原因?如果不是隱式轉換,隱式可訪問性,隱式默認成員訪問,帶有「Option Base 1」的隱式基於1的數組,隱式類型爲'Def [Type]'的類型, (男孩就是EVIL!),隱含的......你得到它 - VBA中唯一好的隱含的事情是隱式調用語法,它使得明確的「Call」過時。 – 2017-08-22 15:43:14

4

在我的情況下,該功能的CString沒有被發現。 但是,向該值添加空字符串也起作用。

Dim Test As Integer, Test2 As Variant 
Test = 10 
Test2 = Test & "" 
//Test2 is now "10" not 10 
+0

沒有人談論過'CString',這是一個VB.NET函數。連接一個空字符串來創建一個字符串是一個非常糟糕的轉換方法。使用'CStr'進行明確的類型轉換 - 這是一種隱式類型轉換,並引發任何人閱讀該代碼的眉毛。對不起,我在發佈這麼晚之後才發現這個答案,我希望我可以在早些時候降低它的評分。 – 2017-08-22 15:47:01

0

不聲明變量的捷徑是與類型提示:

s$ = 123 ' s = "123" 
i% = "123" ' i = 123 

這不會Option Explicit編譯。該類型將不會VariantStringInteger

2

如果你在拉弦恰好是一個十六進制數,如E01,則Excel將它,即使您使用CStr函數轉換爲0,即使你首先將它存放在一個字符串變量類型中。解決問題的一個方法是在價值的開始處追加'。

例如,拉出來時,Word表格的價值觀,使他們到Excel:

strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)