2016-09-30 35 views
4

這個問題讓我瘋狂!我有以下VBA的Excel代碼:VBA-Excel將「FALSE」字符串轉換爲「False」

Sub Test() 

Dim sTempVal As String 

For i = 1 to 100 
    sTempVal = ActiveSheet.Cells(i, 1).Value 
    MsgBox sTempVal 
Next i 

因爲它是第一列循環下的值,如果它遇到的值或真或假的值,它會自動讀取它作爲「假」或者「真正」。爲什麼VBA會自動更改大小寫?我真的需要它在細胞中保留這個價值的確切情況。我認爲通過將sTempVal變量作爲一個字符串變暗,它會讀取單元格中的值 - 大小寫以及所有內容。請注意,這僅適用於FALSE和TRUE。任何其他值將按照它在單元格中顯示的完全讀取。

回答

8
Sub Test() 

Dim sTempVal As String 

For i = 1 to 100 
    sTempVal = ActiveSheet.Cells(i, 1).Text 
    MsgBox sTempVal 
Next i 

。文本「你看到的就是你得到的。」

編輯#1:

當您使用VBA .Value讀取項目作爲一個布爾值,並轉換爲字符串時,它使用自己的約定是轉換。

例如,如果你選擇一個單元格,輸入公式:

=1=1 

並運行這個小宏:

Sub WhatIsTruth() 
    MsgBox ActiveCell.Value 
End Sub 

您將看到:

enter image description here

使用.Text避免了這個問題。

+1

你可以添加一個快速行解釋爲OP這是爲什麼'.Value'發生了,因爲他們特意提出這個問題? – Dave

+1

@Dave看我的**編輯#1 ** ............這是否更好? –

+0

Ta。只是幫助OP瞭解更好:) – Dave

4

Range.Value返回Variant而不是String。您將它分配給String變量,因此它被隱式轉換。

這條線......

sTempVal = ActiveSheet.Cells(i, 1).Value 

...相當於:

sTempVal = CStr(ActiveSheet.Cells(i, 1).Value) 

VBA的演員從BooleanString是正確的套管 - Excel的演員陣容上套管。例如:

Debug.Print CStr(0 = 0) 'Prints "True" 

如果你想要的是什麼細胞Excel的字符串表示,可以使用Range.Text屬性來代替:

sTempVal = ActiveSheet.Cells(i, 1).Text 
相關問題