2011-10-03 202 views
3

如何在Excel宏中將字符串轉換爲long。 CLng給我的類型不匹配錯誤在excel宏中將字符串轉換爲long

Dim wStr As String 
Dim w As Long 

wStr = "=RAND() * 0.3 + 0.35" 
w = CLng(wStr) 
+0

不匹配是由於「= RAND()* 0.3 + 0.35」不能被解釋爲長的事實。 CLng將處理已經是數字的字符串,如「0.35」。您需要首先評估表達式「= RAND()...」到一個數字,就像RonnieDickinson所建議的那樣。 – Mathias

回答

4

你的錯誤的根本原因是CDbl預計數值或一個字符串,看起來像一個數字。字符串"=RAND() * 0.3 + 0.35"本身看起來不像一個數字,儘管它會將評估爲爲一個數字。

你究竟想在這裏實現什麼?

如果其獲取從下式的長整數結果= RAND()* 0.3 + 0.35,使用

Dim w as Long 
w = Rnd() * 0.3 + 0.35 

如果其以模擬細胞公式使用

Dim w as Long 
w = Application.Evaluate("=RAND() * 0.3 + 0.35") 

至於公式本身,爲什麼這個構造?它會在[0.35,0.65]範圍內返回單一值,當四捨五入到一個長度時,將返回0或1,每個概率爲50%。
爲什麼不使用

w = Rnd() 

w = Application.Evaluate("=RAND()") 

w = Application.WorksheetFunction.RandBetween(0, 1) 

或有我錯過了一些其他的原因?

4

請嘗試下面的w公式。

w = CLng(Evaluate(wStr)) 

還是算了嘗試使用「Excel公式」,而直接進入VBA與它的隨機函數對應

w = CLng(Rnd() * 0.3 + 0.35)