2014-05-14 184 views
0

我需要根據單元格值範圍動態地重命名我的所有工作表。 這是我的VBA代碼,每當我運行它時,它都會給我一個'運行時錯誤'1004。VBA Excel,根據單元格值重命名工作表

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上發生錯誤?請幫忙!

回答

3

我認爲的問題是通過.Select方法激活工作表。儘可能多地使用
Avoid using select。檢查鏈接。
您的代碼可以改寫如下圖所示:

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 

這是你想要什麼?

+0

Wao是的。謝謝!它可以得到我想要的東西。雖然沒有想過這樣做。真正整潔。感謝您選擇的鏈接。 但是我仍然無法將我的頭圍繞在我的代碼中。至於它有什麼問題,它爲什麼給我一個錯誤?我錯過了什麼嗎? ,即使我刪除。選擇它仍然會給我相同的錯誤信息。 –

+0

儘管你已經聲明瞭你的範圍對象,但是當你選擇另一個工作表時,它就失去了它的參考。請記住,您將變量聲明爲範圍,它不包含表單中的標識。 – L42

+0

OH MY!哈哈。非常感謝。現在明白了! –

相關問題