¿Cómo mostrar en un cuadro de lista de un formulario excel varias filas por celda?

He creado un formulario para mostrar posibles soluciones a unos códigos de error de un sistema.

Se mete el código en el formulario y se vuelcan las soluciones en un 'Cuadro de lista'. Este 'Cuadro de lista' muestra una o varias filas dependiendo de todos los códigos que tengamos.

Cada fila del 'Cuadro de lista' lo coge de una celda en una hoja del excel. En esas celdas se exponen una serie de explicaciones para hacer las verificaciones pertinentes.

Me gustaría poder ponerlas en varias filas dentro de la propia celda y que después en el 'Cuadro de lista' apareciese en distintas filas. Actualmente me aparece cada celda en una única fila todo junto con el caracter especial de salto de línea.

1 Respuesta

Respuesta
1

Visita:

Cursos de Excel y Macros - YouTube


Por ejemplo, si la celda que contienen varias filas es la celda A2:

Private Sub CommandButton1_Click()
  ListBox1.List = Split(Range("A2").Value, Chr ( 10 ))
End Sub


Recomendación:

Consejos para desarrollar macros . curso de excel, curso de macros, excel, macros - YouTube

Consejos y trucos de excel para mejorar la presentación de tus datos. - YouTube

Buenos días Dante,

Gracias por tu rápida respuesta.

Disculpa que te vuelva a molestar, pero tengo muy pocos conocimientos al respecto y no sé como integrarlo en mi código. Las pruebas que estoy haciendo sólo me dan errores.

Abajo un extracto del código correspondiente a uno de los cuadros de lista que tengo.

cheklist es la tabla de donde extraigo la información con las celdas que contienen saltos de línea en su interior. Actualmente me muestra toda la celda seguida sin saltod e línea (pero sí con el carácter especial que indica salto de línea):

Private Sub UserForm_Activate()

Dim Columnas As Integer
Columnas = Range("checklist").Columns.Count
With Me.lista_checking_EV1EV2
.ColumnCount = Columnas
.ColumnWidths = "3000 pt"
.ColumnHeads = True
.RowSource = "checklist"
End With

End Sub

Visita:

Cursos de Excel y Macros - YouTube

----

Si pudieras proporcionar toda la información.

Imágenes de tu hoja. Cómo está tu listbox y cómo quieres el resultado.

---

Para hacer la carga tal como la quieres, entonces no debes utilizar rowsource. Debes utilizar otra propiedad del listbox, por ejemplo .list o .additem

Entonces hay que leer cada celda y de cada celda, cada fila e ir agregando la fila al listbox.

---

Con gusto te ayudo, pero debes proporcionar más detalle de tu información.

Abajo una captura de lo que es el formulario con información mostrada en el listbox. Puedes ver que tengo que usar barra lateral para poder desplazar y ver todo el texto.

Me gustaría que pudiese aparecer lo que ahora ves como la primera fila ("Inverter over current...") hasta el caracter especial de salto de línea, ahí apareciese en otra línea ("1- Check..."), siguiente salto línea en otra línea ("2- Power...")

A continuación captura de la hoja de Excel. Columna L es la tabla 'checklist' dónde aparecen las celdas que se muestran en el 'cuadro de lista' que contiene la información con los saltos de línea:

Vuelvo a pegar el código que tengo actualmetne:

Private Sub UserForm_Activate()

Dim Columnas As Integer
Columnas = Range("checklist").Columns.Count
With Me.lista_checking_EV1EV2
.ColumnCount = Columnas
.ColumnWidths = "3000 pt"
.ColumnHeads = True
.RowSource = "checklist"
End With

End Sub

No sé si lo he explicado bien.

De todos modos, mil gracias.

Ahora sí está perfectamente explicado y bien ejemplificado.

Preparo el código y lo pongo el foro para que lo pruebes.

Mientras revisa algunos consejos para programar que doy en mi canal:

https://youtu.be/HfFCtMl189U 

https://youtu.be/dy9w9zbkCaw 

Visita:

Cursos de Excel y Macros - YouTube

----

Te paso el código, reemplaza tu código por lo siguiente. Solamente cambia el nombre de la "Hoja1" por el nombre de tu hoja.

Private Sub UserForm_Activate()
'Por Dante Amor
  Dim sh As Worksheet
  Dim rng As Range
  Dim celda As Range
  Dim a As Variant, lin As Variant
  '
  Set sh = Sheets("Hoja1")          'Pon el nombre de tu hoja
  Set rng = sh.Range("checklist")
  '
  With lista_checking_EV1EV2
    .ColumnCount = 2
    .ColumnWidths = "25; 200"
    .ColumnHeads = False
    '
    For Each celda In rng.Cells
      If celda.Value <> "" Then
        For Each lin In Split(celda.Value, Chr ( 10 ) )
          .AddItem sh.Range("I" & celda.Row)
          .List(.ListCount - 1, 1) = lin
        Next
      End If
    Next
  End With
End Sub

El código carga el índice que tienes en la columna "I" para tener una referencia de cada una de las líneas que tienes en cada una de las celdas.


Vídeo recomendado:

Metodo find vba excel. Curso de macros. - YouTube


Sal u dos Dante Amor

Perdona que sea ten patán pero sustiyuyendo lo que tenía por el tuyo, me aparece:

"Error de compilación. No se puede encontrar el proyecto o libnreria":

Otro detalle. Si UserForm lo cambio por el nombre del formulario Formulario_EV1EV2 (aunque hasta ahora funcionaba así correctamente) ya no tengo error de compilación, pero el listbox no hace nada ni muestra nada.

El código lo debes poner dentro del usrform.

O comparte tu archivo en google drive, comparte el archivo para cualquiera que tenga la liga, copia la liga y la pegas aquí.

Reviso tu archivo y te ayudo a adaptar el código.


Vídeo recomendado:

(1) hipervinculo excel. Curso de excel. Ir en automático a otra hoja y seleccionar la celda deseada. - YouTube

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas