Distinción entre usar .text y .value en VBA Access

Estoy pasando los valores textbox1.text a una consulta y algunas veces a una cadena:

 Dim combor1 As String combor1 = comboReason1.Text 

¿Cómo sé cuándo debería poner combor1 = comboReason1.Value ?

Además, ¿por qué debo establecer el foco para que un control haga referencia a su propiedad? Eso no tiene sentido para mí.

Además, cuando configuro combor4 = comboReason4.Value y el valor .value es nulo, aparece un error sobre el uso no válido de null.

  • “.text” te muestra lo que se muestra en la pantalla
  • “.value” te da el valor subyacente

Ambos suelen dar el mismo resultado, excepto cuando el control correspondiente es

  1. un combobox o control de cuadro de lista
  2. el valor mostrado difiere de la columna encuadernada

Ejemplo:

  • id_Person es un control de cuadro combinado en un formulario
  • el rowsource es “SELECT id_Person, personName FROM Tbl_Person”
  • los anchos de columna son “0cm; 3cm”
  • la columna encuadernada es 1

En esta situación:

  • id_Person.text muestra Tbl_Person.personName
  • id_Person.value muestra Tbl_Person.id_Person.

La propiedad .text está disponible solo cuando el control correspondiente tiene el foco.

.text es un valor de cadena, por lo tanto, no puede ser nulo, mientras que .value puede ser nulo

EDITAR: solo se puede invocar .text cuando el control tiene el foco, mientras que se puede invocar .value en cualquier momento …

Puede usar la propiedad Text para establecer o devolver el texto contenido en un cuadro de texto o en la parte del cuadro de texto de un cuadro combinado.

Para establecer o devolver la propiedad Text un control, el control debe tener el foco o se produce un error. Para mover el foco a un control, puede usar el método SetFocus o la acción GoToControl.

Puede usar la propiedad Value para determinar o especificar si se selecciona un control, el valor u opción seleccionados dentro del control, el texto contenido en un control de cuadro de texto o el valor de una propiedad personalizada.

La propiedad Value devuelve o establece la propiedad predeterminada de un control, que es la propiedad que se asume cuando no se especifica explícitamente un nombre de propiedad. En el siguiente ejemplo, dado que el valor predeterminado del cuadro de texto es el valor de la propiedad Texto, puede consultar su configuración de propiedad Texto sin especificar explícitamente el nombre de la propiedad.

 Forms!frmCustomers!txtLastName = "Smith" 

Referencia de propiedad de texto
http://msdn.microsoft.com/en-us/library/aa173453.aspx

Referencia de propiedad de valor
http://msdn.microsoft.com/en-us/library/aa173476.aspx

.text inicia la validación del campo y provoca un error si la validación del campo se ve afectada. .value no inicia la validación del campo, puede ingresar CUALQUIER valor

Este hilo y las respuestas aquí explican bien el problema. Hay un par de puntos adicionales que me gustaría agregar, que he encontrado a través de la experimentación:

El orden de precedencia de las propiedades es:

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

Por lo que he visto en Access 2007, si .ControlSource no está definido cuando se abre el formulario, .Value será Null .

Si establece la propiedad .ControlSource en ="" (una cadena vacía), eso causará que la propiedad .Value en predeterminada en lugar de Null .

Puede establecer la propiedad .Value en "" en el evento Form_Load . Pero … he estado viendo alguna operación errática allí; parece que .Value veces cambia de "" a Null , y aún no he resuelto las circunstancias.

Por lo tanto, parece mejor definir .ControlSource to ="" , ya sea en Design View o en el evento Form_Load . Pero se prevenido, ese niblet es complicado debido a las comillas dobles incrustadas, y puede ser difícil de leer.

Algunas formas de hacerlo son:

  • myTextbox.ControlSource = “=” & “” “” “(cinco comillas dobles en una fila)
  • myTextbox.ControlSource = “=” & Chr (34) & Chr (34)
  • Etc, etc., hay muchas formas de hacerlo …

Además, aquí hay un tidbit extendido. Si establece la propiedad .TextFormat en Rich Text , puede formatear el texto con negrita, cursiva, colores, etc. Pero tenga cuidado (nuevamente), comenzando con Office 2007, el formato original de Microsoft RTF se canceló a favor de un versión “mini” de HTML que solo admite algunas tags relacionadas con el formato de fonts y párrafos.

Como ejemplo, supongamos que desea que el cuadro de texto muestre el pequeño carácter de checkbox ASCII con la palabra “válido” en cursiva junto a él, y que todo sea verde. Puedes hacerlo, pero todo tiene que estar en HTML, y no es fácil de leer:

 myTextbox.TextFormat = acTextFormatHTMLRichText myTextbox.ControlSource = "=" & Chr(34) & "" & _ Chr(254) & " Valid." & Chr(34) 

Si el cuadro de texto es un control ReadOnly, la propiedad de valor no se utilizará, pero si configura el texto, el valor se seguirá utilizando en los datos del formulario.