【问题标题】:VBA - Macro for copy sheets, insert formulas and change row reference by +1VBA - 用于复制表的宏,插入公式并通过 +1 更改行引用
【发布时间】:2017-01-25 07:06:15
【问题描述】:

我有用于复制一张样品表的宏。印张副本的数量基于不同的印张值。我需要为每个副本插入不同的公式到特定范围,其中公式的行数增加 +1。可以这样做吗?

我需要的例子:

- Sheet1 "=DATA_SELECTED!$N$2"
- Sheet2 "=DATA_SELECTED!$N$3"
- Sheet3 "=DATA_SELECTED!$N$4"

这就是我现在在公式中没有 +1 的情况。

Sub CopySheetsFromAList()

Dim MyCell As Range, MyRange As Range

Set MyRange = Sheets("DATA").Range("A1")
Set MyRange = Range(MyRange, MyRange.End(xlDown))
Set ws = Sheets("Sheet1")

For Each MyCell In MyRange
    ws.Copy after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = MyCell.Value
    Sheets(Sheets.Count).Range("C3").Formula = "=DATA_SELECTED!$M$2"
    Sheets(Sheets.Count).Range("C4").Formula = "=DATA_SELECTED!$N$2"
    Sheets(Sheets.Count).Range("C6").Formula = "=DATA_SELECTED!$K$2"
    Sheets(Sheets.Count).Range("C7").Formula = "=DATA_SELECTED!$Y$2"
Next MyCell

End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    可能是这样的

    Option Explicit
    
    Sub CopySheetsFromAList()    
        Dim MyCell As Range, MyRange As Range
        Dim ws As Worksheet
        Dim iRow As Long
    
        Set MyRange = Sheets("DATA").Range("A1")
        Set MyRange = Range(MyRange, MyRange.End(xlDown))
        Set ws = Sheets("Sheet1")
    
        For Each MyCell In MyRange
            ws.Copy after:=Sheets(Sheets.Count)
            iRow = iRow + 1
            With Sheets(Sheets.Count)
                .Name = MyCell.Value
                .Range("C3").Formula = "=DATA_SELECTED!$M$" & (1 + iRow)
                .Range("C4").Formula = "=DATA_SELECTED!$N$" & (1 + iRow)
                .Range("C6").Formula = "=DATA_SELECTED!$K$" & (1 + iRow)
                .Range("C7").Formula = "=DATA_SELECTED!$Y$" & (1 + iRow)
            End With
        Next MyCell    
    End Sub
    

    【讨论】:

    • 完美。谢谢你。是否可以将其应用于这样的组合公式? "=DATA_SELECTED!$A$2&" / "&DATA_SELECTED!C2"
    • 是的。始终使用& 连接字符串的每个成员
    • .Range("L3").Formula = "=DATA_SELECTED!$A$" & (1 + iRow) & " / " & "DATA_SELECTED!$C$" & (1 + iRow) 这对我不起作用“/”被写为数学除法而不是文本分隔符。我需要那个单元格看起来像“40/2”,但现在显示“20”
    • 对于后者的需要,我会选择.Range("L3").Formula = "=concatenate(offset(DATA_SELECTED!$A$2," & iRow & ",0),""/"",offset(DATA_SELECTED!$C$2," & iRow & ",0))"
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多