Insertar datos con un textbox multiline en un varias celdas

En un userform tengo un textbox con la propiedad multiline activada, el cual le ingreso estos datos :

BBFL916401
BBFL126301
BBFK951301
BBFK085401
BBFJ715901
BBFJ422901
BBFJ437701
BBFH821301

A veces pueden ser mas de 20, el caso es que también tengo un commandbotton y cuando le diga que esos datos los pase a la celda a1, los pasa todos en una solo celda, y lo que necesito es que estos datos me los pase en varias celdas, por ejemplo : a1, a2, a3 etc...

4 respuestas

Respuesta
1

Para hacer algo así necesitas tener la esa información en un listbox en lugar de en un textbox.

Cuando lo tengas en un listbox con la propiedad multiline podrás pasarlo a distintas celdas

Dime si quedó claro.

ok, y como paso la info capturada de un textbox por el usuario a un listbox, para después poder pasarlo a varias celdas ??

Entonces tiene que haber tantas entradas de textbox como datos hay, es decir, en tu ejemplo tenemos que preguntarle al usuario que introduzca 8 datos pero cada úno de forma individual:

-Metemos un dato-----lo cargamos al listbox

-Metemos un dato-----lo cargamos al listbox

Oka,ya entendí la lógica, me funciono con este código

Propiedades del Textbox1 : *Behavior : (EnterKyBehavior): true [Para que le puedas dar enter y escribir una nota o algo por el estilo]
(Multiline) : true [Para que se puedan escribir mas de una linea en el mismo textbox]
En un CommandButton : (Texbox a listbox) [Para que se pasen los datos tal cual como los escribies en el textbox]
Private Sub CommandButton1_Click()
Dim a() As String
Dim i As Integer
a = Split(TextBox1, vbCrLf)
For i = 0 To UBound(a)
ListBox1.AddItem a(i)
Next
End sub
Propiedades del Listbox1 : (No lleva)
En un CommandButtom : (Pasar datos del listbox a la celda) :
Private Sub CommandButton2_Click()
Dim i As Integer
For i = 1 To ListBox1.ListCount
'Aquí se establece donde se quieran pasar los datos del listbox
Range("A1").Resize(ListBox1.ListCount) = ListBox1.List
Next
End Sub

Respuesta
1

¿Multiline? Te refieres a

Lista de selección múltiple, (¿clic en Múltiple?)


Si se establece el tipo de selección en Múltiple o Extendida, la celda que se especifica en el cuadro Vincular con la celda devuelve el valor 0 y se omite. Los tipos de
selección Múltiple y Extendida requieren el uso
de código de Microsoft Visual Basic para Aplicaciones (VBA).

¿Estas trabajando con VBA?

O ¿sabes trabajar con VBA?

De hecho esto lo tengo en un Userform, obvio con Visual Basic de excel 2010.

Ugh, tienes razón no me había fijado que estabas usando userform

Ok, trabajando conVBA,

Si los datos ingresados están, digamos, en la celda X1 (los cuales puedes asociar con ControlSource ) entonces puedes revisar cada carácter de Range("X1").value con algo asi

Dim x() As Byte
x = Range("A1").Text
For i = 0 To UBound(x)
If x(i) = 10 Then ' chr(10) es un fin de linea

MsgBox "este es el fin de una linea::" & i

...

'aquí pones alguna lógica de seleccionar con MID(x, inicio, largo)

'asignando valores a inicio y largo según el valor de i

...

cells(n,1= MID(x, inicio, largo)

...

End If
Next

Respuesta
1

Te dejo el código que ubica cada línea del contenido del TextBox en una celda de la columna A, supongo que el TextBox tiene por nombre TextBox1 y el botón se llama CommandButton1; con esto claro, te dejo el código que hace lo que necesitas

Private Sub CommandButton1_Click()
''Creada por FSerrano en 121107
''para shaveax en TodoExpertos.com
''copia el contenido de un textbox en un rango de celdas, separando el contenido de acuerdo a los cambio de línea
saltos = Len(TextBox1. Value) - Len(Application. WorksheetFunction. Substitute(TextBox1. Value, Chr(10), ""))
texto = TextBox1.Value
For i = 1 To saltos
     Cells(i, 1) = Mid(texto, 1, InStr(1, texto, Chr(10)) - 2)
     texto = Application.WorksheetFunction.Substitute(texto, Mid(texto, 1, InStr(1, texto, Chr(10))), "", 1)
Next
Cells(i, 1) = texto
End Sub
Respuesta
1

Perdona por la demora, espero te sirva.
La función multiline de un textbox no te divide el contenido en varias filas, lo que te hace es presentar el contenido en el textbox en varias líneas, pero sigue siendo una sola cadena de texto.
Lo que se puede hacer es, partir la cadena por un largo específico y cada pedazo ponerlo en una celda.
Te dejo una macro que corta en cadenas de 20 caracteres

Sub cortar()
'Corta en dos un enunciado
'Por.Dam
maximo = 20
emergente = maximo
Do While maximo > 1
    'MsgBox (Mid(Range("A1"), maximo, 1))
    If Mid(Range("A1"), maximo, 1) = " " Then
        texto1 = Left(Range("A1"), maximo)
        texto2 = Mid(Range("A1"), maximo + 1)
        Exit Do
    End If
    maximo = maximo - 1
    If maximo = 1 Then
        texto1 = Left(Range("A1"), emergente)
        texto2 = Mid(Range("A1"), emergente + 1)
    End If
Loop
Range("A2") = texto1
Range("A3") = texto2
End Sub

Habría que hacerle unos ajustes, empezando por obtener el largo de la cadena del textbox y de ahí empezar a partir en bloques de 10 y almacenar el resultado en una nueva celda
Saludos. Dam
Si te sirve, podrías

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas