在VBA Access中,使用.text和.value的区别

16

我将textbox1.text的值传递到查询中,有时传递到一个字符串中:

Dim combor1 As String
combor1 = comboReason1.Text

我该在何时使用 combor1 = comboReason1.Value

此外,为什么需要设置控件的焦点才能引用其属性?这对我来说没有意义。

另外,当我设置 combor4 = comboReason4.Value 并且 .value 为空时,就会收到关于无效使用空值的错误信息。

5个回答

28
  • ".text" 属性给出屏幕上显示的内容
  • ".value" 属性给出底层值

两者通常给出相同的结果,除非对应的控件是:

  1. 组合框或列表框控件
  2. 显示值与绑定列不同时

例如:

  • id_Person 是表单中的一个组合框控件
  • 行源是 "SELECT id_Person, personName FROM Tbl_Person"
  • 列宽为 "0cm;3cm"
  • 绑定列为 1

在这种情况下:

  • id_Person.text 显示 Tbl_Person.personName
  • id_Person.value 显示 Tbl_Person.id_Person。

.text 属性仅在相应的控件具有焦点时可用。

.text 是一个字符串值,因此它不能为 Null,而 .value 可以为 Null。

编辑:只有当控件具有焦点时,才能调用 .text 属性,而可以随时调用 .value 属性...


请注意,.text 仅限于 2048 个字符,而 .value 可以有多达 60k 个字符。 - Rex Schrader

2

您可以使用Text属性来设置或返回文本框或组合框中文本框部分包含的文本。

要设置或返回控件的Text属性,必须将焦点放在该控件上,否则会出现错误。要将焦点移动到控件上,可以使用SetFocus方法或GoToControl操作。

您可以使用Value属性来确定或指定控件是否被选中、控件内所选值或选项、文本框控件中包含的文本或自定义属性的值。

Value属性返回或设置控件的默认属性,即当您没有明确指定属性名称时假定的属性。在下面的示例中,因为文本框的默认值是Text属性的值,所以您可以在不明确指定属性名称的情况下引用其Text属性设置。

Forms!frmCustomers!txtLastName = "Smith"

文本属性参考
http://msdn.microsoft.com/zh-cn/library/aa173453.aspx

值属性参考
http://msdn.microsoft.com/zh-cn/library/aa173476.aspx


0

这个线程和其中的答案很好地解释了这个问题。我想补充几点,这些是我通过实验发现的:

属性的优先级顺序为:

  1. .ControlSource
  2. .Value
  3. .Text

从我在Access 2007中看到的情况来看,如果在表单打开时未定义.ControlSource,则.Value将为Null

如果将.ControlSource属性设置为=""(空字符串),那么.Value属性将默认为该值,而不是Null

您可以在Form_Load事件中将.Value属性设置为""。但是...我在那里看到了一些不稳定的操作;似乎.Value有时会从""更改回Null,我还没有弄清楚具体情况。

所以最好在设计视图或Form_Load事件中将.ControlSource定义为=""。但要注意,由于嵌入的双引号,这个小片段很棘手,有时很难读懂。

一些实现方法包括:

  • myTextbox.ControlSource = "=" & """""(五个双引号)
  • myTextbox.ControlSource = "=" & Chr(34) & Chr(34)
  • 等等,有很多方法...

此外,这里还有一个扩展提示。如果将.TextFormat属性设置为Rich Text,则可以使用粗体、斜体、颜色等格式对其中的文本进行格式化。但要注意(再次提醒),从Office 2007开始,原始的Microsoft RTF格式已被废弃,取而代之的是一种“迷你”版本的HTML,仅支持与字体和段落格式相关的少数标记。

作为一个例子,假设你想让文本框显示小的ASCII复选框字符,并在旁边以斜体显示“valid”字样,并且将它们全部设置为绿色。你可以做到,但所有的内容都必须是HTML格式,而且不容易阅读。
myTextbox.TextFormat = acTextFormatHTMLRichText
myTextbox.ControlSource = "=" & Chr(34) & "<font color=#80CA45><font face=Wingdings>" & _
Chr(254) & "</font>&nbsp;<font face=Calibri><i>Valid.</i></font></font>" & Chr(34)

0

.text 开始字段验证,如果字段验证失败,则会导致错误。 .value 不会开始字段验证,您可以输入任何值


-1
如果文本框是只读控件,那么value属性将不会被使用,但如果您设置了text属性,则该值仍将在表单数据中使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接