VBA Excel,基于单元格值重命名图纸

VBA 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

我需要根据一系列单元格值动态重命名所有工作表。 这是我的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 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是的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!好的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!好的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!好的。非常感谢。它能让我得到我想要的。但我没想过这样做。非常整洁。谢谢你的选择链接。然而,我仍然不能把我的头围绕在我的代码上。至于它有什么问题,为什么它会给我一个错误?我是不是遗漏了什么,即使我删除。选择它仍然会给我相同的错误消息。即使你已经声明了你的范围对象,当你选择另一个工作表时,它会失去它的引用。请记住,您将变量声明为范围,但其中不包括工作表标识。噢,天哪!哈哈。非常感谢你。现在明白了!