Macro que funciona una vez si y otra no

Hola, tengo una macro para capturar datos de un libro y pasarlos a otro, y sin tocar nada del código, funciona una vez si y otra no, una si y otra no... Y no se porque. El error que da es "1004 en tiempo de ejecución: Error en el método pasteSpecial de la clase Range" osea cuando pega los datos. Os dejo el código para ver si podéis ayudarme:
Public ruta1 As String
Sub Data1()
    ruta1 = Application.GetOpenFilename
    Dim fs
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists(ruta1) Then
        Dat1
    End If
End Sub
Sub Dat1()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Workbooks.Open Filename:=ruta1
    Range("A1:E1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("Tenacidades.xls").Activate
    Sheets("Datos 1").Select
    ActiveSheet.Unprotect
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    ...
Gracias.

1 Respuesta

Respuesta
1
Hasta lo que dejaste, las rutinas funcionan bien, no envían ningún mensaje de error.
Como la 2da rutina continúa al parecer, debieras dejarla completa. También comentar en qué versión Excel estás trabajando.
Los libros que vas abriendo siguen abiertos hasta aquí, revisa si eso está bien, los datos se copian encima de los anteriores, revisa si eso es lo correcto también.
Y luego deja la rutina completa si aún persiste el error.
PD) Una de mis nuevas Guías Temáticas tratan el tema Mover-Copiar datos...
Hola, se supone que la macro sólo la van a ejecutar una sola vez (por lo de sobreescribir los datos). La versión de excel es la 2003 SP3. El resto del código es:
Selection.Columns.AutoFit
    ActiveSheet.Range("F3").Value = InputBox("Introducir el valor de L (n/m)", "Entrada de datos")
    ActiveSheet.Range("G3").Value = InputBox("Introducir el valor de b (n/m)", "Entrada de datos")
    ActiveSheet.Range("H3").Value = InputBox("Introducir el valor de h (n/m)", "Entrada de datos")
            Range("F1").Select
            ActiveCell.FormulaR1C1 = "L"
            Range("F2").Select
            ActiveCell.FormulaR1C1 = "(n/m)"
            Range("G1").Select
            ActiveCell.FormulaR1C1 = "b"
            Range("G2").Select
            ActiveCell.FormulaR1C1 = "(n/m)"
            Range("H1").Select
            ActiveCell.FormulaR1C1 = "h"
            Range("H2").Select
            ActiveCell.FormulaR1C1 = "(n/m)"
            Selection.Merge
            Range("K1").Select
            ActiveCell.FormulaR1C1 = "Deformación por flexión"
            Range("K2").Select
            ActiveCell.FormulaR1C1 = "(%)"
            Range("L2").Select
            ActiveCell.FormulaR1C1 = "(mm/mm)"
            Range("M1").Select
            ActiveCell.FormulaR1C1 = "Tenacidad"
            Range("M2").Select
            ActiveCell.FormulaR1C1 = "Mpa"
            Range("A1:N3").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Columns.AutoFit
            Columns("J:J").EntireColumn.AutoFit
            Columns("K:K").ColumnWidth = 11
            Columns("D:E").Select
            Selection.ColumnWidth = 0
            Range("O1").Select
            Workbooks(2).Activate
            ActiveWorkbook.Close False
    Application.DisplayAlerts = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Application.ScreenUpdating = True
Es porque primero copias y luego desprotegés la hoja activa. Esa acción cancela la copia... pero eso da error al tratar de pegar.
La 1ra vez la hoja aún no está protegida...
Así te debieran quedar las 1ras instrucc...
Public ruta1 As String
Sub Data1()
    ruta1 = Application.GetOpenFilename
    Dim fs
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists(ruta1) Then
     'desprotegemos la hoja dejándola lista para la copia
    Sheets("Datos 1"). Unprotect
    ActiveSheet. Unprotect

    'ejecuta la rutina de pega
        Dat1
    End If
End Sub
Sub Dat1()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Workbooks.Open Filename:=ruta1
    Range("A1:E1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("Tenacidades.xls").Activate
    Sheets("Hoja1").Select
    'ActiveSheet.Unprotect     'inhabilitada
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
.................el resto
End Sub
Como en la 1ra parte de tu consulta no se protegía la hoja, no se podía detectar el error hasta ahora que se incluyeron las últimas instrucciones.
Sdos
Elsa
http://aplicaexce.galeon.com/index.htm

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas