Private Sub Workbook_NewSheet(ByVal Sh As Object)
With shtNames
.Cells(.Rows.Count, 1).End(xlUp).Offset(1).Formula = _
"=RIGHT(CELL(""filename"",'" & Sh.Name & "'!$A$1), " & _
"LEN(CELL(""filename"",'" & Sh.Name & "'!$A$1))-" & _
"FIND(""]"",CELL(""filename"",'" & Sh.Name & "'!$A$1),1))"
End With
End Sub
Option Explicit
Sub test()
Dim ws As Worksheet
Dim str As String
For Each ws In ThisWorkbook.Worksheets
str = str & vbNewLine & "Sheet named " & ws.Name & " located in position " & ws.Index & "."
Next
'Get the names in a list in message box
MsgBox str
End Sub
Function SheetName(ByVal Index As Long, Optional ByVal Book as Range) as String
Application.Volatile
If Book Is Nothing Then Set Book = Application.Caller
SheetName=Book.Worksheet.Parent.Sheets(Index).Name
End Function
Function GetWorksheets() As Variant
Dim ws As Worksheet
Dim x As Integer
Dim WSArray As Variant
ReDim WSArray(1 To Worksheets.Count)
x = 1
For Each ws In Worksheets
'Sheets("Sheet1").Cells(x, 1) = ws.Name
WSArray(x) = ws.Name
x = x + 1
Next ws
'Output Array
GetWorksheets = WSArray
End Function
6条答案
按热度按时间o0lyfsai1#
顺便说一句,在vba中你可以通过名称或对象引用工作表。见下面,如果你使用第一种方法引用你的工作表,它将始终与任何名称一起工作。
qzwqbdag2#
我会保留一个非常隐藏的工作表,其中包含您引用每个工作表时使用的公式。
当
Workbook_NewSheet
事件触发时,将创建一个指向新工作表的公式:shtNames
。SheetNames
的 * 选项卡名称 *。shtNames
的单元格A1
中添加一个标题(我刚刚使用了“Sheet List”)。仅当至少剩余一个可见工作表时才能执行此操作。
ThisWorkbook
模块:在 * 名称管理器 * 中创建命名范围:
SheetList
。=SheetNames!$A$2:INDEX(SheetNames!$A:$A,COUNTA(SheetNames!$A:$A))
然后,您可以使用
SheetList
作为数据验证列表和列表控件的源。我还没有考虑的两个潜在问题是重新排列图纸和删除图纸。
因此当有人更改工作表名称时,宏将继续工作
正如@SNicolaou所说,使用用户不能更改的工作表代码名称,无论工作表标签名称如何,您的代码都将继续工作。
c7rzv4ha3#
@Mischa Urlings与下面的代码,你得到的消息框中的消息如下:
1.图纸名称
1.工作表位置
vsnjm48y4#
VBA函数,如:
将按索引返回工作表名称,就像Excel公式一样。例如:
使用另一帐簿中的可选范围,您可以获得其它帐簿页名称:
v1uwarro5#
创建定义的名称(公式、名称管理器):named:YourSheetNames字段中的名称表示您的位置:
在表格中,您将A1:A5:
这将为您提供(只要计算设置为xlautomatic)一个实际列表
vybvopom6#
以下VBA宏函数将所有工作表名称作为数组返回:
添加到VBA模块后,您可以在工作簿中的任何位置调用它,方法与调用常规Excel公式相同。
第一次
此VBA函数可用作以下Excel 4.0(XLM)宏的更安全的替代方法: