2015-02-24 62 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

相关问题