在选择表格的标题时,将变量指定为表名?

时间:2013-07-22 17:45:59

标签: excel excel-vba vba

我正在尝试使用一个按钮创建一个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()命令中指定表名而不将其设置为特定名称的方法。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我不确定您需要实现的目标,但表名可用:

ActiveSheet.ListObjects(1).DisplayName

您可以将其存储在字符串变量中。

您可以使用以下方式选择表格,包括标题:

ActiveSheet.ListObjects(1).Range.Select

但请注意,通常不必选择表格(有或没有标题行)。

答案 1 :(得分:0)

您可以从更多面向对象的编程中受益,这将允许VBE中的脚本辅助功能。

Anywho,表格为ListObject且有DataBodyRangeHeaderRowRange

您想参考HeaderRowRange

或者,您只需在表AutoFilter上使用ListObject方法。

ActiveSheet.ListObjects(1).Range.AutoFilter Field:=6, Visibledropdown:=False, Criteria1:= _
    Array("All", "AS", "ASD", "ASDF"), Operator:=xlFilterValues