Macro para colocar datos según cabecera de columna y fila ingresada.

Elabore un UserForm donde ingreso datos a una hoja de excel seleccionando los datos de un combobox y se va ingresando uno debajo de otro. Pero al tercer ingreso se empieza a grabar uno arriba de otro. Las columnas no siempre se llenan todas y quisiera que siga manteniendo el orden de ingresarse por el ultimo ingreso en la fila siguiente.

Columna de la A a la AR

A B C D E F G ....

1 1 1 1

1 1 1 1

1 1 1 1

Es de la manera que quisiera que se ingrese.

La macro que tengo es la sig.

Range("C1").Select
nextrow = _
Application.WorksheetFunction.CountA(Range("C:C")) + 2
For i = 1 To 44
a = Cells.Item(3, i)
If TextBox1.Text = a Then
Cells.Item(nextrow, i) = TextBox7.Value
End If
If TextBox2.Text = a Then
Cells.Item(nextrow, i) = TextBox8.Value
End If
If TextBox3.Text = a Then
Cells.Item(nextrow, i) = TextBox9.Value
End If
If TextBox4.Text = a Then
Cells.Item(nextrow, i) = TextBox10.Value
End If
If TextBox5.Text = a Then
Cells.Item(nextrow, i) = TextBox11.Value
End If
If TextBox6.Text = a Then
Cells.Item(nextrow, i) = TextBox12.Value
End If
Next

1 respuesta

Respuesta
1

Cambia este bloque

nextrow = _
Application.WorksheetFunction.CountA(Range("C:C")) + 2
For i = 1 To 44
a = Cells.Item(3, i)
If TextBox1.Text = a Then

Por este bloque:

nextrow = _
Application.WorksheetFunction.CountA(Range("C:C")) + 2

k = 3

For i = 1 To 44

a = Cells.Item(k, i)

k = k + 1
If TextBox1.Text = a Then

Pruébala y me dices.

Saludos. Dam

Dam, buenas noches!

Ante todo gracias por tu tiempo!

He cambiado lo indicado pero no me pasa los datos a la hoja o celdas.

La macro quedaría de la sig. manera :

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim ColAB As Long
Sheets("Hoja3").Activate
ColAB = ActiveSheet.Range("A65536").End(xlUp).Row + 1
Cells(ColAB, 1) = Date & (TextBox6) ' columna A
Cells(ColAB, 2) = TextBox12 ' Columna B

Range("C1").Select
nextrow = _
Application.WorksheetFunction.CountA(Range("C:C")) + 2
k = 3
For i = 1 To 42
a = Cells.Item(k, i)
k = k + 1
If TextBox1.text = a Then
Cells.Item(nextrow, i) = TextBox7.Value
End If
If TextBox2.text = a Then
Cells.Item(nextrow, i) = TextBox8.Value
End If
If TextBox3.text = a Then
Cells.Item(nextrow, i) = TextBox9.Value
End If
If TextBox4.text = a Then
Cells.Item(nextrow, i) = TextBox10.Value
End If
If TextBox5.text = a Then
Cells.Item(nextrow, i) = TextBox11.Value
End If
If TextBox6.text = a Then
Cells.Item(nextrow, i) = TextBox12.Value
End If
Next

' Los datos que se ingresan en los textbox viene de un combobox.

Disculpe las molestias..

Aguardo vuestra sugerencia

saludos

Juan

En tu macro original, cambia esta línea

nextrow = _
Application. WorksheetFunction.CountA(Range("C:C")) + 2

Por esta
nextrow = ActiveCell.SpecialCells(xlLastCell).Row + 1

Saludos. Dam

Dam, gracias por tu paciencia!

Modifique la macro como buen alumno, ja!

No me pasa las cantidades.,,

Las columna seria

A B C D E F G ....AR

(FECHA) (NOMBRE) EMPIEZAN CANTIDADES ....

Fecha y Nombre no tienen que tenerse en cuenta.

a = Cells.Item(k, i) esta parte toma la columna fecha.

Gracias por tu ayuda!

Aguarda vuestra sugerencia.

saludos

Juan

Regresa a tu macro original, si funciona bien, lo que pasa es que no había entendido, sólo cambia:

nextrow = _
Application.WorksheetFunction.CountA(Range("C:C")) + 2
por esta
nextrow = ActiveCell.SpecialCells(xlLastCell).Row + 1

Realiza la prueba y me comentas.

Adam.

Disculpa que estemos con este inconveniente.

Realice la prueba indicada y no me pasa los datos pero veo que deja seleccionada el rango("C1").

Puede ser que te envíe por mail un ejemplo asi es mas fácil relacionarlo?

La macro quedaría de la sig. forma :

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim ColAB As Long
Sheets("Hoja3").Activate
ColAB = ActiveSheet.Range("A65536").End(xlUp).Row + 1
Cells(ColAB, 1) = TextBox6 'Columna A
Cells(ColAB, 2) = TextBox12 ' Columba B

Range("C1").Select
nextrow = ActiveCell.SpecialCells(xlLastCell).Row + 1
For i = 1 To 42
a = Cells.Item(3, i)
If TextBox1.Text = a Then
Cells.Item(nextrow, i) = TextBox7.Value
End If
If TextBox2.Text = a Then
Cells.Item(nextrow, i) = TextBox8.Value
End If
If TextBox3.Text = a Then
Cells.Item(nextrow, i) = TextBox9.Value
End If
If TextBox4.Text = a Then
Cells.Item(nextrow, i) = TextBox10.Value
End If
If TextBox5.Text = a Then
Cells.Item(nextrow, i) = TextBox11.Value
End If
Next

saludos

Juan

Puedes ejecutar esta macro y decirme si es lo que necesitas.

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim ColAB As Long
Sheets("Hoja3").Activate
ufila = ActiveCell.SpecialCells(xlLastCell).Row + 1
Cells(ufila, 1) = "TXT6" 'TextBox6 'Columna A
Cells(ufila, 2) = "txt12" 'TextBox12 ' Columba B
'Range("C1").Select
'nextrow = ActiveCell.SpecialCells(xlLastCell).Row + 1
For i = 3 To 6
a = Cells.Item(1, i)
If TextBox1.Text = a Then
Cells.Item(ufila, i) = TextBox7.Value
End If
If TextBox2.Text = a Then
Cells.Item(ufila, i) = TextBox8.Value
End If
If TextBox3.Text = a Then
Cells.Item(ufila, i) = TextBox9.Value
End If
'If TextBox4.Text = a Then
'Cells.Item(nextrow, i) = TextBox10.Value
'End If
'If TextBox5.Text = a Then
'Cells.Item(nextrow, i) = TextBox11.Value
'End If
Next
Application.ScreenUpdating = True
End Sub

Adam.

Trate de ejecutar la macro pero me salta error de aplicación del objeto..

Dim ColAB As Long
Sheets("Hoja3").Activate
ufila = ActiveCell.SpecialCells(xlLastCell).Row + 1
Cells(ufila, 1) = "TXT6" 'TextBox6 'Columna A
Cells(ufila, 2) = "txt12" 'TextBox12 ' Columba B


disculpe las molestias.

saludos

Juan

No es ninguna molestia, con todo gusto.

A mí, me funciona bien, pero.

Cambia esta línea

Dim ColAB As Long

Por esta

Dim ufila As Long

Y me dices qué pasó.

Saludos. Dam

Dam, buenas tardes! Entendido igual muchas gracias por tu tiempo!

No pude responder antes por cuestión que solo tengo acceso desde el trabajo.

No aclare pero ese cambio lo había efectuado y no tuve éxito no me pasa los datos...

El user form esta confeccionado por un textbox que por un combobox se llenan los nombres.

La fecha es un textbox que toma la fecha de la pc.

y las otras columnas se toman de la siguiente manera

5 textbox donde se completa el articulo mediante un combobox y al lado los textbox del

7 al 11 donde se completa la cantidad,mas o menos para que tengas una idea.

Con el CommandButton1 lo que intentaba es que dependiendo el articulo se llene y se coloque la cantidad se llene la celda que pertenece a ese articulo y respetando la ultima fila utilizada sin tomar que la celda anterior del articulo este vacía.

Espero que sirve mi aclaración y de nuevo gracias por tu ayuda!

saludos

Juan

Lo que sucede con tu macro es lo siguiente, en esta línea

nextrow = _
Application. WorksheetFunction.CountA(Range("C:C")) + 2

Estás contando el número de datos que aparecen en la columna C, si en tu columna C, tienes 2 datos, tu última línea va a ser 4.
Por eso te cambié la línea a nextrow = ActiveCell.SpecialCells(xlLastCell).Row + 1, para que efectivamente se vaya hasta la última lína.
Con la línea que tú tenías se empezaban a encimar los nuevos datos.
La macro que te envié funciona bien, empieza a poner las líneas una tras otra sin encimarse. Prueba la macro sin tu hoja para que analices lo que realiza la macro y después lo transportamos a tu hoja.

Saludos. Dam

OK Adam gracias por la sugerencia!

Soy nuevo esa macro me han ayudado a crearla pero no pudimos encontrar la solución.

Solo necesitamos ingresar datos y se coloquen dependiendo del articulo que corresponda. Mediante este formulario llenamos otra planilla para imprimir.

Por lo cuan cuento con 5 textbox donde colocamos los nombre de articulo y 5 textbox donde colocamos la cantidad.

Al tocar el commandbotton tratamos de que se ingrese de la sig. manera.

dependiendo de lo que dicen los textbox donde se ingresan los artículos la cantidad se vaya colocando en una "x" hoja en un columna donde están nombradas los artículos.

Y que se tome en cuenta que no siempre se llenan toda la fila con datos pero si que tenga en cuenta la ultima fila ingresada.

Si me podrías orientar te agradezco mucho!

saludos

Juan

Intente realizar lo indicado por usted Alam.

Pero se ve que es mucho para mi, y no tuve éxito.

Aquí le dejo mi mail asi me explica!

[email protected]

muchas gracias por su tiempo

saludos

Juan

Entiendo que la macro no te funcione como tu esperas, pero la pregunta inicial fue contestada, las líneas ya no se enciman, y a mí si me funciona la macro.
Por favor, podrías cerrar la pregunta y abrir una nueva, indicando qué es lo que necesitas, ya que en tu macro, no entiendo por qué tienes el for hasta 44 y solamente tienes 6 textbox.
Si gustas, mándame tu hoja a [email protected] y con todo gusto reviso lo que tienes, también explícame, cuáles son los valores iniciales y después de la macro que esperas de resultado.
Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas