2017-04-19 20 views
1

ich den folgenden Code verwende:VBA Bereich 1004 Fehler

Sub CSVParser() 

Dim i As Integer 
Dim x As Integer 
Dim values As Range 

Sheets("CSV Paste").Select  
Range("A3").Select 

For i = 1 To Range("A3", Range("A3").End(xlDown)).Rows.Count   
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Copy 

    Sheets("Working Sheet 1").Select 
    Range("A1").Select 'problem code 

    Do Until ActiveCell.Value = "" 
     If ActiveCell.Value = "" Then 
      Exit Do 
     Else 
      ActiveCell.Offset(1, 0).Select 
     End If 
    Loop 

    ActiveSheet.Paste 
    Sheets("CSV Paste").Select        
    ActiveCell.Offset(1, 0).Select     
Next 

End Sub 

jedoch die Linie Range("A1").Select kurz nach Sheets("Working Sheet 1").Select ist ein Laufzeitfehler treten bis ‚1004‘

Weiß jemand, warum? Ich habe das in jeder Hinsicht neu arrangiert, und ich habe es wieder von Grund auf neu geschrieben.

+1

Wie auch immer, Sie haben zu viele 'Select' und' ActiveSheet' in Ihrem Code. Wenn Sie uns sagen, was Sie erreichen wollen, können wir vielleicht eine bessere Lösung anbieten. –

Antwort

1

Ich denke, das ist, was Sie (ohne alle unnötigen Select) zu erreichen versuchen:

Option Explicit 

Sub CSVParser() 

Dim i As Long 
Dim x As Long 
Dim LastRow As Long 
Dim PasteRow As Long 

With Sheets("CSV Paste") 
    LastRow = .Range("A3").End(xlDown).Row 
    For i = 3 To LastRow 
     PasteRow = Sheets("Working Sheet 1").Cells(Sheets("Working Sheet 1").Rows.Count, "A").End(xlUp).Row 
     .Range(.Range("A" & i), .Range("A" & i).End(xlToRight)).Copy Destination:=Sheets("Working Sheet 1").Range("A" & PasteRow + 1) 
    Next i 
End With 

End Sub 
+0

Perfekt, danke. Dies löste mehrere Probleme, die ich hatte, dass ich nicht einmal realisiert hatte, dass ich :) – JKRH

2

Geben Sie diese Version des Codes einen Versuch:

Sub CSVParser() 

    Dim wb As Workbook 
    Dim wsCSV As Worksheet 
    Dim wsWork As Worksheet 

    Set wb = ActiveWorkbook 
    Set wsCSV = wb.Sheets("CSV Paste") 
    Set wsWork = wb.Sheets("Working Sheet 1") 

    wsCSV.Range("A3").CurrentRegion.Copy wsWork.Cells(wsWork.Cells.Count, "A").End(xlUp).Offset(1) 

End Sub 
+1

Ich dachte an .CurrentRegion, aber ich entschied, dass das OP höchstwahrscheinlich Daten in A1 und A2 hat, die es verdirbt. – Jeeped

+0

Tigeravatar, danke. Jeeped war jedoch korrekt, und ich versuche, Informationen aus einer CSV mit irritierenden Header zu analysieren. Ihre Antwort wurde jedoch sehr geschätzt! – JKRH

2

Mit .Select und. Activate gilt nicht als "Best Practice". Siehe How to avoid using Select in Excel VBA macros. Ja, die Verwendung des Codes aus dem Makrorecorder ist ein guter Anfang, aber Sie müssen irgendwann aus der Praxis aussteigen.

Das Ausführen von Massenoperationen wird bevorzugt, um eine unbestimmte Anzahl von Zeilen oder Spalten durchzulaufen.

Option Explicit 

Sub CSVParser() 

    Dim lastCol As Long 

    With Worksheets("CSV Paste") 
     With .Range(.Cells(3, "A"), .Cells(.Rows.Count, "A").End(xlUp)) 
      lastCol = .CurrentRegion.Columns.Count 
      With .Resize(.Rows.Count, lastCol) 
       .Copy Destination:=Sheets("Working Sheet 1").Range("A1") 
      End With 
     End With 
    End With 

End Sub 
+0

Vielen Dank, Problem gelöst. Ich hatte gelesen. Auswahl war schlecht, wusste aber keine andere Lösung. Der Zeiger war sehr nützlich! – JKRH

Verwandte Themen