Мне сказали, что использование .Select и .Workbooks.Activate — не лучший способ написать Vba. Приведенный ниже код, как правило, работает идеально, и, похоже, никаких реальных проблем не возникает. Activeworkbook не является проблемой из-за Workbooks("FUA.XLSM").Activate. Тогда мой вопрос: что было бы хорошей альтернативой/подходом? Извините, если это пустая трата времени или это глупый вопрос, но я слышал, что использование этих методов не является хорошим способом сделать это в долгосрочной перспективе. Я беспокоюсь, что это не сработает или создаст проблемы в будущем. Следует отметить, что без Workbooks("FUA.XLSM"). Activate код имеет тенденцию создавать ошибки, поскольку он путается в выборе рабочей книги. Короче говоря, мой вопрос: как мне избежать использования Select и .Activate, чтобы уменьшить вероятность ошибок в будущем?
Код выглядит следующим образом..
Dim wb1 As Excel.Workbook
Dim wb2 As Excel.Workbook
Set wb2 = Workbooks.Open("C:\Users\Ha.csv")
Set wb1 = Workbooks("FUA")
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim copyRange As Range
Set sht1 = wb1.Sheets("Sheet1")
Set sht2 = wb2.Sheets("Ha")
With wb1.Sheets("Sheet1")
Range("AA3").Select
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastRow = .Cells.Find(What:="*", _
After:=.Range("AA3"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).row
Else
lastRow = 1
End If
End With
Workbooks("FUA.XLSM").Activate
Range("AA3").Select
sht1.ListObjects.Add(xlSrcRange, , xlYes).Name = _
"Table1"
Range("Table1[#All]").Select
sht1.ListObjects("Table1").Range.AutoFilter Field:=9, Criteria1:= _
">=-1000000000000", Operator:=xlAnd, Criteria2:="<=1000000000000000"
Application.DisplayAlerts = False
Selection.SpecialCells(xlCellTypeVisible).Copy
Application.DisplayAlerts = True
Set wb2 = Workbooks.Open("C:\Users\Ha.csv")
Application.DisplayAlerts = False
wb2.Sheets("Ha").Paste
wb2.SaveAs Filename:= _
"C:\Users\Ha.csv", FileFormat:= _
xlCSV, CreateBackup:=False
Workbooks("Ha.csv").Close
End Sub