如何仅使用宏从一个Excel工作表中复制可以动态增长到另一个工作表的公式

时间:2014-08-23 07:33:27

标签: excel vba excel-vba formulas

我有两个Excel工作表sheet1和sheet2.Sheet1是一个动态Excel工作表,可能有添加列的机会。我已经编码将列标题从sheet1动态复制到sheet2。

Sheet1:
Prdct Id   PrdctQty Unitprice PrdctQty 

  1         5           10       50
  2         10          10       100



sheet2:
Prdct Id   PrdctNme Unitprice PrdctQty 

当我打开sheet2时,这些标题会自动显示在sheet1上(使用宏)。sheet2中有2个按钮。

1.Display-display product details on matching Prdct Id  entered by the user(that also done through macro)
2.Add- To add new product,user can enter Prdct Id , PrdctNme, Unitprice and it will be copied to sheet1 (through macro)     

Sheet1还包含其他具有fromulas的列(我没有在示例中显示),sheet1可以动态增长。 所以我想要的是当用户输入Prdct Id , PrdctNme, Unitprice然后PrdctQty应该自动进入sheet2(以及我暂时不包括的其他计算列),之后我可以将新产品添加到Sheet 1中

我试过这段代码(来自stackoverflow)

Sub dural()
Dim r As Range, ady As String
For Each r In Sheets("Sheet1").Cells.SpecialCells(xlCellTypeFormulas)
    ady = r.Address
    r.Copy Sheets("Sheet2").Range(ady)
Next

End Sub

但我得到的是sheet2中sheet1的整个副本以及值。我需要的只是公式而不是值

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

  Sub moveformulas ()

    Sheets(1).UsedRange.SpecialCells(xlCellTypeFormulas).Copy 
    Sheets(2).Range("A1").PasteSpecial

  End Sub 

答案 1 :(得分:0)

即使我不确定它是正确的方法,我找到了一种方法。

Sub dural()
Dim r As Range, ady,ady2 As String
For Each r In Sheets("Sheet1").Cells.SpecialCells(xlCellTypeFormulas)
    ady = r.Address
    ady2=r.formula
    Sheets("Sheet2").Range(ady).formula=ady2
Next

它对我有用

答案 2 :(得分:0)

Sub CopyOnlyFormulas()

Sheets(1).UsedRange.Copy
Sheets(2).Cells.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone

    For Each cell In Sheets(2).UsedRange
        If Not cell.HasFormula Then
            cell.Clear
        End If
    Next

End Sub


Sub CopyDataAndFormulas()
Sheets(1).UsedRange.Copy
Sheets(2).Cells.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone
End Sub