.select
如果不需要(也不需要) ,我会尝试清理 VBA 代码,使其不再包含任何.Activate
内容,因为这似乎是高效 VBA 编码的基本规则。这是我的问题,我想将一张工作表上的 K 列的内容复制到另一张工作表(同一工作簿)上没有标题的区域,而我花了很多时间弄清楚如何引用该范围。
我弄清楚了如何在为项目的另一个区域启用过滤器时计算单元格数量(shReport.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
),但此工作表没有过滤器,我没有计算单元格数量;我复制并粘贴它们,然后删除重复项,从而创建参考列表。此外,我在.End(xlDown)
网上看到的所有内容似乎都带有.Selection
。
我怎样才能将这个极其低效的代码转变为正确的编码?
Sheets("LAS Report").Select
Range("K2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Calc").Range("B19").Paste
Range("B19").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.RemoveDuplicates Columns:=1, Header:=xlNo
答案1
适用于您的方法Selection
也直接适用于Range
您可以直接复制范围而不选择它们:
Dim ws1, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("LAS Report")
Set ws2 = ThisWorkbook.Sheets("Calc") 'define after sheet is created
ws1.Range("K2", ws1.Range("K2").End(xlDown)).Copy _
ws2.Range("B19")
并删除重复项:
ws2.Range("B19", ws2.Range("B19").End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo