2012-03-29 155 views
0

我只是想根據列名將數據從一個excel拉到另一個excel。源excel名稱是「iTerm Export.xls」。工作表名稱是「導出(1)」。列標題是「資產」。所以當運行下面的宏資產列數據必須複製並粘貼到另一個Excel中(即「iTerm指標Report.xlsx」)根據列名包含空白單元格將一個excel的數據複製並粘貼到另一個excel

但是我的問題是資產列中任何地方有空白單元格,例如:資產列中有50個數據行。但25日和30日是空白單元格。當我運行宏一旦24行復制並粘貼在其​​他Excel中。但我需要所有五十行必須複製和粘貼包括空白行在其他excel

Windows("iTerm Export.xls").Activate 
Sheets("export(1)").Select 
Cells.Find(What:="Asset", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
False, SearchFormat:=False).Activate 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Windows("iTerm metrics Report.xlsx").Activate 
Sheets("Raw Data from iTerm").Select 
Range("A2").Select 
ActiveSheet.Paste 

請幫我對此。

謝謝

回答

0

它停在一片空白,因爲那是xlDown選擇所做的。 我會建議選擇整個列。

Columns(4).Select 

Columns("D:D").Select 

,或者獲得具有活動單元格

Columns(ActiveCell.Column).Select 
+0

對不起all..i嘗試上述三個scnario ...但它不是我的問題...匹配 – 2012-03-30 09:28:32

1

爲了讓您的列的最後行的列,你可以這樣做,而不是:

lastRow = Selection.EntireColumn.Find(What:="*", after:=Range("A1"), _ 
     LookIn:=xlFormulas, SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious).EntireRow.Row 'Use EntireRow to take hidden rows too 

然後您可以:

Range(Selection, Cells(lastRow, Selection.Column)).Select 
3

了Arul

我不會建議你使用.Select,因爲它是錯誤的一個主要原因。看到這個線程例如

Run Time Error '1004': Select method of Range Class failed VBA 2003

話雖如此,我會建議直接執行您想要,而不是做一個.Select第一動作。另外你如何打開工作簿「iTerm Export.xls」和「iTerm指標Report.xlsx」?如果在運行宏時它們已經打開,那麼可以使用.Activate否則設置工作簿變量,然後打開工作簿。這種方式你也可以避免使用.Activate。讓我知道如果是這樣,我會提供一個樣本。

.Select.Activate的另一個缺點是它大幅降低了代碼速度。

你上面的代碼也可以寫成如下。這是使用.Find而不是直接使用.Activate的正確方法。如果找不到匹配項,代碼的原因將在下面的行中崩潰。

Cells.Find(What:="Asset", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= False, _ SearchFormat:=False).Activate

因此最好是檢查的價值被發現,然後繼續。

試試這個代碼,看看這是你想要的?(UNTESTED

Sub Sample() 
    Dim aCell As Range 

    Windows("iTerm Export.xls").Activate 

    With Sheets("export(1)") 
     Set aCell = .Cells.Find(What:="Asset", LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False) 

     '~~> Check if "Asset is found 
     If Not aCell Is Nothing Then 
      '~~> get the lastrow of the column which has "Asset" 
      lastRow = .Range(Split(Cells(, aCell.Column).Address, "$")(1) & _ 
      .Rows.Count).End(xlUp).Row 

      Windows("iTerm metrics Report.xlsx").Activate 

      .Range(_ 
      Split(Cells(, aCell.Column).Address, "$")(1) & aCell.Row & _ 
      ":" & _ 
      Split(Cells(, aCell.Column).Address, "$")(1) & lastRow _ 
      ).Copy _ 
      Sheets("Raw Data from iTerm").Range("A2") 
     Else 
      MsgBox "Asset not found" 
     End If 
    End With 
End Sub 

HTH

希德

相關問題