2010-05-16 36 views
9

estoy pasando los textbox1.text valores en una consulta y, a veces en una cadena:Distinción entre el uso de .text y .value en Access VBA

Dim combor1 As String 
combor1 = comboReason1.Text 

¿Cómo sé cuando debo 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 .value es nulo, aparece un error acerca del uso no válido de nulo.

Respuesta

19
  • ".text" le da lo que se visualiza en la pantalla
  • ".value" le da la valor subyacente

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

  1. un control de cuadro combinado o cuadro de lista
  2. el valor mostrado difiere f rom la unida columna

Ejemplo:

  • id_Person es un control de cuadro combinado en una forma
  • la rowsource es "SELECT id_Person, PersonName DE Tbl_Person"
  • ancho de las columnas son "0cm; 3cm "
  • columna dependiente es 1

En esta situación:

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

. La propiedad de texto 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

EDIT: .text sólo puede ser llamado cuando el control tiene el foco, mientras que .value se puede llamar en cualquier momento ...

+0

Nótese también que .text está limitada a 2048 caracteres, mientras que .value puede tener hasta 60k caracteres. –

1

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 de un control Text, 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 seleccionado 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" 

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

Propiedad Valor
http://msdn.microsoft.com/en-us/library/aa173476.aspx

-1

Si el cuadro de texto es un control de sólo lectura, el valor de la propiedad no se utiliza, pero si establezca el texto de antemano, el valor se seguirá utilizando en los datos del formulario.

+0

Esta respuesta es incorrecta para Access. -1 –

0

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

0

Este hilo y las respuestas a este documento explican bien el problema. Hay un par de puntos adicionales Me gustaría añadir, 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 estado viendo en Access 2007, si .ControlSource no está definido cuando el formulario abre, .Value será Null.

Si se establece la propiedad .ControlSource a ="" (una cadena vacía), que hará que la propiedad .Value por defecto a que en lugar de Null.

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

Parece mejor definir .ControlSource en ="", ya sea en la Vista de diseño o en el evento . 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 maneras para hacerlo ...

Además, aquí es un dato extendido. Si se establece la propiedad .TextFormat a Rich Text, puede dar formato al texto en él con negrita, cursiva, colores, etc, pero te aviso (una vez más) , comenzando con Office 2007, el formato original de Microsoft RTF se desmanteló a favor de una versión "mini" de HTML que solo admite algunas etiquetas relacionadas con el formato de fuentes y párrafos.

Como ejemplo, supongamos que desea que el cuadro de texto muestre el carácter de casilla de verificación ASCII con la palabra "válido" en cursiva al lado y que todo sea verde. Puede hacerlo, pero todo tiene que estar en HTML, y no es fácil de leer:

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) 
Cuestiones relacionadas