Macro en Excel para pasar datos a celdas determinadas

Que creo es algo muy sencillo (para quien sepa), pero que a mi me está dando muchos quebraderoas de cabeza.

Quisiera, mediante un textbox en un useform, introducir datos en una hoja de excel. La hoja de excel ya la tengo hecha, y consiste en un impreso, realizado por mi, para llevar a correos con un listado de nombres, código postal y tipo de impreso que se lleva. Para ello he diseñado un useform con esos tres campos, los cuales quiero llevar, por ejemplo, a la celda B14 el nombre, la E14 el código postal y a la I14 si es carta, impreso, o lo que sea. Una vez relleno el useform, darle al botón enviar, y que se rellenen las celdas mencionadas, debería quedar el useform preparado para meter el sigiente nombre, y pasarlo a las celdas inmediatamente inferiores (B15, E15 y I15), y así hasta que termine el listado. Posteriormente, imprimiria la hoja y debería darme la opción de guardarla (o no) y quedarse preparada para el siguiente listado, comenzando todo el proceso de nuevo.

Visto desde la perspectiva de un neófito no resulta complicado, pero por mas que experimento y busco en internet, me es imposible realizarlo por mi solo, por lo que ruego que alguien me eche una mano.

2 respuestas

Respuesta
1

[Hola. Estos vídeos rellenan una factura, pero si haces las modificaciones te puede servir para lo que tu quieres.

https://youtu.be/n2vlvfyRZxU 

https://youtu.be/EwDj4mdc51w 

Salu2 Carlos Arrocha

Respuesta
1

Te hice los códigos lo mas básico posible según lo que entiendo en tu pregunta. Asumo que tienes 3 TextBox, y 2 Botones. (Uno para pasar los datos a la celda y otro para imprimir y guardar)

En el botón de pasar los datos a la celda, usarías este código:

Private Sub CommandButton1_Click()
Dim uD As Integer
For uD = 15 To 50
    If IsEmpty(Cells(uD, 2)) Then
        Cells(uD, 2).Value = Me.TextBox1.Value
        Cells(uD, 5).Value = Me.TextBox2.Value
        Cells(uD, 9).Value = Me.TextBox3.Value
        Exit For
    End If
Next uD
Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Me.TextBox3.Value = ""
End Sub

has dicho que los datos comienzan en la fila 15, no estoy seguro que hay abajo o si no hay nada, pero use 50 como la posible ultima fila, ese numero lo puedes cambiar o lo puedes hacer variable.

Luego en el botón para imprimir y guardar, usarías este código (y aquí te recomiendo que definas un rango que vayas a imprimir):

Private Sub CommandButton2_Click()
ActiveSheet.PrintOut
If MsgBox("Desea guardar la hoja?", vbQuestion + vbYesNo, "Guardar?...") = vbYes Then
    Call ExportarHoja
End If
Range("B15:B50,E15:E50,I15:I50").ClearContents
End Sub

El código primero imprime, luego pregunta si deseas guardar la hoja, y luego limpia los datos en la hoja para dejarla lista para la próxima tanda de datos. De nuevo, si te fijas los datos van hasta la fila 50, lo cambias si es mas o menos en Range("B15:B50,E15:E50,I15:I50").ClearContents y te recomiendo que sea igual al numero en la otra macro.

Ahora bien, en caso de decir que sí quieres guardar la hoja, preferí poner el código en un modulo independiente y llamarlo. El código debes pegarlo en un modulo estándar, y seria este:

Sub ExportarHoja()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Dim FileName As String
Dim FilePath As Variant
Dim wb As Workbook
FileName = "Hoja Exportada"
    Application.DefaultFilePath = ThisWorkbook.Path
    FilePath = Application.GetSaveAsFilename( _
                InitialFileName:=FileName, _
                FileFilter:="Excel 93-2003 Workbook (*.xls), *.xls,")
If FilePath <> False Then
Application.DisplayAlerts = False
    ActiveSheet.Copy
    With ActiveWorkbook
        .SaveAs FilePath, FileFormat:=56
        .Close
    End With
Application.DisplayAlerts = True
End If
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
End Sub

Ese código abre la ventana de "Guardar Como", eliges la carpeta y das en guardar y listo. Por defecto se sobrescribe el archivo si ya existe.

Andy M.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas