excel - 使用 VBA 中同一工作表中的单元格值重命名 Excel 中的多个工作表
问题描述
我目前正在做一个 VBA 项目。我有一个工作簿,其中包含来自不同工作簿的多个选项卡。所有选项卡的名称都是相同的,但是由于它们来自不同的文件,我想根据提取它们的文件名来命名它们。文件名存在于每个选项卡的单元格 EC1 中。我想根据每个工作表的单元格 EC1 中存在的值来命名工作簿中的所有工作表。
我有以下代码:
Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
rs.Name = rs.Range("EC1")
Next rs
End Sub
我从上面的代码中得到了 1004 错误。
我也试过这段代码:
Sub RenameSheet()
Dim xWs As Worksheet
Dim xRngAddress As String
Dim xName As String
Dim xSSh As Worksheet
Dim xInt As Integer
xRngAddress = Application.ActiveCell.Address
On Error Resume Next
Application.ScreenUpdating = False
For Each xWs In Application.ActiveWorkbook.Sheets
xName = xWs.Range(xRngAddress).Value
If xName <> "" Then
xInt = 0
Set xSSh = Nothing
Set xSSh = Worksheets(xName)
While Not (xSSh Is Nothing)
Set xSSh = Nothing
Set xSSh = Worksheets(xName & "(" & xInt & ")")
xInt = xInt + 1
Wend
If xInt = 0 Then
xWs.Name = xName
Else
If xWs.Name <> xName Then
xWs.Name = xName & "(" & xInt & ")"
End If
End If
End If
Next
Application.ScreenUpdating = True
End Sub
有些工作表确实被重命名,但有些则没有。我检查了重复的工作表名称,但没有。我还检查了文件名是否在正确的范围(单元格)内,并且它存在。
解决方案
如果该值包含一些特殊字符,则可能存在问题。excel表格的名称可能有一些限制,如果这是问题,我的代码可能是解决方案。它将字符串剪切到最大长度为 31 个字符,并删除名称中不允许的所有特殊字符。
Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
sheetName = without_special_chars(rs.Range("EC1").Value)
If Len(sheetName) > 31 Then
sheetName = Left(sheetName, 31)
End If
rs.Name = sheetName
Next rs
End Sub
Function without_special_chars(text As String) As String
Dim i As Integer
Const special_chars As String = "-.,:;#+ß'*?=)(/&%$§!~\}][{"
For i = 1 To Len(special_chars)
text = Replace(text, Mid(special_chars, i, 1), "")
Next i
without_special_chars = text
End Function
推荐阅读
- php - PHP & XML:带冒号的 XML 响应的访问属性?
- node.js - 使用 Angular 13 安装 ngrx 商店时出现错误无法解析依赖关系树
- react-native - React Native Map 无法动态渲染多个不同的图像数组标记
- spring-boot - 测试未找到 Springboot Webflux 端点 - 是什么原因造成的?
- pandas - 以特定方式重塑熊猫数据框
- c++ - 可选模板参数组合
- webpack - Webpack 5 编译成功但应用程序不起作用:未捕获的 ReferenceError:未定义导出
- python - 使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件
- pine-script - Pinescript如何在子窗口的左侧放置标签
- javascript - 如何使用 rselenium 单击 javascript“链接”开始下载 excel 文件?