试图得到一个名字 ListObject 对于任何单元格,如果该单元格不是表格的一部分,将导致错误。
ListObject
Option Explicit Function CellInTable(thisCell As Range) As String Dim tableName As String tableName = "" On Error Resume Next tableName = thisCell.ListObject.Name CellInTable = tableName End Function
最初的问题有点模糊,因此答案扩展到解决所有相关的用例。
一种可能的替代方案是使用 Worksheet Formula 如下所示输入任何 Worksheet Cell (例如 $A$3 )然后从Excel VBA宏中引用它:
Worksheet
Formula
Cell
$A$3
清单1.获取Excel 的 工作表 强> 的 名称 强> 使用细胞配方
=MID(CELL("filename",A3),FIND("]",CELL("filename",A3))+1,255)
公式基本上提取了 Worksheet Name 来自 Workbook 完整路径。
Worksheet Name
Workbook
或者,您可以在VBA中实现此功能,前提是您通过了 Range 对象引用该单元格 Worksheet ,如下面的演示示例:
Range
清单2.测试Sub以获取Excel 的 工作表 强> 和 的 表 强> 的 名称 强> 对于Cell“A3”
Option Explicit 'Cell "A3" under the test Sub GetWorksheetAndTableName() Dim myCell As Range Set myCell = Range("$A$3") Debug.Print "Worksheet Name: " & GetWorksheetName(myCell) Debug.Print "Table Name: " & GetTableName(myCell) End Sub
清单3.获取a的函数 的 工作表 强> 的 名称 强> 对于一个细胞
'get Worksheet Name from Range object Function GetWorksheetName(CellRange As Range) As String On Error Resume Next GetWorksheetName = Split(Split(CellRange.Address(External:=True), "]")(1), "!")(0) End Function
并且,在它最简单的形式, Worksheet Name 可以使用以下语句获取(在清单3中显示的函数中替换该语句):
Name
清单4.获取Parent的替代方法 的 工作表 强> 的 名称 强> 用于Cell / Range对象
GetWorksheetName = CellRange.Parent.Name
为了获取指定的表名 Worksheet Cell 请参阅下面清单5中显示的代码段:
清单5.获取 的 表名 强> 对于工作表单元格
Function GetTableName(CellRange As Range) As String If (CellRange.ListObject Is Nothing) Then GetTableName = "" Else GetTableName = CellRange.ListObject.Name End If End Function
希望这可能有所帮助。