根据列名包含空白单元格将一个excel的数据复制并粘贴到另一个excel
我只是想根据列名将数据从一个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
请帮我对此。
谢谢
它停在一片空白,因为那是xlDown选择所做的。 我会建议选择整个列。
Columns(4).Select
或
Columns("D:D").Select
,或者获得具有活动单元格
Columns(ActiveCell.Column).Select
为了让您的列的最后行的列,你可以这样做,而不是:
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
了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
希德
对不起all..i尝试上述三个scnario ...但它不是我的问题...匹配 – 2012-03-30 09:28:32