Cuando copio una macro a un nuevo libro me marca Error

Quiero usar la misma macro para otro archivo que estoy usando, hago los cambios pertinentes y me marca error Ya la he modificado y usado varias veces, pero esta es la primera vez que me genera error y no entiendo porque.

Option Compare Text
Option Explicit
'Para los Datos

Dim RangoOrigen As String
Dim RangoDestino As String
Dim DiaACopiar As String
Dim SaltoColumnas As Byte

'Para los Mensajes>> Declaradas Public para que se puedan usar en otros Módulos
Public Mensaje As String
Public Estilo As Integer
Public Titulo As String
Public Respuesta As String

Sub CopiaDatos()
'Desactiva actualización Pantalla
Application.ScreenUpdating = False

DiaACopiar = Sheets("acumulado").Range("I2").Value
If IsNull(DiaACopiar) Or DiaACopiar = "" Then
MsgBox "No has seleccionado ningún dia, por lo que no copiaremos nada", vbCritical, "SIN DATOS"
Exit Sub
Else
Mensaje = "COPIA LOS DATOS AL DIA : " & DiaACopiar & vbCrLf & vbCrLf & "SI ESTAS SEGURO PRESIONA SI "
Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.
Titulo = "MENSAJE INFORMATIVO" ' Define el titulo
Respuesta = MsgBox(Mensaje, Estilo, Titulo) ' Muestra el mensaje.
If Respuesta = vbYes Then ' El usuario eligió el botón Sí.
Select Case DiaACopiar
Case "1"
RangoDestino = "H7"
Case "2"
RangoDestino = "N7"
Case "3"
RangoDestino = "T7"
Case "4"
RangoDestino = "Z7"
Case "5"
RangoDestino = "AF7"
Case "6"
RangoDestino = "AL7"
Case "7"
RangoDestino = "AR7"
Case "8"
RangoDestino = "AX7"
Case "9"
RangoDestino = "BD7"
Case "10"
RangoDestino = "BJ7"
Case "11"
RangoDestino = "BP7"
Case "12"
RangoDestino = "BV7"
Case "13"
RangoDestino = "CB7"
Case "14"
RangoDestino = "CH7"
Case "15"
RangoDestino = "CN7"
Case "16"
RangoDestino = "CT7"
Case "17"
RangoDestino = "CZ7"
Case "18"
RangoDestino = "DF7"
Case "19"
RangoDestino = "DL7"
Case "20"
RangoDestino = "DR7"
Case "21"
RangoDestino = "DX7"
Case "22"
RangoDestino = "FD7"
Case "23"
RangoDestino = "FJ7"
Case "24"
RangoDestino = "EP7"
Case "25"
RangoDestino = "EV7"
Case "26"
RangoDestino = "FB7"
Case "27"
RangoDestino = "FH7"
Case "28"
RangoDestino = "FN7"
Case "29"
RangoDestino = "FT7"
Case "30"
RangoDestino = "FZ7"
Case "31"
RangoDestino = "GF7"
Case Else
End Select
CopiaPega "acumulado", "a7:F200000", "acumulado", RangoDestino
Else 'El usuario ha elegido la Opción "No"
Exit Sub 'Salgo sin Actualizar
End If
End If
'Activa actualización Pantalla
Application.ScreenUpdating = True

End Sub

Sub CopiaPega(HojaOrig, RgoOrig, HojaDest, RgoDest)
'Activa la Fuente y Copia los Datos
Sheets(HojaOrig).Select
Range(RgoOrig).Select
Selection.Copy
'Activa "Destino" y Pega los Datos
Sheets(HojaDest).Select
Range(RgoDest).Select ( AQUI ME MARCA ERROR) 
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("A1").Select
Application.CutCopyMode = False

1 respuesta

Respuesta
1

H o l a:

Si el día a copiar tienes un número, por ejemplo 1

En la macro estás preguntando por el "1" (esto es texto)

Select Case DiaACopiar
Case "1"

Entonces si compara 1 con "1" no son iguales, por lo tanto, no asigna una celda destino.

cambia en la macro "1", "2", ... "31" por 1,  2 , .... 31

Es decir, no los pongas entre comillas o si también puede ser un texto, quedaría mejor así:

Select Case DiaACopiar
Case "1", 1
RangoDestino = "H7"
Case "2", 2
RangoDestino = "N7"
etc

Hola, hice el cambio que me comentaste y sigue generándome el mismo error "error en el método "Range" de objeto_ global"

Dim RangoDestino As String
Dim DiaACopiar As String
Dim SaltoColumnas As Byte

'Para los Mensajes>> Declaradas Public para que se puedan usar en otros Módulos
Public Mensaje As String
Public Estilo As Integer
Public Titulo As String
Public Respuesta As String

Sub CopiaDatos()
'Desactiva actualización Pantalla
Application.ScreenUpdating = False

DiaACopiar = Sheets("acumulado").Range("I2").Value
If IsNull(DiaACopiar) Or DiaACopiar = "" Then
MsgBox "No has seleccionado ningún dia, por lo que no copiaremos nada", vbCritical, "SIN DATOS"
Exit Sub
Else
Mensaje = "COPIA LOS DATOS AL DIA : " & DiaACopiar & vbCrLf & vbCrLf & "SI ESTAS SEGURO PRESIONA SI "
Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.
Titulo = "MENSAJE INFORMATIVO" ' Define el titulo
Respuesta = MsgBox(Mensaje, Estilo, Titulo) ' Muestra el mensaje.
If Respuesta = vbYes Then ' El usuario eligió el botón Sí.
Select Case DiaACopiar
Case "1", 1
RangoDestino = "H7"
Case "2", 2
RangoDestino = "N7"
Case "3", 3
RangoDestino = "T7"
Case "4", 4
RangoDestino = "Z7"
Case "5", 5
RangoDestino = "AF7"
Case "6", 6
RangoDestino = "AL7"
Case "7", 7
RangoDestino = "AR7"
Case "8", 8
RangoDestino = "AX7"
Case "9", 9
RangoDestino = "BD7"
Case "10", 10
RangoDestino = "BJ7"
Case "11", 11
RangoDestino = "BP7"
Case "12", 12
RangoDestino = "BV7"
Case "13", 13
RangoDestino = "CB7"
Case "14", 14
RangoDestino = "CH7"
Case "15", 15
RangoDestino = "CN7"
Case "16", 16
RangoDestino = "CT7"
Case "17", 17
RangoDestino = "CZ7"
Case "18", 18
RangoDestino = "DF7"
Case "19", 19
RangoDestino = "DL7"
Case "20", 20
RangoDestino = "DR7"
Case "21", 21
RangoDestino = "DX7"
Case "22", 22
RangoDestino = "FD7"
Case "23", 23
RangoDestino = "FJ7"
Case "24", 24
RangoDestino = "EP7"
Case "25", 25
RangoDestino = "EV7"
Case "26", 26
RangoDestino = "FB7"
Case "27", 27
RangoDestino = "FH7"
Case "28", 28
RangoDestino = "FN7"
Case "29", 29
RangoDestino = "FT7"
Case "30", 30
RangoDestino = "FZ7"
Case "31", 31
RangoDestino = "GF7"

Case Else

End Select
CopiaPega "acumulado", "a7:F200000", "acumulado", RangoDestino
Else 'El usuario ha elegido la Opción "No"
Exit Sub 'Salgo sin Actualizar

End If

End If
'Activa actualización Pantalla
Application.ScreenUpdating = True

End Sub

Sub CopiaPega(HojaOrig, RgoOrig, HojaDest, RgoDest)
'Activa la Fuente y Copia los Datos
Sheets(HojaOrig).Select
Range(RgoOrig).Select
Selection.Copy
'Activa "Destino" y Pega los Datos
Sheets(HojaDest).Select
Range(RgoDest).Select (AQUI ME VUELVE A MARCAR ERROR)
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("A1").Select
Application.CutCopyMode = False
End Sub

¿Y qué tienes en la hoja "acumulado" en la celda "I2"?

Envíame tu archivo para revisarlo, recuerda poner en el asunto tu nombre de usuario.

Sal u dos

Ahí tengo el día que selecciono para que se copie a dicho día. Te lo mando en un momento.

H o l a :

En la celda I2 tienes esto:

"Dia 1" 

Eso es un texto, "Dia 1" no es igual a "1", por eso no se asigna la celda destino.

Te anexo la macro actualizada para verificar que en la celda I2, pongas números.

Entonces en la celda I2 tienes que poner un número del 1 al 31.

Depuré la macro, queda de la siguiente forma:

Option Compare Text
Option Explicit
'Para los Datos
Dim RangoOrigen As String
Dim RangoDestino As String
Dim DiaACopiar As String
Dim SaltoColumnas As Byte
'Para los Mensajes>> Declaradas Public para que se puedan usar en otros Módulos
Public Mensaje As String
Public Estilo As Integer
Public Titulo As String
Public Respuesta As String
Sub CopiaDatos()
    'Desactiva actualización Pantalla
    Application.ScreenUpdating = False
    DiaACopiar = Sheets("acumulado").Range("I2").Value
    If IsNull(DiaACopiar) Or DiaACopiar = "" Or Not IsNumeric(DiaACopiar) Or DiaACopiar > 31 Or DiaACopiar = 0 Then
        MsgBox "No has seleccionado ningún dia, por lo que no copiaremos nada", vbCritical, "SIN DATOS"
        Exit Sub
    End If
    '
    Mensaje = "COPIA LOS DATOS AL DIA : " & DiaACopiar & vbCrLf & vbCrLf & "SI ESTAS SEGURO PRESIONA SI "
    Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.
    Titulo = "MENSAJE INFORMATIVO" ' Define el titulo
    Respuesta = MsgBox(Mensaje, Estilo, Titulo) ' Muestra el mensaje.
    If Respuesta = vbNo Then Exit Sub ' El usuario eligió el botón No
    '
    Dim coldestino
    coldestino = Columns("B").Column + (DiaACopiar * 6)
    RangoDestino = Cells(7, coldestino).Address(False, False)
    CopiaPega "acumulado", "a7:F200000", "acumulado", RangoDestino
    'Activa actualización Pantalla
    Application.ScreenUpdating = True
End Sub
Sub CopiaPega(HojaOrig, RgoOrig, HojaDest, RgoDest)
'
    'Activa la Fuente y Copia los Datos
    Sheets(HojaOrig).Select
    Range(RgoOrig).Select
    Selection.Copy
    'Activa "Destino" y Pega los Datos
    Sheets(HojaDest).Select
    Range(RgoDest).Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("A1").Select
    Application.CutCopyMode = False
End Sub
Sub BorraMesCompleto()
'
    Mensaje = "BORRA TODOS LOS DATOS COPIADOS :  " & DiaACopiar & vbCrLf & vbCrLf & "SI ESTAS SEGURO PRESIONA SI "
    Estilo = vbYesNo + vbCritical + vbDefaultButton2    ' Define los botones.
    Titulo = "MENSAJE INFORMATIVO"   ' Define el titulo
    Respuesta = MsgBox(Mensaje, Estilo, Titulo) ' Muestra el mensaje.
    If Respuesta = vbYes Then    ' El usuario eligió el botón Sí.
            Sheets("Acumulado").Range("H7:GJ200000").Select
            Selection.ClearContents
            Sheets("acumulado").Range("A1").Select
            MsgBox "Se han borrado todos los datos", vbCritical, "DATOS DE DIAS EN BLANCO"
    End If
End Sub

sal u dos

¡Gracias! Muchísimas gracias, si no me había dado cuenta que habían alimentado mal la lista desplegable. En fin! Gracias otra vez!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas