Различие между использованием .text и .value в VBA Access - PullRequest
13 голосов

Я передаю значения textbox1.text в запрос, а иногда и в строку:

Dim combor1 As String
combor1 = comboReason1.Text

Как узнать, когда я должен поставить combor1 = comboReason1.Value?

Кроме того, почему мне нужно установить фокус для элемента управления, чтобы ссылаться на его свойство? Это не имеет смысла для меня.

Кроме того, когда я устанавливаю combor4 = comboReason4.Value и .value равен нулю, я получаю сообщение об ошибке при неверном использовании нуля.

Ответы [ 5 ]

22 голосов
/ 16 мая 2010
  • ". Текст" дает вам то, что отображается на экране
  • ". Value" дает вам базовый значение

Оба обычно дают одинаковый результат, за исключением случаев, когда соответствующий элемент управления

  1. элемент управления списком или списком
  2. отображаемое значение отличается от привязанного столбца

Пример:

  • id_Person - это поле со списком в форме
  • источником строк является «SELECT id_Person, personName FROM Tbl_Person»
  • ширина столбца "0 см; 3 см"
  • связанный столбец 1

В этой ситуации:

  • id_Person.text отображает Tbl_Person.personName
  • id_Person.value отображает Tbl_Person.id_Person.

.text свойство доступно, только когда соответствующий элемент управления имеет фокус.

.text является строковым значением, поэтому оно не может быть нулевым, а .value может быть пустым

EDIT: .text может быть вызван только тогда, когда элемент управления имеет фокус, а .value может быть вызван в любое время ...

1 голос
/ 17 мая 2010

Вы можете использовать свойство Text для установки или возврата текста, содержащегося в текстовом поле или в части текстового поля поля со списком.

Чтобы установить или вернуть свойство Text элемента управления, элемент управления должен иметь фокус , иначе возникнет ошибка. Чтобы переместить фокус на элемент управления, вы можете использовать метод SetFocus или действие GoToControl.

Вы можете использовать свойство Value, чтобы определить или указать, выбран ли элемент управления, выбранное значение или параметр внутри элемента управления, текст, содержащийся в элементе управления текстового поля, или значение пользовательского свойства.

Свойство Value возвращает или задает свойство элемента управления по умолчанию, которое является свойством, которое предполагается, когда вы явно не указываете имя свойства. В следующем примере, поскольку значением текстового поля по умолчанию является значение свойства Text, вы можете обратиться к его настройке свойства Text без явного указания имени свойства.

Forms!frmCustomers!txtLastName = "Smith"

Ссылка на текстовое свойство
http://msdn.microsoft.com/en-us/library/aa173453.aspx

Значение свойства Ссылка
http://msdn.microsoft.com/en-us/library/aa173476.aspx

0 голосов
/ 22 января 2018

Эта ветка и ответы в ней хорошо объясняют проблему. Я хотел бы добавить пару дополнительных моментов, которые я нашел экспериментально:

Порядок приоритета свойств:

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

Из того, что я видел в Access 2007, если .ControlSource не определено при открытии формы, .Value будет Null.

Если установить для свойства .ControlSource значение ="" (пустая строка), свойство .Value по умолчанию будет иметь значение вместо Null.

Вы можете установить для свойства .Value значение "" в событии Form_Load. Но ... я видел какую-то странную операцию там; кажется, что .Value иногда меняется с "" на Null, и я еще не выяснил обстоятельства.

Так что, кажется, лучше определить от .ControlSource до ="", либо в режиме конструктора, либо в событии Form_Load. Но будьте предупреждены, что niblet хитрый из-за встроенных двойных кавычек, и его может быть сложно читать.

Некоторые способы сделать это:

  • myTextbox.ControlSource = "=" & "" "" "(пять двойных кавычек подряд)
  • myTextbox.ControlSource = "=" & Chr (34) & Chr (34)
  • и т. Д., Есть много способов сделать это ...

Кроме того, вот расширенный лакомый кусочек. Если вы установите для свойства .TextFormat значение Rich Text, вы можете отформатировать текст в нем жирным шрифтом, курсивом, цветами и т. Д. Но имейте в виду (снова), начиная с Office 2007, исходный формат Microsoft RTF был списан в пользу «мини» версии HTML, которая поддерживает только несколько тегов, связанных с форматированием шрифтов и абзацев.

В качестве примера, скажем, вы хотите, чтобы в текстовом поле отображался маленький символ флажка ASCII со словом «действительный» курсивом рядом с ним, и все это было зеленым. Вы можете сделать это, но все это должно быть в 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 голосов
/ 27 августа 2015

.text запускает проверку поля и вызывает ошибку, если проверка поля повреждена. .value не запускает проверку поля, вы можете ввести ЛЮБОЕ значение

0 голосов
/ 19 августа 2011

Если текстовое поле является элементом управления ReadOnly, свойство value не будет использоваться, но если задать текст peoprty, значение все равно будет использоваться в данных формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...