自动过滤后取消选择范围
Deselect range after autofilter
这看起来非常简单和直接,但无论我做了多少测试和搜索,我都无法解决。我目前有脚本可以在不选择任何内容的情况下打开 AutoFilter,但我想我可以复制数据并粘贴到新的工作表中而无需选择数据。但是,在完成操作后,它会显示已选中的列 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
从您的代码中删除以下行。
Range("A:K").Select
通常使用 .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
这看起来非常简单和直接,但无论我做了多少测试和搜索,我都无法解决。我目前有脚本可以在不选择任何内容的情况下打开 AutoFilter,但我想我可以复制数据并粘贴到新的工作表中而无需选择数据。但是,在完成操作后,它会显示已选中的列 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
从您的代码中删除以下行。
Range("A:K").Select
通常使用 .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