VBA Excel,基于单元格值重命名图纸
我需要根据一系列单元格值动态重命名所有工作表。 这是我的VBA代码,每当我运行它时,它总是给我一个“运行时错误”1004VBA Excel,基于单元格值重命名图纸,excel,vba,Excel,Vba,我需要根据一系列单元格值动态重命名所有工作表。 这是我的VBA代码,每当我运行它时,它总是给我一个“运行时错误”1004 Sub RenameSheets() Dim MyCell As Range, MyRange As Range Set MyRange = Sheets("Config").Range("A5") Set MyRange = Range(MyRange, MyRange.End(xlDown)) Sheets("Sheet1").Activate For Each MyCe
Sub RenameSheets()
Dim MyCell As Range, MyRange As Range
Set MyRange = Sheets("Config").Range("A5")
Set MyRange = Range(MyRange, MyRange.End(xlDown))
Sheets("Sheet1").Activate
For Each MyCell In MyRange
ActiveSheet.Name = MyCell.Value 'Error here. it works fine if i rename MyCell.Value to "AnyRandomValue"
Worksheets(ActiveSheet.Index + 1).Select
Next MyCell
End Sub
我的头脑绕不过去。为什么它在MyCell.Value上出现错误?请帮忙 我认为问题在于通过
激活工作表。选择方法。
尽可能多。查看链接。
您的代码可以重写如下:
Sub RenameSheets()
Dim MyNames As Variant
MyRange As Range, ws As Worksheet
Dim i As Long
With Sheets("Config")
Set MyRange = .Range("A5", .Range("A" & _
.Rows.Count).End(xlUp).Address)
'~~> pass names to array
MyNames = Application.Transpose(MyRange)
i = Lbound(MyNames)
End With
'~~> iterate sheets instead
For Each ws In Worksheets
If ws.Name <> "Config" Then
ws.Name = MyNames(i) '~~> retrieve from array
i = i + 1
End If
Next ws
End Sub
Sub-RenameSheets()
Dim MyNames作为变体
MyRange作为范围,ws作为工作表
我想我会坚持多久
带图纸(“配置”)
设置MyRange=.Range(“A5”)、.Range(“A”)和_
.Rows.Count).End(xlUp.Address)
“~~>将名称传递给数组
MyNames=Application.Transpose(MyRange)
i=Lbound(我的名字)
以
“~~>而是迭代工作表
对于工作表中的每个ws
如果ws.Name为“Config”,那么
ws.Name=MyNames(i)“~~>从数组中检索
i=i+1
如果结束
下一个ws
端接头
这就是您正在尝试的吗?我认为问题在于通过激活您正在处理的工作表。选择方法。
尽可能多。查看链接。
您的代码可以重写如下:
Sub RenameSheets()
Dim MyNames As Variant
MyRange As Range, ws As Worksheet
Dim i As Long
With Sheets("Config")
Set MyRange = .Range("A5", .Range("A" & _
.Rows.Count).End(xlUp).Address)
'~~> pass names to array
MyNames = Application.Transpose(MyRange)
i = Lbound(MyNames)
End With
'~~> iterate sheets instead
For Each ws In Worksheets
If ws.Name <> "Config" Then
ws.Name = MyNames(i) '~~> retrieve from array
i = i + 1
End If
Next ws
End Sub
Sub-RenameSheets()
Dim MyNames作为变体
MyRange作为范围,ws作为工作表
我想我会坚持多久
带图纸(“配置”)
设置MyRange=.Range(“A5”)、.Range(“A”)和_
.Rows.Count).End(xlUp.Address)
“~~>将名称传递给数组
MyNames=Application.Transpose(MyRange)
i=Lbound(我的名字)
以
“~~>而是迭代工作表
对于工作表中的每个ws
如果ws.Name为“Config”,那么
ws.Name=MyNames(i)“~~>从数组中检索
i=i+1
如果结束
下一个ws
端接头
这就是您正在尝试的吗?我认为问题在于通过激活您正在处理的工作表。选择方法。
尽可能多。查看链接。
您的代码可以重写如下:
Sub RenameSheets()
Dim MyNames As Variant
MyRange As Range, ws As Worksheet
Dim i As Long
With Sheets("Config")
Set MyRange = .Range("A5", .Range("A" & _
.Rows.Count).End(xlUp).Address)
'~~> pass names to array
MyNames = Application.Transpose(MyRange)
i = Lbound(MyNames)
End With
'~~> iterate sheets instead
For Each ws In Worksheets
If ws.Name <> "Config" Then
ws.Name = MyNames(i) '~~> retrieve from array
i = i + 1
End If
Next ws
End Sub
Sub-RenameSheets()
Dim MyNames作为变体
MyRange作为范围,ws作为工作表
我想我会坚持多久
带图纸(“配置”)
设置MyRange=.Range(“A5”)、.Range(“A”)和_
.Rows.Count).End(xlUp.Address)
“~~>将名称传递给数组
MyNames=Application.Transpose(MyRange)
i=Lbound(我的名字)
以
“~~>而是迭代工作表
对于工作表中的每个ws
如果ws.Name为“Config”,那么
ws.Name=MyNames(i)“~~>从数组中检索
i=i+1
如果结束
下一个ws
端接头
这就是您正在尝试的吗?我认为问题在于通过激活您正在处理的工作表。选择方法。
尽可能多。查看链接。
您的代码可以重写如下:
Sub RenameSheets()
Dim MyNames As Variant
MyRange As Range, ws As Worksheet
Dim i As Long
With Sheets("Config")
Set MyRange = .Range("A5", .Range("A" & _
.Rows.Count).End(xlUp).Address)
'~~> pass names to array
MyNames = Application.Transpose(MyRange)
i = Lbound(MyNames)
End With
'~~> iterate sheets instead
For Each ws In Worksheets
If ws.Name <> "Config" Then
ws.Name = MyNames(i) '~~> retrieve from array
i = i + 1
End If
Next ws
End Sub
Sub-RenameSheets()
Dim MyNames作为变体
MyRange作为范围,ws作为工作表
我想我会坚持多久
带图纸(“配置”)
设置MyRange=.Range(“A5”)、.Range(“A”)和_
.Rows.Count).End(xlUp.Address)
“~~>将名称传递给数组
MyNames=Application.Transpose(MyRange)
i=Lbound(我的名字)
以
“~~>而是迭代工作表
对于工作表中的每个ws
如果ws.Name为“Config”,那么
ws.Name=MyNames(i)“~~>从数组中检索
i=i+1
如果结束
下一个ws
端接头
这就是你要尝试的吗?Wao是的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!好的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!好的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!好的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!