it-swarm.com.de

Fehler: Die pastespecial-Methode der Bereichsklasse ist fehlgeschlagen

Ich habe mir ein paar ähnliche Fragen auf dieser Site angesehen, aber es scheint, als habe keiner von ihnen den Trick ausgeführt. Ich versuche, eine neue Arbeitsmappe zu erstellen, den Inhalt des aktiven Arbeitsblatts zu kopieren und es neu in dieses einzufügen Arbeitsmappe erstellt. Unten ist der Code, den ich verwende:

Sub new_workbook()


Dim ExtBk As Workbook
Dim ExtFile As String


Columns("A:N").Copy

Workbooks.Add.SaveAs Filename:="output.xls"
ExtFile = ThisWorkbook.Path & "\output.xls"


Set ExtBk = Workbooks(Dir(ExtFile))
ExtBk.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone


Application.DisplayAlerts = False
ExtBk.Save
Application.DisplayAlerts = True

End Sub

Ich erhalte in der Zeile PasteSpecial einen Fehler mit dem im Betreff angegebenen Fehler. Ich bin etwas verwirrt, da dies funktioniert, wenn ich es in die Quellarbeitsmappe leite.

Vielleicht muss ich Windows verwenden (output.xls)?

6
yatici

Verwenden Sie keine Copy-Methode, wenn Sie nur die Werte speichern möchten.

Sub new_workbook()
Dim wbMe As Workbook: Set wbMe = ThisWorkbook
Dim ws As Worksheet: Set ws = wbMe.ActiveSheet
Dim ExtBk As Workbook

Set ExtBk = Workbooks.Add
ExtBk.SaveAs Filename:=wbMe.Path & "\output.xls"

ExtBk.Worksheets("Sheet1").Range("A:N").Value = ws.Range("A:N").Value

Application.DisplayAlerts = False
ExtBk.Save
Application.DisplayAlerts = True

End Sub

Hinweis: Dies wird fehlschlagen (und Ihr Code zuvor auch), wenn Ihre ThisWorkbook nicht gespeichert wurde.

15
David Zemens

Also habe ich es geschafft, wenn jemand Interesse hat, es zu lesen:

Sub cp2NewWb()
Dim ExtFile As String
ExtFile = ThisWorkbook.Path & "output.xls"
Workbooks.Add.SaveAs Filename:="output.xls"

Windows("test1.xlsm").Activate
Range("A1:AA100").Copy
Windows("output.xls").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Worksheets(Worksheets.Count).Columns("A:AA").EntireColumn.AutoFit
Range("A1").Select

Windows("test1.xlsm").Activate
Application.CutCopyMode = False
Range("A1").Select

End Sub Ich denke, ich muss zwischen den Fenstern wechseln, sonst funktioniert es nicht.

2
yatici

Wenn Sie den gesamten Bereich kopieren, kopieren Sie die Arbeitsblätter:

Worksheets("Sheet1").Copy Workbooks(2).Worksheets(1)

Wenn Sie einige Spalten kopieren, die Sie nicht benötigen, können Sie diese später löschen.

Wenn Sie von .xlsx nach .xls kopieren, müssen Sie Kopieren/Einfügen verwenden:

Worksheets("Sheet1").UsedRange.Copy Workbooks(2).Worksheets(1).Range("A1")

Wenn Werte eingefügt werden müssen:

Workbooks(2).Worksheets(1).UsedRange.Copy
Workbooks(2).Worksheets(1).Range("A1").PasteSpecial xlPasteValues

Beachten Sie, dass UsedRange nicht von A1 aus startet, es sei denn, diese Zelle hat etwas Inhalt. In diesem Fall müssen Sie ein Range-Objekt definieren, das bei A1 beginnt und bis zur letzten verwendeten Zelle reicht.

1
Andy G
Private Sub ExceltoExcel()
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    'Input Data
     Sheets("Sheet1").Cells(1, 1).Select
     col = Sheets("Sheet1").Cells(2, 2)
     Dim exlApp As Excel.Application
     Dim ExtBk As Excel.Workbook
     Dim exlWs As Excel.Worksheet
     ExtFile = ThisWorkbook.Path & "\output.xls"
     Set exlApp = CreateObject("Excel.Application")
     Set ExtBk = exlApp.Workbooks.Open(ExtFile)
     Set exlWs = exlWb.Sheets("Sheet1")
     ExtBk.Activate
     exlWs.Cells(2, 2) = col
     'Output Data
     exlWs.Range("A1").Select
     exlWb.Close savechanges:=True
     Set ecxlWs = Nothing
     Set exlWb = Nothing
     exlApp.Quit
     Set exlApp = Nothing
     Application.EnableEvents = True
     Application.DisplayAlerts = True
End Sub
0
artis_meditari