2017-04-19 172 views
1

我使用下面的代碼:VBA範圍1004錯誤

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 

然而,行Range("A1").Select只是Sheets("Working Sheet 1").Select後踢了一個運行時錯誤「1004」

有誰知道爲什麼嗎?我已經以任何方式重新排列了這一點,我可以再次從頭開始輸入。

+1

無論如何,你可以在代碼中選擇許多'Select'和'ActiveSheet'。如果你告訴我們你想達到什麼目的,也許我們可以提供更好的解決方案 –

回答

1

我覺得這是你試圖實現(沒有所有的不必要Select)什麼:

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

完美,謝謝。這解決了我所遇到的幾個問題,我甚至沒有意識到我有:) – JKRH

2

給這個版本的代碼的嘗試:

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

我正在考慮.CurrentRegion,但我決定OP最有可能在A1和A2中有數據可以彌補它。 – Jeeped

+0

tigeravatar,謝謝。然而,Jeeped是正確的,我正在試圖用惱人的標題解析CSV中的信息。你回答真的很感激! – JKRH

2

使用。選擇和。激活不被視爲「最佳做法」。見How to avoid using Select in Excel VBA macros。是的,使用宏記錄器中的代碼是一個很好的開始,但你必須在某個時候遠離練習。

執行批量操作優選循環通過不確定數量的行或列。

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

非常感謝,解決了問題。我讀過。選擇不好,但不知道另一個解決方案。指針非常有用! – JKRH