Excel VBA – 根据单元格地址获取表格的名称
我正在使用Excel,并希望根据单元格地址(例如A3)获取表格的名称,此单元格不会移动。 我如何去在Excel的VBA中说明这一点?
我的计划是让代码将数据validation从“维护”选项卡上的一行表中的一行复制到工作簿的每个选项卡上的单个表(不包括我的“TOC”和“数据”选项卡)。 每个选项卡都是“TEMPLATE”工作表的副本(减去“TOC”,“data”和“TEMPLATE(Maint。)”工作表)。 工作表“数据”,“模板”和“模板(维护)”可能隐藏,也可能不隐藏。
我在“Copy_Data_Validations”子文件中的代码如下所示:
Dim TotalSheets As Integer Dim p As Integer Dim iAnswer As VbMsgBoxResult With Application .DisplayAlerts = False .ScreenUpdating = False End With ' ' Move sheet "TOC" to the begining of the workbook. ' Sheets("TOC").Move Before:=Sheets(1) ' ' Move sheet "data" to be the second sheet in the workbook. ' Sheets("data").Move Before:=Sheets(2) iAnswer = MsgBox("You are about to copy data validations!", vbOKCancel + vbExclamation _ + vbDefaultButton2 + vbMsgBoxSetForeground, "Copying Data Valadations") For TotalSheets = 1 To Sheets.Count For p = 3 To Sheets.Count - 2 ' ' If the answer is Yes, then copy data validations from "TEMPLATE (Maint.) to all other. ' sheets minus the "TOC" sheet and the "data" sheet. ' If iAnswer = vbYes Then If UCase$(Sheets(p).Name) <> "TOC" And UCase$(Sheets(p).Name) <> "data" Then ' This chunk of code should copy only the data validations ' of "Table1_1" (A4:AO4) from the maintenance tab to all ' rows of a single table on each worksheet (minus the ' "TOC", "data", & the "TEMPLATE (Maint.)" worksheets. ' This is the section of code I am looking for unless ' someone has something better they can come up with. Selection.PasteSpecial Paste:=xlPasteValidation, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If ' ' If the answer is Cancel, then cancels. ' ElseIf iAnswer = vbCancel Then ' Add an exit here. End If With Application .DisplayAlerts = True .ScreenUpdating = True End With
尝试获取任何单元格的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
原来的问题有点模棱两可,因此答案被扩展到处理所有相关的用例。
一种可能的select是使用在任何Worksheet
Cell
中input的下面的Worksheet
Formula
(例如$A$3
),然后从Excel VBAmacros中引用它:
清单1.使用Cell Formula获取Excel 工作表 名称
=MID(CELL("filename",A3),FIND("]",CELL("filename",A3))+1,255)
该公式实质上从Workbook
完整path中提取Worksheet Name
。
或者,您可以在VBA中实现这一点,只要您在Worksheet
引用该单元格的Range
对象,如下面的演示示例所示:
清单2.testing小组获取单元格“A3”的Excel 工作表和表 名
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.获取单元格的工作表 名称的函数
'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
而且,以最简单的forms,可以使用以下语句(replace清单3中显示的函数中的那个语句)获得Worksheet
Name
:
清单4.获取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
希望这可能有帮助。