excel - 使工作表名称与单元格值相同
问题描述
我目前正在处理具有多个工作表的工作簿中的宏,旨在根据主工作表中的值显示和隐藏某些工作表。工作表名称也包含在主工作表中,主过程在引用需要显示或隐藏的工作表时查看这些值。此方法的问题在于,如果用户更改工作表选项卡名称,宏将产生错误。我希望插入一个额外的过程,使每个工作表的选项卡名称等于主工作表相应单元格中的值。我想出了以下内容:
Sub SheetName()
If Not ActiveWorkbook Is ThisWorkbook Then Exit Sub
Dim DataImport As Worksheet
Set DataImport = ThisWorkbook.Worksheets("Data Import")
DataImport.Range("A13").Value = Sheet1.Name
End Sub
此代码工作正常,但此工作簿中有大约 100 多个工作表。我想知道是否有更有效的方法来执行此操作,而不是输入相同的程序 100 次。我尝试将工作表代码名称存储在数组中,并通过数组循环相同的过程,例如:
Sub test()
Dim DataImport As Worksheet
Set DataImport = ThisWorkbook.Worksheets("Data Import")
Dim index As Long
Dim ws(0 To 2) As Worksheet
Set ws = Array(Sheet1, Sheet2, Sheet3)
For i = 13 To 14
index = i - 13
DataImport.Cells(i, "A").Value = ws(index).Name
Next i
End Sub
但出现错误消息“无法分配给数组”。如果我的代码看起来很垃圾,请提前抱歉,我对 VBA 还是新手,我还有很多东西要学。
解决方案
如果您在主工作表的 ColA 中列出工作表代号,则此代码将分别使用当前工作表选项卡名称和索引更新列 B 和 C:
Sub UpdateIndex()
Dim ws As Worksheet, cn As String, m
For Each ws In ThisWorkbook.Worksheets
cn = ws.CodeName
If cn <> DataImport.CodeName Then
'look for the codename in the Import sheet
m = Application.Match(cn, DataImport.Columns(1), 0)
If Not IsError(m) Then
'got a match - update this row
DataImport.Cells(m, "B").Value = ws.Name 'tab name
DataImport.Cells(m, "C").Value = ws.Index 'sheet index
End If
End If
Next ws
End Sub
假设您将“数据导入”工作表的代码名称设置为DataImport
.
如果您的代码由工作表代号驱动,则用户是否重命名选项卡或更改工作表顺序都没有关系。
推荐阅读
- sql - 将字符串中的值剥离为行格式?
- python - python中print("",end="")是什么意思
- microsoft-graph-api - microsoft graph 为其他用户安装应用程序返回“代码”:“冲突”
- swiftui - 无法推断复杂的闭包返回类型;在处理简单的布尔状态时添加显式类型以消除歧义
- php - WP_List_Table 不显示任何条目
- firebase - getDownloadURL - 'Future 类型的值
'不能分配给'String'类型的变量 - node.js - Expo 在使用 npm 安装期间卡住,但使用 yarn 安装并且无法正常工作
- vowpalwabbit - Vowpal Wabbit:对 Contextual Bandits 的动作集大小有限制?
- r - 旋转 ggplot 地图,使北向左而不是向上
- ios - Grand Central Dispatch:当队列超载时会发生什么?