在select表头时指定一个variables作为表名?
我正在尝试创build一个Excel 2010电子表格,其中包含一个将创build新工作表并将工作表1复制到其中的button。 除了表中包含表格外,我已经知道了一切。 当表格被复制时,表格被重新命名,因为你不能有两个同名的表格。 我已经放在一起的VBA脚本有一个部分,它需要select表格的标题行。
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)”来指定工作表上的第一个表,但是当指定范围来select标题,我找不到方法来指定第一个表的当前名称在页面上。
.Range("Table1[[#Headers],[Product]]").Select
我试图通过指定表头的第一个单元格来设置variables,但是连接似乎需要一个“文本”值,然后才能指定一个variables。
另一个想法是将表的当前名称存储在某处,将表的名称更改为静态值,运行我需要运行的代码,然后将表名更改为旧的唯一名称。 但是我找不到一个这样做的好方法。
由于工作表有可能被复制多次,并且表的名称每次都会改变,所以我需要一种在Range()
命令中指定表名的方法,而不必将其设置为特定的名称。
任何帮助将不胜感激。
您可以从更多的面向对象编程中受益,这将允许VBE中的脚本辅助function。
任何人,一个表是一个ListObject
并有一个DataBodyRange
和一个HeaderRowRange
。
你想引用HeaderRowRange
。
或者,您可以简单地在表ListObject
上使用AutoFilter
方法。
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=6, Visibledropdown:=False, Criteria1:= _ Array("All", "AS", "ASD", "ASDF"), Operator:=xlFilterValues
我不完全确定你需要达到什么目的,但是表名是可用的:
ActiveSheet.ListObjects(1).DisplayName
你可以存储在一个stringvariables中。
您可以select表格,包括标题,使用:
ActiveSheet.ListObjects(1).Range.Select
但要记住,通常没有必要select表(带或不带标题行)。