2016-09-22 2 views
0

ichKopieren Spalten aus einer Arbeitsmappe auf einen anderen

bin Begegnung mit

Laufzeitfehler 9

Index außerhalb des zulässigen Bereichs

Hier ist mein Code:

Sub copydatatocreatereport() 

Dim report As Workbook 
Dim datafile As Variant 

'report is the active workbook where I want data to paste 
'datafile is workbook which has data I want to copy from 

datafile = Application.GetOpenFilename 
If datafile = "false" Then 
    Exit Sub 
End If 

Workbooks.Open datafile 

Workbooks("datafile").Worksheets("sheet1").Columns("a").Copy _ 
    Destination:=Workbooks("report").Worksheets("sheet1").Columns("a1") 

End Sub 
+0

Haben Sie eine Arbeitsmappe namens 'report'? Oder wolltest du irgendwo in diesem Code 'report = ThisWorkbook' (oder ähnlich) setzen? Wenn ja, wäre das Ziel "Report.Worksheets (" Sheet1 "). Spalten (" a ")' '' '' Workbooks ("report") ' – Dave

+1

@VBnewBee Die Kopierzeile sollte' Workbooks (Datendatei) .Worksheets ("Sheet1"). Spalten ("A"). Kopieren _ Ziel: = report.Worksheets ("Sheet1"). Spalten ("A") ', aber Sie müssen' Set report = ThisWorkbook' oder etwas ähnliches setzen –

+0

@ Dave ja, ich habe eine Arbeitsmappe namens report, wo ich diesen Code ausführe. Vielen Dank für die Empfehlung. Set report = ThisWorkbook, sollte nun funktionieren – vj12

Antwort

1

Sie müssen datafile als Arbeitsmappe (zu der Arbeitsmappe, die Sie öffnen möchten) festlegen.

Sie müssen report auf ActiveWorkbook setzen (nicht empfohlen, besser zu verwenden ThisWorkbook, wo der Code liegt, oder eine bestimmte Arbeitsmappe).

Sie können die gesamte Spalte nicht in eine bestimmte Zelle einfügen.

Sub copydatatocreatereport() 

Dim report   As Workbook 
Dim datafile  As Workbook 
Dim wbPath   As String 

'report is the active workbook where i want data to paste 
Set report = ActiveWorkbook ' safer to have a name of Workbook or use ThisWorkbook (where this code lies) 

wbPath = Application.GetOpenFilename 
If wbPath = "False" Then 
    MsgBox "No Workbook was selected", vbInformation 
    Exit Sub 
End If 

' set datafile to Open workbook which I want to copy from 
Set datafile = Workbooks.Open(wbPath) 
datafile.Worksheets("Sheet1").Columns("A").Copy Destination:=report.Worksheets("Sheet1").Columns("A") 

End Sub 
+0

es funktioniert perfekt, vielen Dank mate – vj12

0

Bitte Beachten Sie, dass dies nicht getestet ist, aber Sie sollten in die richtige Richtung zeigen

Sub copydatatocreatereport() 
Dim Report As Workbook 
Dim ReportPath As String 

'Report is the workbook where I want to paste data. We want report to be the destination - we do not need to create an object for the currently open workbook 
'ReportPath is the string used to open the Report workbook 

'Allow the user to select a workbook string 
ReportPath = Application.GetOpenFilename 
'Exit if nothing is selected 
If ReportPath = "" Then 
    Exit Sub 
End If 

'Set Report object = to the selected workbook. This was missing previously 
Set Report = Workbooks.Open(ReportPath) 

'Paste column a from the currently open workbook to the desistination workbook 
ThisWorkbook.Worksheets("sheet1").Columns("a").Copy _ 
    Destination:=Report.Worksheets("sheet1").Columns("a") 

End Sub 
+0

Sie können nicht kopieren zu '.Columns (" a1 ")'; Sie erhalten einen 1004 Objektfehler. Sollte zu 'sein.Columns (" a ")' stattdessen ... – Dave

+0

@ Jiminy, danke Kumpel, obwohl dies Daten aus dem Bericht in Datendatei exportiert, habe ich es nach der Änderung – vj12

0

Sie müssen:

  • Gebrauch Workbooks (Daten-Datei) anstelle von Workbooks ("Daten-Datei")

  • haben Datenfile gespült der nicht-Blattnamen Zeichen

Wie folgt:

Dim name As String 

    datafile = Application.GetOpenFilename 

    Workbooks.Open datafile 

    name = Right(datafile, Len(datafile) - InStrRev(datafile, "\")) 

    Workbooks(name).Worksheets("sheet1").... 
+0

Auch hier können Sie '.Columns (" a ")' nicht in '.Columns (" a1 ")' ... A1 ist keine Spalte kopieren. Das Ziel muss '.Columns (" a ")' sein, um den Objektfehler 1004 – Dave

+0

@Dave zu vermeiden, danke für Ihren Kommentar. Ich habe diese letzte Aussage einfach kopiert/eingefügt, nur um klarzustellen, wo "Name" zu platzieren ist, was der einzige Zweck ist, wenn ich antworte. Also habe ich den restlichen Teil nicht überprüft: Ich werde den linken Teil dieser Aussage entfernen. – user3598756

+0

@ user3598756 vielen Dank, es macht den Trick :) – vj12

Verwandte Themen