我正在尝试使用一个按钮创建一个Excel 2010电子表格,该按钮将创建一个新工作表并将工作表1复制到它。除了表格包含表格外,我已经弄明白了。复制工作表时,表将重命名,因为您不能有2个具有相同名称的表。我放在一起的VBA脚本有一个部分需要选择表的标题行。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = ActiveSheet.Range("C2")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If ActiveSheet.Range("C2") = "KeyWord" Then
ActiveSheet.ListObjects(1).Range("Table1[[#Headers],[Product]]").Select
Selection.AutoFilter
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=6, Visibledropdown:=False, Criteria1:= _
Array("All", "AS", "ASD", "ASDF"), Operator:=xlFilterValues
ActiveSheet.Range("C3").Select
ActiveSheet.Name = ActiveSheet.Range("C2")
End If
End If
End Sub
我可以通过使用“ActiveSheet.ListObjects(1)”指定表格上的第一个表来重命名表格,但是当指定选择标题的范围时,我找不到指定当前名称的方法页面上的第一个表格。
.Range("Table1[[#Headers],[Product]]").Select
我试图通过指定表头的第一个单元格来使用变量集来连接它,但是在指定变量之前,concatenate似乎需要一个“text”值。
另一个想法是将表的当前名称存储在某处,将表的名称更改为静态值,运行我需要运行的代码,然后将表名更改回旧的唯一名称。虽然我无法想出一个很好的方法。
由于工作表有可能被多次复制,并且表的名称每次都会更改,我需要一种在Range()
命令中指定表名而不将其设置为特定名称的方法。
非常感谢任何帮助。
答案 0 :(得分:1)
我不确定您需要实现的目标,但表名可用:
ActiveSheet.ListObjects(1).DisplayName
您可以将其存储在字符串变量中。
您可以使用以下方式选择表格,包括标题:
ActiveSheet.ListObjects(1).Range.Select
但请注意,通常不必选择表格(有或没有标题行)。
答案 1 :(得分:0)
您可以从更多面向对象的编程中受益,这将允许VBE中的脚本辅助功能。
Anywho,表格为ListObject
且有DataBodyRange
和HeaderRowRange
。
您想参考HeaderRowRange
。
或者,您只需在表AutoFilter
上使用ListObject
方法。
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=6, Visibledropdown:=False, Criteria1:= _
Array("All", "AS", "ASD", "ASDF"), Operator:=xlFilterValues