2017-04-19 154 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

相关问题