¿Por qué esta macro no copia los datos en la fila si hay una columna con valor?

La siguiente macro publicada aquí; no graba los datos diligenciados en el formulario en la hoja "Captura" en la fila correcta de la hoja "Datos", si la columna tiene un valor diligenciado previamente (ver la imagen de abajo). ¿Es posible indicarle a la macro que solo utilice las columnas (1 a 11) y pueda de esta forma grabar los datos en la fila correcta? La idea es fijar un valor en toda la columna 12 u L. Pero hasta ahora no es posible porque siempre busca la fila que no tenga ningún valor en la columna.

Option Explicit
Sub Captura_Datos()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String
'
strTitulo = "Atención Telefónica"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Set TransRowRng = ThisWorkbook.Worksheets("Datos").Cells(1, 1).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("Datos")
    .Cells(NewRow, 1).Value = Date
    .Cells(NewRow, 2).Value = Format(Date, "dd")
    .Cells(NewRow, 3).Value = Format(Date, "mm")
    .Cells(NewRow, 4).Value = Format(Date, "yy")
    . Cells(NewRow, 5).Value = ThisWorkbook. Sheets(1). Range("C6")
    . Cells(NewRow, 6).Value = ThisWorkbook. Sheets(1). Range("C9")
    . Cells(NewRow, 7).Value = ThisWorkbook. Sheets(1). Range("C12")
    . Cells(NewRow, 8).Value = ThisWorkbook. Sheets(1). Range("C15")
    . Cells(NewRow, 9).Value = ThisWorkbook. Sheets(1). Range("F9")
    . Cells(NewRow, 10).Value = ThisWorkbook. Sheets(1). Range("F12")
    . Cells(NewRow, 11).Value = ThisWorkbook. Sheets(1). Range("F15")
End With
'
MsgBox "Alta exitosa.", vbInformation, strTitulo
Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo)
If Limpiar = vbYes Then
    With ActiveWorkbook.Sheets(1)
        . Range("C6"). ClearContents
        . Range("C9"). ClearContents
        . Range("C12"). ClearContents
        . Range("C15"). ClearContents
        . Range("F9"). ClearContents
        . Range("F12"). ClearContents
        'ClearContents no funciona en celda combinada...
        .Range("F15").Value = ""
    End With
Else
End If
'
End Sub

1 Respuesta

Respuesta
1

Te anexo la macro actualizada:

Option Explicit
Sub Captura_Datos()
'Declaración de variables
'
    Dim strTitulo As String
    Dim Continuar As String
    Dim TransRowRng As Range
    Dim NewRow As Integer
    Dim Limpiar As String
    '
    strTitulo = "Atención Telefónica"
    '
    Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
    If Continuar = vbNo Then Exit Sub
    '
    With ThisWorkbook.Worksheets("Datos")
        NewRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Cells(NewRow, 1).Value = Date
        .Cells(NewRow, 2).Value = Format(Date, "dd")
        .Cells(NewRow, 3).Value = Format(Date, "mm")
        .Cells(NewRow, 4).Value = Format(Date, "yy")
        . Cells(NewRow, 5).Value = ThisWorkbook. Sheets(1). Range("C6")
        . Cells(NewRow, 6).Value = ThisWorkbook. Sheets(1). Range("C9")
        . Cells(NewRow, 7).Value = ThisWorkbook. Sheets(1). Range("C12")
        . Cells(NewRow, 8).Value = ThisWorkbook. Sheets(1). Range("C15")
        . Cells(NewRow, 9).Value = ThisWorkbook. Sheets(1). Range("F9")
        . Cells(NewRow, 10).Value = ThisWorkbook. Sheets(1). Range("F12")
        . Cells(NewRow, 11).Value = ThisWorkbook. Sheets(1). Range("F15")
    End With
    '
    MsgBox "Alta exitosa.", vbInformation, strTitulo
    Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo)
    If Limpiar = vbYes Then
        With ActiveWorkbook.Sheets(1)
            . Range("C6"). ClearContents
            . Range("C9"). ClearContents
            . Range("C12"). ClearContents
            . Range("C15"). ClearContents
            . Range("F9"). ClearContents
            . Range("F12"). ClearContents
            'ClearContents no funciona en celda combinada...
            .Range("F15").Value = ""
        End With
    Else
    End If
'
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Dante, muy amable por tu respuesta. Se me olvido comentarte que la hoja "datos" tenia formato de tabla. Actualice el código como tu me lo enviaste, pero presenta el mismo problema. Le quite el formato a la tabla y ahí si funciona correctamente, así haya algún valor en la columna L. Dante, se puede lograr que envíe los datos teniendo formato de tabla?

Quedaría así:

Option Explicit
Sub Captura_Datos()
'Declaración de variables
'
    Dim strTitulo As String
    Dim Continuar As String
    Dim TransRowRng As Range
    Dim NewRow As Integer
    Dim Limpiar As String
    '
    strTitulo = "Atención Telefónica"
    '
    Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
    If Continuar = vbNo Then Exit Sub
    '
    NewRow = 2
    With ThisWorkbook.Worksheets("Datos")
        Do While .Cells(NewRow, "A") <> ""
            NewRow = NewRow + 1
        Loop
        'NewRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Cells(NewRow, 1).Value = Date
        .Cells(NewRow, 2).Value = Format(Date, "dd")
        .Cells(NewRow, 3).Value = Format(Date, "mm")
        .Cells(NewRow, 4).Value = Format(Date, "yy")
        . Cells(NewRow, 5).Value = ThisWorkbook. Sheets(1). Range("C6")
        . Cells(NewRow, 6).Value = ThisWorkbook. Sheets(1). Range("C9")
        . Cells(NewRow, 7).Value = ThisWorkbook. Sheets(1). Range("C12")
        . Cells(NewRow, 8).Value = ThisWorkbook. Sheets(1). Range("C15")
        . Cells(NewRow, 9).Value = ThisWorkbook. Sheets(1). Range("F9")
        . Cells(NewRow, 10).Value = ThisWorkbook. Sheets(1). Range("F12")
        . Cells(NewRow, 11).Value = ThisWorkbook. Sheets(1). Range("F15")
    End With
    '
    MsgBox "Alta exitosa.", vbInformation, strTitulo
    Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo)
    If Limpiar = vbYes Then
        With ActiveWorkbook.Sheets(1)
            . Range("C6"). ClearContents
            . Range("C9"). ClearContents
            . Range("C12"). ClearContents
            . Range("C15"). ClearContents
            . Range("F9"). ClearContents
            . Range("F12"). ClearContents
            'ClearContents no funciona en celda combinada...
            .Range("F15").Value = ""
        End With
    Else
    End If
'
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas