Access: Pasar contenido de cuadro de lista a tabla con doble clic

De nuevo expertos. Necesito que me ayuden, estoy buscando el código en VBA para pasar con un doble click el contenido de un cuadro de lista a una tabla X. Cada registro cuenta con 7 datos.

2 Respuestas

Respuesta
2

Con permiso de Jacinto (un saludo), me meto en la pregunta... Según lo que yo entiendo, quieres pasar los datos de todas las columnas seleccionadas de un cuadro de lista a una tabla. Eso no es problema, ni complicado, pero la forma de hacerlo dependerá de cómo tengas configurado tu cuadro de lista, en concreto la propiedad "selección múltiple", que encuentras en la pestaña Otras:

1º/ Si la tienes en "ninguna", es decir, solo se puede seleccionar un valor, con una simple SQL de inserción lo solucionas.

2º/ Si la tienes en "simple" (puedes marcar varios valores con clics del ratón), tendrás que recorrer la colección ItemSelected y ejecutar una SQL para cada valor.

3º/ Si la tienes en "extendida" (para marcar varios valores debes pulsar la tecla SHIFT o CTRL, además de hacer clic), el código te funcionará siempre y cuando hagas el doble clic manteniendo pulsada la tecla SHIFT.

Te dejo un ejemplo con las 3 opciones: http://www.filebig.net/files/i2tJZ6RUkR 

Un saludo.


Gracias por tu tiempo Sveinbjorn El Rojo. He adaptado tu código, pero me tira el siguiente error:

Así he dejado el código, cual sería mi error? La propiedad "Selección múltiple" la deje en Ninguna.

Private Sub Lista2_DblClick(Cancel As Integer)
Dim ctlList As Control
Dim Opcion As Variant
Set ctlList = Me.Lista2
For Each Opcion In ctlList.ItemsSelected
    CurrentDb.Execute "INSERT INTO aux_seleccion(Fecha, Apellidos, Nombres, Documento, Domicilio, Telefono, Otros_Datos) VALUES('" & ctlList.Column(1, Opcion) & "'," & ctlList.Column(2, Opcion) & "," & ctlList.Column(3, Opcion) & "," & ctlList.Column(4, Opcion) & "," & ctlList.Column(5, Opcion) & "," & ctlList.Column(6, Opcion) & "," & ctlList.Column(7, Opcion) & ")"
Next Opcion
Set ctlList = Nothing
End Sub

Gracias y saludos

El primer "error" que veo es que has cogido el código del ejemplo de selección múltiple para un cuadro de lista de selección única, aunque te podría funcionar igual.

El error que tienes y que te salta, es que has cogido literalmente el ejemplo en vez de adaptarlo a lo que tu tienes, y no has usado los delimitadores de datos adecuados:

.- Los valores de texto deben ir entre comillas simples, como el nombre en el ejemplo:

...'" & Valortexto & "'...

.- los valores numéricos van directamente, como la edad en el ejemplo:

..." & valornumerico & "...

.- los valores de fecha can entre almohadillas:

...#" & valorfecha & "#...

Por tanto, suponiendo que todos los campos, menos el primero son de texto:

.... VALUES(#" & ctlList.Column(1, Opcion) & "#,'" & ctlList.Column(2, Opcion) & "','" & ctlList.Column(3, Opcion) & "','" & ctlList.Column(4, Opcion) & "','" & ctlList.Column(5, Opcion) & "','" & ctlList.Column(6, Opcion) & "','" & ctlList.Column(7, Opcion) & "')"

Mil gracias de nuevo por su ayuda. Ahora entendí un poco más y el proyecto quedo muy bien. Saludos y gracias nuevamente por su tiempo.

Respuesta
2

Carlos: Esta pregunta me sale sugerida y no me queda claro si quieres pasar una fila del cuadro de listao "Todos" los datos.

Se puede hacer con una consulta de anexado o un Recordset.

Como idea base mira el mensaje 18 de éste Post en NksvSolutions >>

http://nksvaccessolutions.com/Foro/viewtopic.php?t=120 

Si sigues atascado y me explicas un poco más, puedo ampliar mi respuesta. Un saludo >> Jacinto

Gracias de nuevo Jacinto. Estuve mirando el texto y no es lo que necesitaba o no entendí nada. Digamos que lo que quiero es copiar el contenido de una selección en un cuadro de lista (que ya viene de una tabla auxiliar) y pegarlo en otra tabla (temporal). O debería usar otro cuadro de lista que reciba los doble clic del primero? La intención final es, primero filtrar una aproximación que muestra el resultado en un cuadro de lista, y luego de ello, elegir que parte de esos registros filtrados quiero imprimir. Gracias y saludos de nuevo

Carlos: Si he interpretado bien tu necesidad, mira éste ejemplo de Jermex que hace (creo), justo lo que pretendes, aunque lógicamente debes de adaptarlo a tus datos.

https://sites.google.com/site/jerrmex/descargas 

Ejemplo: 84_Imprime seleccionados de una lista.zip de Fecha >> 3 oct. 2012 8:58

Ya me contarás. Un saludo >> Jacinto

Gracias de nuevo Jacinto. He adaptado el ejemplo. Mi problema, es que tengo los datos en otras BD, que tienen tablas de igual estructura. Paso el código, para ver si me pueden ayudar

Private Sub cmd_verAux_Click()
   'Limpia la tabla de wPaso
   vSql = "DELETE Aux.* FROM Aux"
   EjecutaDoCmd
   'determina cuales registros están marcados para ser impresos
Set Datos = CurrentDb.OpenRecordset("DireccionesBDDs")
Do Until Datos.EOF
    For Each mvariant In Lista2.ItemsSelected
        vSql = ""
        vSql = "INSERT INTO Aux( [No], Fecha, Apellidos, Nombres, Documento, Domicilio, Telefono, Otros_datos ) " _
             & "SELECT Datos.[No], Datos.Fecha, Datos.Apellidos, Datos.Nombres, Datos.Documento, Datos.Domicilio, Datos.Telefono, Datos.Otros_datos " _
             & "FROM Datos " _
             & "WHERE Datos.[No] = " & Me.Lista2.ItemData(mvariant) & ""
        EjecutaDoCmd
    Next mvariant
    Loop
    'genera el reporte
    DoCmd.OpenReport "Informe_Aux", acViewPreview
    'marca en la tabla Medicamentos los ya impresos
    For Each mvariant In Lista2.ItemsSelected
        vSql = ""
        vSql = "UPDATE Datos SET Impreso = -1 WHERE Datos.[No] = " & Me.Lista2.ItemData(mvariant) & ""
        EjecutaDoCmd
    Next mvariant
    'desmarco de la lista los registros que estan marcados
    For i = 1 To Me.Lista2.ListCount - 1
        Me.Lista2.Selected(i) = False
    Next i
    Me.Lista2.Requery
    End Sub
Sub EjecutaDoCmd()
    With DoCmd
         .SetWarnings False
         .RunSQL vSql
         .SetWarnings True
    End With
End Sub

A saber: 

Las rutas de las bases de datos están guardadas en una tabla local llamada "DireccionesBDDs", y la tabla local Aux, es temporal, que me carga el resultado de una una búsqueda, mostrada en Lista2.

Gracias de nuevo y espero que puedan ayudarme. Saludos

Carlos: Creo que con el aporte de Sveinbjorn, (un saludo maestro), pocas dudas debes tener en cuanto al manejo de ListBox y guardado de datos en la Base de datos que usas.

He interpretado que además quieres llevar esos datos a otras tablas de otra u otras bases de datos externas.

Para no liarte ni liarme yo con nombres que quizá no acierte, porque entre otras cosas no se el Nombre del Campo de la Tabla >> DireccionesBDDs que tiene la dirección completa de la BD Externa, te pongo una línea genérica y tu le pasas los valores por las variables que tengas.

CurrentDb.Execute "INSERT INTO " & LaTablaDestino & " IN '" & LaBDExterna & "' SELECT * FROM " & LaTablaOrigen & ";"

Las tablas han de ser iguales para que funcione ésta línea. Un saludo >> Jacinto

Muchas gracias por tu ayuda Jacinto. Pude lograr mi objetivo juntando ambas respuestas y ha quedado muy bien la Base de Datos. Saludos y gracias por tu tiempo. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas