Busco información sobre la utilización de macros en excel

Hola espero que me puedas ayudar estoy casi comenzando con la macros en excel, bueno, hice un formulario donde por ejemplo tengo 5 textbox el textbox1 introduzco la fecha y del textbox2 al texbox5 introduzco artículos, lo que ne cesito hacer es esto: lo del textbox1 en la celda A1, y del textbox2 al textbox5 se sitúen todos en la celda b2 pero las veces que quiera meter más artículos el cursor empiece a escribir en la celda A6 y los artículos continúen en la columna "B6" por que lo hicepero me empieza a escribir en la celda A2 entonces todos los artículos me los encima, ojala me puedas entender gracias

1 Respuesta

Respuesta
1
Hubiera sido bueno que indiques exactamente qué no entendiste. Dentro de la macro tienes las explicaciones de que hace.
La macro "mira" la celda que le indicas al inicio en la variable "Inilista" (yo puse B2, pero puede sera A1 o la que tu quieras.
Si esa celda estuviera vacía,
tomará su número de fila, para después usarlo al momento de copiar lo que hayas ingresado en el userform.
Si notara que allí ya hay un dato controla que la fila siguiente no esté ocupada, por ejemplo si sólo tuvieras una línea de textos allí. En este caso, tomará el dato de número de fila que está debajo de esa línea.
Por último, si hubiera más de una línea ocupada, busca la última y determina la posición siguiente. A ella.
Al salir de este condicional múltiple, la variable vRow guarda el número de fila donde escribir los datos. Otro tanot pasa con vCOl que tendrá el número de columna correspondiente.
Con estos dos datos, la función Cell() arma las coordenadas de la hoja donde poner la información ingresada en las cuadras de texto.
Espero haber sido claro. Pero si te quedan dudas, sólo házmelo saber, indicando qué faltó explicar.
Un abrazo!
Fernando
Copiará allí lo que tenga el textbox1 y en la celda a su derecha el contenido de las otra cuatro cajas de texto. Es que tu pregunta decía:
Del textbox2 al textbox5 se sitúen todos en la celda b2,
bueno, eso es lo que esta macro hace.
Hola te agradezco por todo pero fíjate que lo probé pero no funciona se queda en la misma celda entonces cuando quiero meter más artículos me borra todos los primeros ijala me puedas ayudar gracias
Supondré que tu formulario también tiene un botón de comando que es el encargado de volcar los datos de los TextBox a la hoja.
A ese botón asígnale esta macro:
Private Sub CommandButton1_Click()
'coloca aquí la dirección de la celda
'donde empieza la lista de nombres:
IniLista = "B2"
'---------------- Gracias
Set IniLista = Range(IniLista)
vCol = IniLista.Column
'Selección de celda donde colocar el nombre
If IsEmpty(IniLista) Then 'SI la lista está vacía
vRow = IniLista.Row
ElseIf IniLista.End(xlDown). Row > 50000 Then 'Si la lista tiene una sola fila ocupada (de títulos, por ejemplo)
vRow = IniLista.Offset(1).Row
Else 'Hay registros anteriores
vRow = IniLista.End(xlDown).Offset(1).Row
End If
'... y lo que solicitabas que haga:
Cells(vRow, vCol).Value = TextBox1.Value
Cells(vRow, vCol + 1).Value = TextBox1.Value & " " & TextBox2.Value & " " & TextBox3.Value & " " & TextBox4.Value
Set IniLista = Nothing
End Sub
Esta macro incluye una rutina que considera si donde tiene que volcar los datos hay otros preexitentes o no.
Gracias pro tu respuesta pero me odrias explicar un poco mejor por que la verdad noi entendí
Gracias por las respuestas ya lo probé y si funciono pero no lo ocupo así, mira hice un formulario donde necesito llevar el control de unos artículos con precio y la fecha, pero la fecha unicamente la introduzco una ves supongamos en tal fecha compro 5 artículos, en el textbox1 necesito introducir la fecha, en el textbox2 un articulo, en el textbox3 el precio, el el texbox4 otro articulo, y en el texbox5 el precio del segundoarticulo,
entonces en la celda "A1 tengo como encabezado "fecha"), en ("B1" articulo) y en ("C1" precio), necesito que textbox1(fecha) quede guardado en "A2",
el texbox2 (articulo1 en "B2",
el textbox3(precio1 en C2),
el textbox4(articulo2 en B3)
el textbox5(precio2 en C3),
entonces cuando vuelva a introducir articulos de nuevo en otra fecha necesito que la otra fecha empiese una celda abajo a la izquierda del ultimo articulo introducido por favor ayudame o que me recomiendas gracias de todos modos lo que me diste me dio otras ideas ojala me respodas para ayudarme con esto gracias
Es extraño, porque hice una prueba y funciona correctamente. En realidad, tengo aplicada esa función en varios casos y, créeme, anda.
La única posibilidad de error es que la columna donde debe empezar a ingresar los datos del userform, tenga celdas ocupadas más abajo.
En mi ejemplo, la primera celda del rango es B2 (recuerda que debes cambiarla, si no fuese esa). Bien, debajo de esa celda NO DEBE haber celdas con datos.
Prueba la macro en una hoja en blanco, para ver si allí funciona.
Ten presente que la macro trabaja sobre la hoja seleccionada al momento de disparar la macro.
Dime si funciona, teniendo en cuenta estas sugerencias.
Un abrazo!
Fernando
Recién vuelvo de mi fin de semana y noté que dejaste una nueva pregunta sobre este tema, aunque ésta difiere un poco respecto a lo que habías planteado en la primera.
De todos modos, por una cuestión de cómo suelo organizar mis planillas, modifiqué la macro para que *muestre* algo como lo que solicitas aunque internamente, preserve la fecha en todas las líneas.
Esto suele ser útil para emitir reporte o tablas dinámicas por fecha o para poder ordenar la base y, adicionalmente, sirve para que la macro identifique sin lugar a dudas la ubicación de la última fila ocupada.
Para tu tranquilidad, la/s fecha/s posterior/es a la del encabezado tendrán un formato oculto. Esto es: Estarán presentes pero no visibles.
Y esta es la macro que hace tal cosa:
Private Sub CommandButton1_Click()
'coloca aquí la dirección de la celda
'donde empieza la lista de nombres:
IniLista = "A2"
'---------------- Gracias
Set IniLista = Range(IniLista)
vCol = IniLista.Column
'Selección de celda donde colocar el nombre
If IsEmpty(IniLista) Then 'SI la lista está vacía
vRow = IniLista.Row
ElseIf IniLista.End(xlDown). Row > 50000 Then 'Si la lista tiene una sola fila ocupada (de títulos, por ejemplo)
vRow = IniLista.Offset(1).Row
Else 'Hay registros anteriores
vRow = IniLista.End(xlDown).Offset(1).Row
End If
'... y lo que solicitabas que haga:
Cells(vRow, vCol).Value = TextBox1.Value
Cells(vRow, vCol + 1).Value = TextBox2.Value
Cells(vRow, vCol + 2).Value = TextBox3.Value
Cells(vRow + 1, vCol).Value = TextBox1.Value
Cells(vRow + 1, vCol).NumberFormat = ";;;"
Cells(vRow + 1, vCol + 1).Value = TextBox4.Value
Cells(vRow + 1, vCol + 2).Value = TextBox5.Value
Set IniLista = Nothing
End Sub
Pruebalo y dime
Recuerda que donde vuelque los datos no debe haber filas ocupadas debajo de la lista de fechas
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas