这个问题让我抓狂!我有以下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。任何其他值都将与单元格中显示的完全相同。
答案 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
你会看到:
使用.Text
可以避免此问题。
答案 1 :(得分:4)
Range.Value
会返回Variant
,而非String
。您将其分配给String
变量,因此它是隐式转换的。
这一行...
sTempVal = ActiveSheet.Cells(i, 1).Value
......相当于:
sTempVal = CStr(ActiveSheet.Cells(i, 1).Value)
VBA从Boolean
到String
的演员阵容是正确的 - Excel的演员阵容是大写的。例如:
Debug.Print CStr(0 = 0) 'Prints "True"
如果您希望Excel的字符串表示单元格中的内容,则可以改为使用Range.Text
属性:
sTempVal = ActiveSheet.Cells(i, 1).Text