【问题标题】:VBA LOOP Creating same titles on all worksheets?VBA LOOP 在所有工作表上创建相同的标题?
【发布时间】:2018-08-06 21:43:32
【问题描述】:

我想在所有工作表的第 1 行放置相同的内容。我将如何创建一个循环来做到这一点?我对 VBA 很陌生。我录制了一个宏,但它仍然很长。 18 个工作表需要有这个。这是录制的宏的样子。

Sheets("C3 MBEL TET OPIS_CMA").Select
Range("F1").Select
ActiveCell.FormulaR1C1 = "PSTRIK"
Range("A1").Select
ActiveCell.FormulaR1C1 = "PRECID"
Range("C1").Select
ActiveCell.FormulaR1C1 = "PEXCH"
Range("J1").Select
ActiveCell.FormulaR1C1 = "PQTY"
Range("G1").Select
ActiveCell.FormulaR1C1 = "PCTYM"
Range("D1").Select
ActiveCell.FormulaR1C1 = "PFC"
Range("B1").Select
ActiveCell.FormulaR1C1 = "PACCT"
Range("K1").Select
ActiveCell.FormulaR1C1 = "PPRTCP"
Range("E1").Select
ActiveCell.FormulaR1C1 = "PSUBTY"
Range("H1").Select
ActiveCell.FormulaR1C1 = "PSBUS"
Range("I1").Select
ActiveCell.FormulaR1C1 = "PBS"

当然,除了使用不同的工作表名称之外,这还要重复 17 次。

【问题讨论】:

标签: vba excel


【解决方案1】:

您可以使用一个数组来存储要写入标题的工作表名称,然后遍历该数组来写入它。

Option Explicit

Public Sub WriteHeaderIntoSheets()
    Dim WorksheetNames As Variant
    WorksheetNames = Array("C3 MBEL TET OPIS_CMA", "Sheet1", "Sheet2", "Sheet3") 'your sheet names

    Dim ws As Variant
    For Each ws In WorksheetNames 
        With Worksheets(ws)
            .Range("F1").FormulaR1C1 = "PSTRIK"
            .Range("A1").FormulaR1C1 = "PRECID"
            .Range("C1").FormulaR1C1 = "PEXCH"
            .Range("J1").FormulaR1C1 = "PQTY"
            .Range("G1").FormulaR1C1 = "PCTYM"
            .Range("D1").FormulaR1C1 = "PFC"
            .Range("B1").FormulaR1C1 = "PACCT"
            .Range("K1").FormulaR1C1 = "PPRTCP"
            .Range("E1").FormulaR1C1 = "PSUBTY"
            .Range("H1").FormulaR1C1 = "PSBUS"
            .Range("I1").FormulaR1C1 = "PBS"
        End With
    Next ws
End Sub

或者,您也可以在标题行中使用数组,这样会更快。

Option Explicit

Public Sub WriteHeaderIntoSheets()
    Dim WorksheetNames As Variant
    WorksheetNames = Array("C3 MBEL TET OPIS_CMA", "Sheet1", "Sheet2", "Sheet3") 'your sheet names

    Dim HeaderRow As Variant 'your header values
    HeaderRow = Array("PRECID", "PACCT", "PEXCH", "PFC", "PSUBTY", "PSTRIK", "PCTYM", "PSBUS", "PBS", "PQTY", "PPRTCP")

    Dim ws As Variant
    For Each ws In WorksheetNames
        Worksheets(ws).Range("A1").Resize(ColumnSize:=1 + UBound(HeaderRow)).Value = HeaderRow
    Next ws
End Sub

【讨论】:

  • 快点打败我吧 +
  • 正要写类似的东西,但我喜欢你用“For Each ws In Worksheetnames”的方式
  • 为标题行添加了一个使用数组的替代方法,这使得它更快。
  • 我正在尝试一种变体,您不必遍历工作表 - 手动选择相关工作表,同时按住 Ctrl 并输入公式。似乎在 VBA 中,工作表和范围仍然需要选择,否则即使 Worksheets(WorksheetNames) 是工作表对象数组,您也会得到 Object doesn't support this property or method
  • @DarrenBartrup-Cook 是的,不支持同时访问多个工作表中的范围。所以这里没有循环的捷径。
猜你喜欢
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 2017-07-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
相关资源
最近更新 更多