在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表(带或不带标题行)。