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.