2016-03-15 7 views
5

Freunde, Ich versuche jeden Tag eine CSV-Datei (täglich von einem anderen Programm erstellt) zu öffnen und die Daten im CSV-Blatt in ein bestimmtes Blatt in meiner aktuellen Arbeitsmappe zu kopieren. Ich habe an diesem Code eine Weile gearbeitet und ich denke, es ist wirklich nah dran, richtig zu sein, aber ich bekomme immer einen Laufzeitfehler 438 auf meiner Kopie/Einfügen-Zeile. Irgendeine Hilfe?CSV öffnen und kopieren

Vielen Dank!

Hier ist mein Code:

Sub GetCSV() 

Dim thatWB As Workbook, thisWB As Workbook 
Dim thisWS As Worksheet, thatWS As Worksheet 
Dim zOpenFileName As String 
Dim inputData As String 

'get name of sheet to open 
inputData = InputBox("Enter name of file") 

'open CSV file 
zOpenFileName = Application.GetOpenFilename 

'error handling 
If zOpenFileName = "" Then Exit Sub 

Application.ScreenUpdating = False 

Set thisWB = ThisWorkbook 'destination workbook 
Set thisWS = Sheets("f_dump") 'destination worksheet 

Set thatWB = Workbooks.Open(zOpenFileName) 'source CSV 
Set thatWS = thatWB.Sheets(inputData) 'source worksheet 

Application.CutCopyMode = False 

thatWB.thatWS.Range("A1:G150").Copy Destination:=thisWB.thisWS.Range("A1") 

thatWB.Close 

End Sub 

Antwort

4

Versuch, dies zu betrachten. Ich habe ThisWB und ThatWB von Ihrem Kopieren und Einfügen von Code entfernt, weil es die Quelle des ersten Problems war (und ich habe die Arbeitsmappen-Spezifikation in die Blatt-Deklaration verschoben).

Dann war die nächste Ausgabe mit Paste. Ich bin nicht sicher, warum, aber wenn auf Bereich Aufruf, müssen Sie Paste (VBA in Excel ist ein bisschen Magie statt Programmierung/Scripting)

Sub GetCSV() 

Dim thatWB As Workbook, thisWB As Workbook 
Dim thisWS As Worksheet, thatWS As Worksheet 
Dim zOpenFileName As String 
Dim inputData As String 

'get name of sheet to open 
inputData = InputBox("Enter name of file") 

'open CSV file 
zOpenFileName = Application.GetOpenFilename 

'error handling 
If zOpenFileName = "" Then Exit Sub 

Application.ScreenUpdating = False 

Set thisWB = ThisWorkbook 'destination workbook 
Set thisWS = ThisWorkbook.Sheets("Sheet1") 'destination worksheet 

Set thatWB = Workbooks.Open(zOpenFileName) 'source CSV 
Set thatWS = thatWB.Sheets(inputData) 'source worksheet 

Application.CutCopyMode = False 

thatWS.Range("A1:G150").Copy 
thisWS.Range("A1:G150").PasteSpecial xlPasteAll 
thatWB.Close 

End Sub 
+2

während die parentaging Sie hier verwenden erwähnen richtig ist, die direkte Kopie wird auch funktioniert ganz gut, probiere diese Zeile: 'thatWS.Range (" A1: G150 "). Kopiere Destination: = thisWS.Range (" A1 ")' Um klar zu sein, funktioniert die 'PasteSpecial' Methode auch. Es ist einfach nicht notwendig. –

+0

Danke euch beiden. Beide Lösungen funktionieren ordnungsgemäß. Ich habe Lubos als korrekt markiert, aber Scott funktioniert genauso gut. – tulanejosh

Verwandte Themen