我正在尝试组合一个宏,它将选择某些列并将它们粘贴到新工作表中。问题是列倾向于添加和删除,因为人们认为适合抛出绝对引用。
我一直在尝试修改使用宏录制器生成的基本宏,但我没有运气根据内容选择列。我有一张每天从我们的数据库生成的工作表,其中包含更改字段。例如,我想只选择Part#,Cost和Contact字段,但今天添加IDN会将我的旧宏关闭。
到目前为止,我已经尝试使用基本的excel查找函数,例如vlookup,针对常量列表的索引和下面的查找函数,但似乎都没有。我在这里找不到用我想要的文字选择列的东西吗?
列(查找(“部件号”))。选择
答案 0 :(得分:1)
您需要专门找到该列,然后您可以粘贴到目标位置,例如:
Sheets("Source").Columns(Sheets("Source").Rows(1).Find("Part #").Column).Copy Sheets("Dest").Cells(1,1)
答案 1 :(得分:1)
首先,be careful with .Select
看起来您没有完全限定对工作表的引用,因此请注意下面的完整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):
通过单击功能区主页选项卡上的“format as table”,将数据转换为表(在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
),您可以在选择表格时单击功能区上的“表格”来执行此操作