Resultado de un Split en Cuadro de Lista

Tengo un Cuadro de Lista en el que tengo un listado de un campo de un albarán que tiene números de serie separados por coma o guion. Me gustaría que en ese cuadro de lista cuando seleccionara una linea en otro cuadro combinado abajo salieran separados para así poder llamar a una acción para ponerlo en un campo. Solo necesito el paso de separarlo en el otro cuadro de lista, lo demás ya se como hacerlo. He estado buscado información sobre el split pero no se como poner el resultado en un cuadro de lista tipo listado. ¿Se puede hacer? ¿Podrías darme alguna pista o algún ejemplo?

1 respuesta

Respuesta
1

Sin conocer la estructura del campo números de serie es difícil aportar algo. Si adiciona una imagen seria mejor para dar una respuesta más acertada.

Este seria el buscador y el resultado, y me gustaría que cuando diera por ejemplo doble click se rellenara el cuadro de lista de debajo con los números de serie separados en modo lista para luego ese numero usarlo para otra cosa.

Saludos y gracias

Le preparé este ejemplo, consta de 1 tabla 1 formulario y 1 módulo de VBA.

TABLA

Con base en esta tabla lleno el cuadro de lista principal

FORMULARIO

Observe cuando hago clic se pasan al siguiente cuadro de lista el campo desglosado. Si hago clic en otro elemento del cuadro de lista principal, obtengo la siguiente pregunta.

Si haga clic en SI obtengo lo siguiente:

Ahora, si hago Doble clic me retira el elemento y obtengo:

EVENTO AL HACER CLIC EN EN CUADRO DE LISTA DEL TEXTO ORIGINAL

Private Sub lstPpal_Click()
  Dim cta_campos As Byte
  Dim strCampo As String
  Dim x As Integer
  Dim varPos As Integer
  If Me.lstAux.ListCount > 0 Then
    If MsgBox("Hay items, ¿Los conserva? ", vbQuestion + vbYesNo + vbDefaultButton2, "Le informo") = vbNo Then
      'Remover items
       For x = 0 To Me.lstAux.ListCount - 1
        Me.lstAux.RemoveItem (varPos)
       Next
    End If
  End If
   cta_campos = contar_palabras(Replace(Me.lstPpal.Column(1), ",", " "))
   If cta_campos = 1 Then
     strCampo = extrae(Me.lstPpal.Column(1), 1, ",")
     Me.lstAux.AddItem strCampo
   Else
     For x = 1 To cta_campos
       strCampo = extrae(Me.lstPpal.Column(1), x, ",")
      Me.lstAux.AddItem strCampo
     Next x
   End If
End Sub

Observe que llamo 2 funciones:

Contar_palabras - Esta cuenta el número de palabras de una frase pero separada por espacios, por esto se utiliza la funcion Replace() para suprimir las comas (,)

extrae . Esta función extrae la palabra de acuerdo con la posición

CÓDIGO ENVENTO AL HACER DOBLE CLIC EN EL CUADRO DE LISTA INVIDUAL

Private Sub lstAux_DblClick(Cancel As Integer)
If lstAux.ListCount >= 1 Then
  Me.lstAux.RemoveItem (Me.lstAux.ListIndex)
End If
End Sub

Este código es para retirar el item seleccionado del cuadro de lista. Se pude mejorar, por ejemplo, con un botón para seleccionar todos, etc.

CÓDIGO DEL MÓDULO

Function contar_palabras(strPalabras As String)
'Función para contar las palabras en una frase
'Ej. contar_palabras("Mi hermano del alma"
'Retorna 4
Dim WrdArray() As String
WrdArray() = Split(strPalabras)
contar_palabras = UBound(WrdArray()) + 1
End Function
Public Function extrae(pvstring As Variant, pipart As Integer, Optional psDeli As String = ",")
 'Functión para extraer parte de una cadena
 'Parámetros:
 '           pvstring=Cadena de texto a minipular
 '           pipart=Parte de cadena a extraer de acuerdo con el separador,
 '                  por ejemplo,1 primera parte, 2 segunda parte
 '           psdeli=Separador, opcional por defecto coma (,) pero pueder otro como guion(-)
 'Elaborada por: Eduardo Pérez Fernández
 'Fecha: 06/09/2021
'Ejemplos de llamada:
'? Extrae("Eduardo, Pérez", 1,",") ------>> retorna Pérez elimina el espacio que hay antes de Pérez
'? Extrae(", Pérez", 2,",") ------>> retorna Pérez elimina el espacio que hay antes de Pérez
'? Extrae("Eduardo-Pérez", 2,"-") ------>> retorna Pérez. Observe que cambie el separador de cadena por -
'? Extrae("Eduardo, Pérez", 2) ------>> retorna Pérez. No inclui el separador toma el separador por defecto,
'? Extrae("Eduardo, Pérez, Fernández", 3) ----->> retorna el segundo apellido Fernández
 On Error Resume Next
  extrae = Null
  If Mid(pvstring, 1, 1) = psDeli Then
    pvstring = "nd" & pvstring
  End If
 If IsNull(pvstring) Then Exit Function
 extrae = Trim(Split(pvstring, psDeli)(pipart - 1))
End Function

Observe que la función extrae tiene bastante utilidad. Si quiere el ejemplo lo puede solicitar a [email protected] favor en el asunto anotar la pregunta.

¡Gracias! 

Me ha servido mucho el ejemplo, ya lo tengo funcionando, muchísimas gracias Eduardo ;-)

Me alegro pero no valoró la respuesta

Buenas de nuevo, 

Tu código me sirvió de maravilla la verdad, pero ahora tengo otro problema, a ver si me pudieras echar un cable. Necesito separar todos esos registros y ponerlos en una tabla nueva, pero cuando se añadan que se añada también el campo IDALBARAN que es el que esta en cada registro para luego poder relacionarlo. Son los números de serie de las entradas de material pero al final en vez de ponerlos en una linea separado por comas me gustaría ponerlo en una tabla asociados a un IDALBARAN para así buscarlos de manera mas sencilla. Esto es posible o seria muy complicado? He intentado con consulta de anexar pero no doy con la tecla para que me agregue a la tabla cada uno de los registros. ¿podrías ayudarme? Gracias por adelantado. 

Por cierto, te llego la votación no? Creo que si que lo hice bien.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas