自动filter后取消select范围

这似乎非常简单直接,但无论我做了多lesstesting和检索,我都无法解决。 我目前有脚本打开AutoFilter没有select任何东西,但我想我可以复制数据并粘贴到一个新的工作表没有select的数据。 但是,在完成操作之后,它将显示列A:K。 我一直无法弄清楚如何取消select工作表上的那些列,也没有能够find如何复制和粘贴没有被选中的第一个地方。 任何指导表示赞赏。 谢谢。

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 

除非您确实希望用户看到选定的范围,否则使用.Select通常是不好的做法。 据我所知没有任何行动。select是必需的。

以下是一些可以改善您的代码的build议:

 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