2015-02-24 58 views
0

行,Excel VBA再次擊敗了我。我懷疑,當我看到答案時,我會覺得自己像個白癡。幸運的是,隨着年齡的增長,我正逐漸適應這種情況。這裏是我的代碼:多張表格格式第1行粗體文字換行

Option Explicit 

Sub FormatAllSheets() 
    Dim shNames() 
    ReDim shNames(Worksheets.Count - 1) 
    Dim shIndex As Integer 
    For shIndex = 0 To UBound(shNames) 
     shNames(shIndex) = Worksheets(shIndex + 1).Name 
    Next shIndex 

    Range("A1", "ZZ1").Select 

    Sheets(shNames).Select 
    Selection.Font.Bold = True 
    Selection.WrapText = True 
End Sub 

非常感謝, 託尼·利馬

+1

你的代碼不工作的原因是因爲可怕的'Select'關鍵字。當你做了Range(「A1」,「ZZ1」)。選擇你選擇的範圍。但是你做了'Sheets(shNames).Select',它只是選擇了數組中的紙張(有點像按住CTRL並點擊所有紙張)。你*可以*多選範圍,就像你想的那樣,就是不那樣。最好遍歷表單,引用範圍並格式化單元格(不使用「Select」)。除特殊情況外,我總是遠離「選擇」。 – 2015-02-24 02:48:03

+0

謝謝,喬。 「確實可怕的選擇」。 – 2015-02-24 18:23:42

回答

2

最簡單的方法可能如下:

Sub FormatFirstRow() 
    Dim sh As Worksheet 

    For Each sh In ActiveWorkbook.Worksheets 
     With sh.Range("A1:ZZ1") 
      .Font.Bold = True 
      .WrapText = True 
     End With 
    Next sh 
End Sub 
+0

非常感謝。更快,更輕鬆,更好。只有其他我可以要求的東西在下一個回覆中! – 2015-02-24 18:24:26

1

user3561813只是打我的全部答案,但我會改變With line to this:

With sh.Rows(1) 

這樣你不hav e假設任何關於第一排的寬度

+0

總是儘可能使用行或列,而不是限制到特定的範圍。 – 2015-02-24 02:39:43

+0

還有一個改進!謝謝,馬克。 – 2015-02-24 18:24:48

1

好的,玩過這個,有沒有循環做的方法,但問題是你必須做一個選擇(選擇是我的寵物討厭):

Sub BoldFirst() 
    Worksheets.Select 
    Rows(1).select 
    Selection.Font.Bold = true 
    Selection.WrapText = True 
End Sub 

我不是100%確定,但我認爲Select Method是激活跨多個工作表的行所必需的。如果您不執行Select,它只會在活動工作表中顯示爲粗體。

它可能會或可能不會比循環紙張更快。看看是否存在性能差異會很有趣。

+0

作爲一個老式的FORTRAN傢伙,我更喜歡循環播放。但我會研究你的解決方案,希望我仍然能夠學習一些新的技巧。非常感謝。 (並且針對Select的snark非常感謝。) – 2015-02-24 18:25:43

+0

不同之處在於,循環會在所有工作表中一次執行同一個工作表。我發佈的方法將在所有工作表中選擇相同的範圍,然後執行一次操作,通常避免循環可以很好,但在這種情況下,因爲我選擇它會否定任何好處。我甚至沒有注意到你的代碼中的選擇,但這裏是一個快速選擇示例:Sheets(「Sheet1」)。select Range(「A1」)。選擇Activecell.formula =「Hello World」也可以寫成:Sheets(「Sheet1」)。Range(「A1」)。Formula =「Hello World」不選擇意味着更快的代碼執行:)。 – 2015-02-24 21:48:27

相關問題