Arul
Я не буду предлагать вам использовать .Select
, так как это является основной причиной ошибок. Смотрите эту ветку, например
Ошибка времени выполнения «1004»: сбой при выборе метода класса диапазона VBA 2003
Сказав это, я бы рекомендовал непосредственно выполнить действие, которое вы хотите, вместо того, чтобы сначала выполнить .Select
. Кроме того, как вы открываете книги "iTerm Export.xls" и "iTerm metrics 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
НТН
Sid