Para Dante, Macro para transponer celdas de una hoja a otra

Hola! Dante 

Tengo la siguiente macro que me transpone los datos de una hoja activa a otra, esta macro realiza bien su trabajo pero tiene un error que  me gustaría sea corregida; cuando ejecuto la macro se nota  un parpadeo que relativamente es moles toso y se demora al ejecutar.

Sub addend()
    Hoja2.Activate
    Range("A5:bY5").Select
    Selection.Copy
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Hoja1.Activate
    rpta = MsgBox("Se a guardado los datos", vbYesNo + vbInformation)
    If rpta = vbYes Then
    rango = "D5:H6,D7:E11,C9,H7:H11,F10:G11,I10:I11,F8:G8,J5:J11,K5:L6,M7,N10:N11,O12:O13,P13:Q13,C14:E19"
    For Each h In Sheets
        Select Case h.Name
            Case "INGRESO Data"
                h.Range(rango).ClearContents
        End Select
    Next
    Else
 End If
End Sub

Cual sera el inconveniente de este código Gracias!

1 Respuesta

Respuesta
1

La macro no te transpone de una hoja a otra.

Lo que hace es copiar de la hoja2 el regitro 5 y lo copia en la misma hoja2 pero en el última fila vacía.

A mí no me marca error, cuál error te marca y qué fila de la macro se detiene.

Para que no haga el parpadeo, agrega la siguiente línea al principio de la macro

    Application.ScreenUpdating = False

Probablemente con esa macro ahora sea un poco más rápida.

Hola! Dante 

Gracias por la respuesta, te comento que la Hoja 1 es mi formulario y la Hoja 2  es la base de datos, lo que sucede es cuando guardo nuevos datos por un momento se abre la Hoja 2 y luego retorna a la Hoja 1, lo que realmente debería de ser es que se mantenga en la hoja 1 ya que es mi formulario en la que ingreso nuevos datos.

Si hay una manera mas simple que esta seria perfecto.  Gracias! Dante por la respuesta que me puedas dar.

Para que no te muevas de una hoja a otra, pero puedas pasar datos de una hoja otra, realiza lo siguiente en tu macro.

Por ejemplo:

Sub addend()
    'Para copiar de hoja1 a hoja2
    Hoja1. Range("A5:bY5"). Copy
    'Obtenemos la última fila de la hoja2
    uf = Hoja2.Range("A" & Rows.Count).End(xlUp).Row + 1
    'Pegamos
    Hoja2.Range("A" & uf).PasteSpecial Paste:=xlPasteValues
    'Limpias
    rango = "D5:H6,D7:E11,C9,H7:H11,F10:G11,I10:I11,F8:G8,J5:J11,K5:L6,M7,N10:N11,O12:O13,P13:Q13,C14:E19"
    Sheets("INGRESO Data").Range(rango).ClearContents
End Sub

Revisa cómo estoy copiando los datos de la hoja1, después sin mover me hoja, sin seleccionar o activar la hoja2, estoy encontrando la última fila vacía, y posteriormente (sin cambiarme de hoja, sin seleccionar ninguna celda), estoy pegando la información en la hoja2.

Esto hace más rápida la macro y simplifica el código.

Trata de adaptarlo a tu archivo y a tu macro.

Hola Dante 

Disculpa por no responder tan pronto, La macro que me indicas llega a realizar su trabajo pero con un ligero parpadeo no se si esto se puede mejorar o lo tendría que hacer de otra manera.

Hola! Dante

Trate de adaptar esta otra macro pero me sale "error 1004' no se puede cambiar parte de una celda combinada". 

Option Explicit
Sub GUARDAR()
Dim strTitulo As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String

Set TransRowRng = ThisWorkbook.Worksheets("Control Planta").Cells(1, 3).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("Control Planta")
.Cells(NewRow, 1).Value = Date
.Cells(NewRow, 2).Value = Format(Now, "hh:mm AM/PM")
.Cells(NewRow, 3).Value = ThisWorkbook.Sheets(1).Range("C2")
End With
Limpiar = MsgBox("Deseas limpiar las celdas de la hoja?", vbYesNo, strTitulo)
If Limpiar = vbYes Then
With ActiveWorkbook.Sheets(1)
.Range("D5").ClearContents

End With
Else
End If
End Sub

Cual seria el problema.

¿En qué parte de la macro se detiene?

Y para quitar los parpadeos, pon esto al principio de la macro

Application.ScreenUpdating = False

¡Gracias! Dante 

Ahora si esta mucho mejor, no lo había considerado esa parte de la macro  realmente esta perfecto Gracias! Dante  

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas