Отмените выбор диапазона после автофильтра
Это кажется невероятно простым и понятным, но независимо от того, сколько тестов и поисков я выполняю, я не могу решить. В настоящее время у меня есть сценарии, которые включают автофильтр, ничего не выбирая, но я подумал, что могу скопировать данные и вставить в новый лист без выбранных данных. Однако после завершения действия отображаются столбцы A:K как выбранные. Мне не удалось выяснить, как отменить выбор этих столбцов на рабочем листе, и я не смог выяснить, как копировать и вставлять без их выбора в первую очередь. Любое руководство приветствуется. Благодарю.
Sub RunScript()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Data")
Sheets.Add.Name = "copy"
Dim galreqws As Worksheet
Set galreqws = ThisWorkbook.Sheets("copy")
Sheets("Data").Select
Range("A:K").AutoFilter
ws1.Range("A1:K1000").Copy Destination:=Sheets("copy").Range("A1:K1000")
galreqws.Delete
'Sheets("Data").Select
Range("A:K").AutoFilter
Range("A:K").Select
Sheets("Buttons").Select
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
2 ответа
Обычно это плохая практика .Select
если вы действительно не хотите, чтобы пользователь увидел выбранный диапазон. Насколько я знаю, нет никаких действий, где .Select
необходимо.
Ниже предлагается несколько вещей, которые вы можете сделать, чтобы улучшить свой код:
Sub RunScript()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wsCurrent As Worksheet
Set wsCurrent = ActiveSheet
Dim wsData As Worksheet
Set wsData = ThisWorkbook.Worksheets("Data")
Dim wsGalreq As Worksheet
' Note that .Add will activate the new sheet so we'll
' need to reactivate the worksheet that was previously active
'Set wsGalreq = Worksheets.Add
'wsGalreq.Name = "copy"
Set wsGalreq = Worksheets("copy")
wsData.Range("A:K").AutoFilter 1, "Supplier A"
' Find the used range in columns A to K and copy over starting
' at cell A1 of wsGalreq
Intersect(wsData.UsedRange, wsData.Range("A:K")).Copy Destination:=wsGalreq.Range("A1")
' Doubt deleting the new sheet was intentional?
' wsGalreq.Delete
' Now change the view to the desired worksheet, uncomment one:
'Worksheets("Buttons").Select
'wsCurrent.Activate
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub