Como guardar en una tabla los datos que selecciono de un cuadro de lista?

Tengo un formulario en donde se ingresan varios datos y se pide documentación. Esta documentación se elige de un cuadro de lista, que tiene selección múltiple. Y todo esto debe quedar guardado en una tabla general.

Lo que no estoy logrando es que se guarden todos los items que selecciono de la lista en un mismo campo de la tabla general.

2 respuestas

Respuesta
1

Un cuadro de lista (dos columnas, un código + una descripción) ==> XMODELO
Un cuadro de texto (el destino de los datos seleccionados) ==> Texto21

Una subfunción que recoge los datos seleccionados en XMODELO, se utiliza el avance de linea como separador, se puede sustituir por una coma y un espacio (con la coma bastaría como separador, el espacio se añade por estética).

Private Sub Crea_Lista()
Dim Bucle
If Me.XMODELO.ItemsSelected.Count = 0 Then Exit Sub
Me.Texto21 = ""
For Each Bucle In Me.XMODELO.ItemsSelected
Me.Texto21 = Me.Texto21 & vbCrLf & Me.XMODELO.Column(1, Bucle)
Next Bucle
End Sub

Si se utiliza: Me.XMODELO.Column(1, Bucle) se obtiene una lista con las descripciones (puede desbordar el campo de destino)
Si se utiliza: Me. XMODELO. Column(0, Bucle) se obtiene una lista con los códigos

Mil Gracias !!!

Me quedó perfecto !

Saludos!

Para evitar el salto de línea o separador no deseado (sea al principio o al final que es donde la ponen en la opción alternativa) solo hace falta una línea más:

Private Sub Crea_Lista()
Dim Bucle
If Me.XMODELO.ItemsSelected.Count = 0 Then Exit Sub
Me.Texto21 = ""
For Each Bucle In Me.XMODELO.ItemsSelected
If Len(Me.Texto21) <> 0 Then Me.texto21 = Me.texto21 & vbCrLf
Me.Texto21 = Me.Texto21 & Me.XMODELO.Column(1, Bucle)
Next Bucle
End Sub

Y cambiar el separador, el color se debería aplicar en función de la necesidad (quien sabe lo que puede salir si no se corresponde el separador utilizado a capricho con el establecido en la aplicación)

Respuesta
1

Si inicia con vbCrLf quedará la primera línea en blanco. Le dejo este ejemplo en donde puede elegir la columna a incluir y el separador. Para el ejemplo utilizo la columna "nombres"

ESPACIO

Si hago clic en Sí se adiciona el resultado en la tabla, la llamo tblResultado

NUEVA LÍNEA

COMA

DOS PUNTOS

TABLA RESULTADO

En esta tabla el campo "campos" es de tipo largo, porque si es texto corto se limita a 255 caracteres.

CÓDIGO DEL BOTÓN GUARDAR

Private Sub btnGuardar_Click()
 On Error GoTo hay_error
 Dim sFiltro As String
 Dim varPos As Variant
 Dim intColumna As Byte
 Dim strSeparador As String
 If IsNull(Me.cboColumna) Then
    MsgBox "Debe indicar la columna a tomar", vbInformation, "Cuidado..."
    Me.cboColumna.SetFocus
    Exit Sub
 End If
  If IsNull(Me.cboSeparador) Then
    MsgBox "Debe indicar el separador de filas", vbInformation, "Cuidado..."
    Me.cboSeparador.SetFocus
    Exit Sub
 End If
 If lstClientes.ItemsSelected.Count = 0 Then
    MsgBox "No ha seleccionado los registros a excluir", vbInformation, "Le informo"
    Exit Sub
 End If
 Select Case Me.cboColumna
   Case 1
      intColumna = 0
   Case 2
      intColumna = 1
   Case 3
      intColumna = 2
   Case 4
       intColumna = 3
 End Select
Select Case Me.cboSeparador
   Case 1
      strSeparador = " "
   Case 2
      strSeparador = vbCrLf
   Case 3
      strSeparador = ","
   Case 4
      strSeparador = ";"
   Case 5
      strSeparador = ":"
 End Select
 For Each varPos In lstClientes.ItemsSelected
       sFiltro = sFiltro & Me.lstClientes.Column(intColumna, varPos) & strSeparador
 Next varPos
 If sFiltro <> "" Then
  sFiltro = Left(sFiltro, Len(sFiltro) - 1)
 End If
 If MsgBox(sFiltro & vbCrLf & vbCrLf & "¿Adiciona el resultado? ", vbQuestion + vbYesNo + vbDefaultButton2, "Resultado") = vbYes Then
   CurrentDb.Execute "INSERT INTO tblResultado(campos) VALUES('" & sFiltro & "')"
   If Err.Number = 0 Then
      MsgBox "Resultado adicionado a la tabla satisfactorialmente", vbInformation, "Resultado"
   End If
 End If
hay_error_exit:
   Exit Sub
hay_error:
   MsgBox "Ocurrió el error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error..."
   Resume hay_error_exit
End Sub

Se puede hacer muchas cosas más, pero creo que para el ejemplo es suficiente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas