我不是要求任何脚本的帮助,但我的问题是要澄清.最近我在Excel中做了很多VB脚本,所以我在这个问题上真的指的是Excel..text,.value和.value2有什么区别?我应该何时使用target.text,target.value和target.value2?我从未使用过value2选项,但仍想知道它的用途.
有时如果我使用.text它会给我一个错误,当我只检查或操作单元格中的文本时,我需要使用.value.然后有时我认为我应该使用.value我得到一个错误,我需要使用.text.通常它接受或不接受问题,但有时它会产生影响.我知道必须有一些逻辑,但我似乎无法弄明白.
我还发现,如果你只是将它保留为目标而不指定.text或.value它最初会起作用,但是有人做的事情最终会导致脚本出错,所以总是最好在它上面使用.something .我想我要问的是,是否有人可以给我一些指导方针,经验法则,如何正确使用每一个以及何时需要使用它.
谢谢你们的解释.我更了解它.它们都是很好的解释.下面是我的一些代码的一个小例子.我认为它应该是target.text,但它会出错,所以当我使用target.value时它会起作用.
If LCase(Target.Value) = LCase("HLO") And Target.Column = 15 Then
    Target.Value = "Higher Level Outage"
End If
我仍然有点困惑,因为当我想到价值或价值2时,特别是在你提供的答案之后,我认为它们只应该用于数字.但是,在我的例子中,我正在谈论严格的文本,这是我的脚本所指的很多(单元格中的文本,比数字更多).
Cha*_*ams 221
.Text为您提供一个字符串,表示单元格屏幕上显示的内容.使用.Text通常是一个坏主意,因为你可以得到####
.Value2 为您提供单元格的基础值(可以为空,字符串,错误,数字(双精度)或布尔值)
.Value 给出与.Value2相同的除外,如果单元格被格式化为货币或日期,它会为您提供VBA货币(可能会截断小数位)或VBA日期.
使用.Value或.Text通常是一个坏主意,因为你可能无法从单元格中获得实际值,并且它们比.Value2慢.
有关更广泛的讨论,请参阅我的文本与价值与价值2
Bat*_*eba 24
target.Value会给你一个Variant类型
target.Value2会给你一个Variant类型,但是a会Date被强制给你Double
target.Text试图强制转换为a String并且如果底层Variant证书不能强制转换为String类型,则会失败
最安全的事情是这样的
Dim v As Variant
v = target.Value 'but if you don't want to handle date types use Value2
VBA.VarType(v)在尝试显式强制之前,请检查变体的类型.
sil*_*ire 10
关于C#中的约定.假设您正在阅读包含日期的单元格,例如2014-10-22.
使用时:
.Text,您将获得日期的格式化表示,如屏幕上的工作簿中所示:
2014-10-22.此属性的类型始终string但可能并不总是返回令人满意的结果.
.Value,编译器尝试将日期转换为DateTime对象:{2014-10-22 00:00:00}最有可能仅在阅读日期时有用.
.Value2,为您提供细胞的真实潜在价值.在日期的情况下,它是一个日期序列号:41934.根据单元格的内容,此属性可以具有不同的类型.但是对于日期连续剧,类型是double.
因此,您可以检索并存储单元格的值dynamic,var或者object注意该值将始终具有您必须采取的某种先天类型.
dynamic x = ws.get_Range("A1").Value2;
object  y = ws.get_Range("A1").Value2;
var     z = ws.get_Range("A1").Value2;
double  d = ws.get_Range("A1").Value2;      // Value of a serial is always a double