我试图将工作簿的多个工作表从其默认名称“ Sheet1(1),Sheet1(2),Sheet1(3)...”重命名为单元格“ B3”中的日期值”。我想最后给出它们各自的“ B3”单元格中日期的工作表名称。任何工作表中都没有重复的日期。例如,每个工作表的单元格“ B3”中的日期格式为14-Mar-2001
。这是我要使用的宏,但它给了我
运行时错误'1004'
Sub RenameTabs()
For x = 1 To Sheets.Count
If Worksheets(x).Range("B3").Value <> "" Then
Sheets(x).Name = Worksheets(x).Range("B3").Value
End If
Next
End Sub
我能得到的任何帮助将不胜感激!
答案 0 :(得分:1)
请注意,您混合使用了Sheets
和Worksheets
。这不一样!
虽然Sheets
可以包含工作表和图表对象,但是Worksheets
仅包含工作表。因此,可能存在8个工作表(5个工作表和3个图表)。因此,将所有Sheets
更改为Worksheets
。
此外,您还需要确保工作表名称的长度不超过31个字符,因为这是Excel的限制。
Option Explicit
Public Sub RenameTabs()
Dim x As Long
For x = 1 To Worksheets.Count
If Worksheets(x).Range("B3").Value <> "" Then
Worksheets(x).Name = Left$(Worksheets(x).Range("B3").Value, 31)
End If
Next
End Sub
如果单元格B3是真实日期,则应使用Format$()
或将其更改为Worksheets(x).Range("B3").Text
,否则.Value
将返回日期的数字值而不是格式化的日期
答案 1 :(得分:0)
尝试:
Option Explicit
Sub test()
Dim ws As Worksheet
With ThisWorkbook
'Loop worksheets
For Each ws In .Worksheets
With ws
'Check ws b3 value
If .Range("B3").Value <> "" Then
'set ws name
ws.Name = .Range("B3").Value
End If
End With
Next ws
End With
End Sub
注意
请记住,工作表名称最多可以包含31个字符