VBA-Excel转换" FALSE"字符串到"错误"

时间:2016-09-30 14:46:41

标签: vba excel-vba excel

这个问题让我抓狂!我有以下VBA Excel代码:

<!DOCTYPE HTML>
<html>
<head>
  <title>Transform Request</title>
</head>

<body onload=showSVGSource()>
<b><center>Transform Request Object + consolidate</b>
<div id=svgDiv style=background:lime;width:400px;height:400px; >
<svg id=mySVG width=400 height=400 >
<circle id=myCircle cx=0 cy=0 r=150 fill=yellow transform="translate(200,200)" />
</svg>
</div>
<br>
<button onClick=translateCircle()>translate</button>
<button onClick=scaleCircle()>scale</button>
<br>
<textarea id=svgSourceValue style=width:500px;height:100px;></textarea>
<center>
<script>
function translateCircle()
{
    var  objTransformRequestObj = mySVG.createSVGTransform()
    //---attach new  transform to element, init its transform list---
    var myTransListAnim=myCircle.transform
    var objTransList=myTransListAnim.baseVal

    objTransformRequestObj.setTranslate(40,0)
    objTransList.appendItem(objTransformRequestObj)
    objTransList.consolidate()
    showSVGSource()

}
function scaleCircle()
{
    var  objTransformRequestObj = mySVG.createSVGTransform()
    //---attach new  transform to element, init its transform list---
    var myTransListAnim=myCircle.transform
    var objTransList=myTransListAnim.baseVal

    objTransformRequestObj.setScale(.5,.3)
    objTransList.appendItem(objTransformRequestObj)
    objTransList.consolidate()
    showSVGSource()
}
function showSVGSource()
{
   svgSourceValue.value=svgDiv.innerHTML
}
</script>
</body>

</html>

当它循环第一列中的值时,如果它遇到值FALSE或值TRUE,它会自动将其读作&#34; False&#34;或&#34; True&#34;。为什么VBA会自动更改案例?我真的需要它来保留单元格中该值的确切大小写。我认为通过将sTempVal变量作为字符串进行Dim,它只会读取单元格中的值 - 大小写和所有内容。请注意,这仅适用于FALSE和TRUE。任何其他值都将与单元格中显示的完全相同。

2 个答案:

答案 0 :(得分:9)

Sub Test()

Dim sTempVal As String

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

.Text “你看到的就是你得到的。”

修改#1:

当您使用.Value时,VBA会将项目作为布尔值读取,并且在转换为字符串时,它会使用自己的约定进行转换。

例如,如果您选择了单元格并输入公式:

=1=1

并运行这个微小的宏:

Sub WhatIsTruth()
    MsgBox ActiveCell.Value
End Sub
你会看到:

enter image description here

使用.Text可以避免此问题。

答案 1 :(得分: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