2013-05-25 26 views
0

我知道如何使馬科斯,但在校期間,他從來沒有教我的一切與他們無關,主要是與點心。 我的問題是我如何製作一個marco,它將重新命名我的所有表格,並預期前四個表格。重命名錶不重命名前四片

Sub RenameSheet() 

    Dim rs As Worksheet 

    For Each rs In Sheets 
     rs.Name = rs.Range("D5") 
    Next rs 

End Sub 

適用於每張紙,但我不想重命名每張紙。我的前四個是Documentation,Summarry,RONATemplate,KaycanTemplate。我想離開的是。我真的只是把這些名字放在單元格D5中,使它在一個模板的地方工作,並且會弄亂我的其他馬科斯。

回答

0

首先選擇是使用/不同類型的循環的迭代,其根據片索引號。這是隻爲Worksheets Collection運行代碼:

Sub RenameSheet() 

    Dim rs As Long 

    For rs = 5 To Worksheets.Count 
     Worksheets(rs).Name = Worksheets(rs).Range("D5") 
    Next rs 

End Sub 

你的循環開始爲工作表的5日一直持續到最後一個。

另一種選擇是排除所有工作表與您在您的問題提到的名字。在這種情況下,你可以運行此宏:

Sub RenameSheet() 

    Dim rs As Worksheet 

    For Each rs In Sheets 
     if rs.name <> "Summary" And rs.Name <> "RONATemplate" and rs.Name <> "KeycanTemplate" Then 
      rs.Name = rs.Range("D5") 
     end if 
    Next rs 

End Sub 

但是,請記住,像所有rs.Name <> "Summary"條件檢查是大小寫敏感的,因此,你需要把內碼適當的名稱,包括大寫和較低的情況下。或者你可以使用UCase函數比較大寫的名字,如:

if UCase(rs.Name) <> "SUMMARY" And UCase(rs.Name) <> "RONATEMPLATE" And Ucase(rs.Name) <> "KEYCANTEMPLATE" Then 

我會建議使用第二種改進的過程中。如果您更改工作表的順序(例如,將第一個工作表移至第六個工作位置),您將得到意外結果,首先運行For i=1循環。運行第二種類型的循環/子程序時沒有這樣的問題。

+0

'用於RS = 5在Sheets.Count'應'對於rs = 5到Sheets.Count'當然。 –

+0

對,謝謝:) –

+1

另一件事,我要指出的是,如果有任何圖表'Sheets',你將在第一個圖表上得到438運行時錯誤,因爲圖表中沒有'range'對象。 –

0

您可以創建一種具有黑名單,並檢查是否rs.Name是你不想改變,或者你可以通過索引訪問表的名字之一。

For i = 5 to Worksheets.Count 
    Worksheets(i).Name = rs.Range("D5") 
Next 
0

向第四使用後的片材的index屬性在if語句中改變每片:

Sub RenameSheet() 

Dim rs As Worksheet 

For Each rs In Sheets 
    If rs.Index > 4 Then 
     rs.Name = rs.Range("D5") 
    End If 
Next rs 

End Sub