Usando Userform escribir en la última celda vacía

Estoy tratando de programar un control de recibos de condominio y hay que agregar el monto mensualmente y llevar la cuenta de la deuda (cantidad de meses) de cada apartamento. Para ello se me ocurrió insertar mes a mes uno al lado y debajo del otro, algo así:

Suponemos:

        A            B                    C                  D              E              F              G

1     4       ENERO          FEBRERO      MARZO      ABRIL

2     3       FEBRERO      MARZO         ABRIL

3     2       MARZO         ABRIL

4     1       ABRIL

5

6

Necesito un código que llene la última celda (fila y columna) y que aumente la selección conforme se insertan los meses.

Explico mejor:

Tengo este código:

Sheets("Datos").Range("B:B").End(xlDown).Offset(1, 0).Value = UserForm1.TextBox1.Value

con el cual lleno la última celda de abajo de la columna B hasta la E y este otro:

Sheets("Datos").Range("A1:A4").End(xlToRight).Offset(0, 1).Value = UserForm1.TextBox1.Value

Para la última celda vacía al lado derecho de la fila.

El problema es que usándolos siempre me queda una celda vacía, ya que estos códigos están limitados hasta cierta fila y columna, por lo que siempre debo editar el código para que siga funcionando, pero no es la idea.

Por eso solicito su valiosa ayuda con un código que llene constantemente fila y columna de manera infinita.

1 respuesta

Respuesta
1

Yo lo tengo de la siguiente manera en el evento iniciar de userform cargo los datos de la hoja

Private Sub UserForm_Initialize()

ListBox1. Clear
ListBox2. Clear
Range("a2").Select
    Do While ActiveCell.Value <> ""
        ListBox1.AddItem ActiveCell
        i = ListBox1.ListCount - 1
            ListBox1.List(i, 0) = ActiveCell.Offset(0, 0
            ListBox1.List(i, 1) = ActiveCell.Offset(0, 1)
            ListBox1.List(i, 2) = ActiveCell.Offset(0, 2)
            ListBox1.List(i, 3) = ActiveCell.Offset(0, 3)

ActiveCell.Offset(1, 0).Select

   Loop
End Sub

en el evento click del listbox

Private Sub ListBox1_Click()

If ListBox1.Text <> 0 Then
        Cells(ListBox1.ListIndex + 2, 1).Select

End If
End Sub

En el textbox puede poner el mes a pagar si son varios juntos deberas haces uno a uno

en el boton donde este eligira la celda vacia a pagar

Private Sub CommandButton1_Click()
Dim columna As Integer
Dim final As Integer
'se define la hoja como variable
For columna = 4 To 18
      If ActiveCell.Offset(0, columna) = "" Then
       ActiveCell.Offset(0, columna) = TextBox1.Text
        final = columna - 1
        Exit For
    End If
Next

Si te silve recuerda valoar para cerrar la pregunta

Gracias, lo intenté y funciona tal como dices, pero no es lo que necesito. Claro cuando son pocas celdas no habría problema, pero cuando pasan de treinta, no es válido el código.

Te lo coloco con la imagen al final.

Private Sub UserForm_Initialize()
'limpia contenido de listbox al abrir
ListBox1.Clear
ListBox2.Clear
'selecciona contenido a partir de celda A2
Range("a2").Select
'hacer mientras la celda activa sea distinta de espacio en blanco
Do While ActiveCell.Value <> ""
ListBox1.AddItem ActiveCell
i = ListBox1.ListCount - 1
ListBox1.List(i, 0) = ActiveCell.Offset(0, 0)
ListBox1.List(i, 1) = ActiveCell.Offset(0, 1)
ListBox1.List(i, 2) = ActiveCell.Offset(0, 2)
ListBox1.List(i, 3) = ActiveCell.Offset(0, 3)

ActiveCell.Offset(1, 0).Select

Loop
End Sub

Private Sub ListBox1_Click()

If ListBox1.Text <> 0 Then
Cells(ListBox1.ListIndex + 2, 1).Select

End If

End Sub

Private Sub CommandButton1_Click()
Dim columna As Integer
Dim final As Integer
'se define la hoja como variable
For columna = 4 To 18
If ActiveCell.Offset(0, columna) = "" Then
ActiveCell.Offset(0, columna) = TextBox1.Text
final = columna - 1
Exit For
End If
Next

End Sub

Mi a ver que tal estas forma a ver si te resulta

Este seria el formato de la hoja

Private Sub UserForm_Initialize()
'limpia contenido de listbox al abrir
ListBox1.Clear
'selecciona contenido a partir de celda A2
Range("a5").Select
'hacer mientras la celda activa sea distinta de espacio en blanco
Do While ActiveCell.Value <> ""
ListBox1.AddItem ActiveCell
i = ListBox1.ListCount - 1
ListBox1.List(i, 0) = ActiveCell.Offset(0, 0)
ListBox1.List(i, 1) = ActiveCell.Offset(0, 1)
ListBox1.List(i, 2) = ActiveCell.Offset(0, 2)
ListBox1.List(i, 3) = ActiveCell.Offset(0, 3)

ActiveCell.Offset(1, 0).Select

Loop
End Sub

Private Sub ListBox1_Click()

If ListBox1.Text <> 0 Then
Cells(ListBox1.ListIndex + 5, 1).Select

End If

End Sub

Private Sub CommandButton1_Click()
Dim columna As Integer
Dim final As Integer
'se define la hoja como variable
For columna = 4 To 24
If ActiveCell.Offset(0, columna) = "" Then

'textbox1 este seria la fechas ¨15-ene¨
ActiveCell.Offset(0, columna) = TextBox1.Text

'textbox2 seria en monto que te pagen

ActiveCell.Offset(0, columna + 1) = TextBox2.Text
final = columna - 1
Exit For
End If
Next

End Sub

Al final solo tendría que hacer la sumas de lo que te pagan por mes como se muestra en la imagen con la fórmula =suma(las celdas que contenga los numero)

Prueba estas y me deja saber si le falta algo

No olvides valor si te silve para cerrar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas