使用表格查找工作表名称

时间:2015-08-25 22:36:10

标签: excel excel-vba vba

我正在尝试找到具有特定表名的工作表名称。例如:

Set sheetNM = ActiveWorkbook.Names("ratetable").RefersToRange.Parent.Name

类似的东西,但会拉出工作表的名称,所以我可以激活该工作表以从中提取信息。

3 个答案:

答案 0 :(得分:2)

这不是我推荐的内容,但在您引用ActiveWorkbook时,您可以删除ActiveWorkbook并将其简单地检索为

dim pws as worksheet, sws as string
sws = range("ratetable").parent.name
set pws = range("ratetable").parent
debug.print sws & " - " & pws.name

虽然结构化表格(又名ListObject object)列在公式►名称管理器中,但它没有已定义名称的所有属性。不幸的是,使用ListObject作为ListObject父级的名称所能做的一切都是Worksheet对象,而不是工作簿。

答案 1 :(得分:1)

您可以使用错误捕获来查找包含具有给定名称的表的工作表:

Function FindTableSheet(TableName As String) As String
    Dim ws As Worksheet
    Dim LO As ListObject
    Dim shName As String

    For Each ws In Sheets
        On Error Resume Next
        Set LO = ws.ListObjects(TableName)
        If Err.Number = 0 Then
            FindTableSheet = ws.Name
            Exit Function
        Else
            Err.Clear
        End If
    Next ws
    FindTableSheet = "Not Found"
End Function

为了测试它,我将我的一张工作表命名为“Data”,并在该工作表中添加了一个名为“ratetable”的表格。但是,我没有创建任何名为“乒乓球”的桌子。然后我跑了:

Sub test()
    Debug.Print FindTableSheet("ratetable")
    Debug.Print FindTableSheet("table tennis")
End Sub

输出:

Data
Not Found

答案 2 :(得分:0)

我知道这篇文章很老,但是对于它的价值,我认为OP是在正确的轨道上(寻找父名称),并带有您最初发布的初始代码。调用表的父亲为我工作:

ActiveSheet.ListObjects("TableName").Parent.Name