Отмените выбор диапазона после автофильтра

Это кажется невероятно простым и понятным, но независимо от того, сколько тестов и поисков я выполняю, я не могу решить. В настоящее время у меня есть сценарии, которые включают автофильтр, ничего не выбирая, но я подумал, что могу скопировать данные и вставить в новый лист без выбранных данных. Однако после завершения действия отображаются столбцы 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

Удалите строку ниже из вашего кода.

Range("A:K").Select
Другие вопросы по тегам