Trabajo con Formulario y VBA; recorrido de campos Me! A través del nombre y no del índice

Tengo un formulario con muchos Cuadros de Texto, y una consulta cuyos nombres de los campos coinciden con algunos de los nombres de los Cuadro de Texto.

Quiero abrir la consulta (filtrada por un sólo registro) desde el formulario, recorrer todos los campos de la consulta y escribir el valor en el Cuadro de Texto que coincida en nombre. En código sería algo así;

    strSQL = "SELECT * FROM [Consulta] WHERE [Item] = " & longITEM
    Set CnsCalc = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
    For Each fldCns In CnsCalc.Fields
         Me.["" & fldcns.name & ""] = CnsCalc.Fields("" & fldCns.Name & "")
    Next
    CnsCalc.close
    set CnsCalc = nothing

Pero no soy capaz de direccionar al campo del formulario a través del nombre. 

¿Alguna ayuda o recomendación?

2 Respuestas

Respuesta
2

Te pongo otra forma por si te sirve. Supongamos que tengo una tabla Clientes

Y tengo un formulario independiente

Como no sé donde está el criterio que usas lo he puesto(para el ejemplo) en un botón de comando. Si lo pulso

El código del evento Al hacer clic del botón es

Private Sub Comando11_Click()
For Each Control In Form.Controls
If Control.ControlType = acTextBox Then
Control.Value = DLookup("" & Control.Name & "", "clientes", "nombrecliente='" & Me.Comando11.Caption & "'")
End If
Next
End Sub

Es decir, uso el nombrecliente como criterio, en tu caso sería el  Item

Y te evitas la consulta.

Cuál sería el método más rápido? Desde mi ignorancia pienso que es otro porque lo tengo limitado; son todos los campos de la consulta

No existe una solución única, cada uno las adapta a sus necesidades. Reconozco que no me gustan las consultas, por eso no las uso a menos que sea estrictamente necesario. Pero si a ti te funciona tu sistema ¿para qué cambiarlo? Te puse el ejemplo, por si otra vez te pudiera servir.

Genial, gracias! 

Voy a tener muy en cuenta la llamada la control por el tipo y Dlookup, de verdad... creo que me va a servir para otro tipo de consultas

Saludos

Respuesta
1

Prueba esto

me(fldcns.name)=fldCns.value

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas