我正在尝试组合一个宏,该宏将选择某些列并将它们粘贴到新工作表中。问题在于,列往往会根据人们认为合适的方式添加和删除,这会破坏绝对引用。
我一直在尝试修改使用宏记录器生成的基本宏,但我没有运气根据其内容选择列。我有一张每天从我们的数据库生成的工作表,其中字段不断变化。例如,我想只选择零件编号、成本和联系人字段,但今天添加的 IDN 使我的旧宏失效了。
到目前为止,我已经尝试使用基本的 Excel 查找函数,例如 vlookup、针对常量列表的索引和下面的查找函数,但似乎都不起作用。我在这里缺少选择包含所需文本的列吗?
列(find("第#部分")).Select
首先,小心.Select https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba?rq=1看来您没有完全限定对工作表的引用,因此请记下完整的内容Workbook.Worksheet.Range
在下面键入引用。
这是您的快速修复方法:
Public Sub Test()
'the Range approach
ThisWorkbook.Worksheets("Sheet1").Rows(1).Find(What:="Part #", LookAt:=xlWhole).EntireColumn.Copy
ThisWorkbook.Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 'or xlPasteAll to include formulas
End Sub
使用整个列范围通常不是最好的主意。它会起作用,但前提是您记得每次都将复制的列粘贴到目标工作表的第一行中。
这是更好的选择(IMO):
通过单击将数据转换为表(在 VBA 中称为 ListObject)“格式为表格”在功能区的主页选项卡上。现在引用您的专栏要容易得多 - 只需按名称即可,无需使用Find
.
Public Sub Test()
'the ListObject approach
ThisWorkbook.Worksheets("Sheet1").ListObjects("MyTable").ListColumns("Part #").Copy
ThisWorkbook.Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 'or xlPasteAll to include formulas
End Sub
你需要知道你的表的名称(我称之为MyTable
此处),选择表格后,您可以通过单击功能区上的“表格”来完成此操作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)