Macro: copiar datos de formulario a hoja seleccionada

Necesito que la macro copie los datos ingresados en el formulario en la hoja que selecione desde un combobox, hasta ahí lo hace... Pero repite la fila donde copia (osea, lo hace en una sola). Y de ser posible, ¿se le puede agregar la opción de agregar un link en uno de los textbox?

El cód. Que tengo es:

 Option Explicit
Private Sub CommandButton1_Click()
    Dim NombreHoja As String
    Dim HojaDestino As Range
    Dim NuevaFila As Integer   
    NombreHoja = Me.ComboBox1.Value
    Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A7").CurrentRegion
    NuevaFila = HojaDestino.Rows.Count + 1
    With ThisWorkbook.Sheets(NombreHoja)
        .Cells(NuevaFila, 1).Value = Date
        .Cells(NuevaFila, 2).Value = Me.TextBox1.Value
        .Cells(NuevaFila, 3).Value = Me.TextBox2.Value
        .Cells(NuevaFila, 4).Value = Me.ComboBox1.Value
        .Cells(NuevaFila, 5).Value = Me.TextBox3.Value
    End With
    MsgBox "Alta exitosa.", vbInformation, "EXCELeINFO"
    Unload Me
End Sub
    Private Sub CommandButton2_Click()        
        Unload Me
    End Sub
    'Al iniciar el formulario
    Private Sub UserForm_Initialize()      
        Dim intHojas As Integer
        Dim i As Integer        
        intHojas = ThisWorkbook.Sheets.Count        
        For i = 2 To intHojas            
            Me.ComboBox1.AddItem ThisWorkbook.Sheets(i).Name
        Next i
    End Sub

1 respuesta

Respuesta
1

Hay que tener algo de cuidado al usar CurrentRegion. Es útil para conocer el rango de una tabla de datos y la cantidad de filas y columnas que contiene.

Pero no es la mejor instrucción para encontrar la primer celda libre. Mira la siguiente imagen:

La tabla o región ocupa 4 filas. Entonces NuevaFila = 4 +1 da como resultado 5... pero no podrás enviar la info a la fila 5 si tu tabla empieza en fila 7. Y ni hablar si alguna col presenta fórmulas más allá de los datos ingresados.

Entonces, si no hay ningún otro tipo de tablas o texto en col A debajo de tus datos, las instrucciones correctas serían:

    Dim HojaDestino 'As Range
    Set HojaDestino = ThisWorkbook.Sheets(NombreHoja)  '.Range("A7").CurrentRegion
    NuevaFila = HojaDestino.Range("A" & Rows.Count).End(xlUp).Row + 1

Observa que también cambié la declaración de la variable HojaDestino.

Ahora, si tu tabla tiene debajo otra tabla o contenidos, como en esta otra imagen:

También podrías utilizar el código anterior, buscando hacia arriba a partir de la fila 20 que es el inicio de la 2da tabla:

    NuevaFila = HojaDestino.Range("A20").End(xlUp).Row + 1

Y si deseas utilizar CurrentRegion sabiendo que no hay columnas  más extensas que A , debes sumar las filas por encima del inicio del rango, o sea + 6
Y así quedaría entonces tu código original, con la declaración de variable tal como la tenías.

    Dim HojaDestino As Range
    Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A7").CurrentRegion
    NuevaFila = HojaDestino.Rows.Count + 1 + 6

Espero haberte aclarado el tema. No olvides valorar la respuesta. A continuación encontrarás botones para ello (Excelente o buena)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas