2014-01-07 52 views
3

我想使用VBA在单元格上插入一个计算。这是我现在如何插入它。它的工作很好,但我无法修改发票单上的百分比。我想在插入行后我可以修改百分比,它会自动更新销售价格。使用vba在范围中添加依赖单元格的公式

Private Sub CommandButton1_Click() 
Dim wsInvoice As Worksheet, wsRange As Worksheet, wsPrice As Worksheet 
Dim nr As Integer, lr As Integer 
With ThisWorkbook 
    Set wsInvoice = .Worksheets("Invoice") 
    Set wsRange = .Worksheets("Range") 
    Set wsPrice = .Worksheets("Price") 
End With 
nr = wsInvoice.Cells(Rows.Count, 1).End(xlUp).Row + 1 
Select Case Me.ComboBox1 
Case "Paper" 
    wsRange.Range("Paper").Copy wsInvoice.Cells(nr, 1) 
    lr = wsInvoice.Cells(Rows.Count, 1).End(xlUp).Row 
    For i = nr To lr 
     wsInvoice.Cells(i, 2) = Application.VLookup(Cells(i, 1), wsPrice.Range("A:B"), 2, 0) 
     wsInvoice.Cells(i, 3) = (".3") 
     wsInvoice.Cells(i, 4).Formula = FormatCurrency(wsInvoice.Cells(i, 2).Value/(1 - (wsInvoice.Cells(i, 3))), 2, vbFalse, vbFalse, vbTrue) 
    Next i 

这里是一个链接,下载我的文档。 https://drive.google.com/file/d/0By_oZy042nKWdTVmX0Fid3JVSHM/edit?usp=sharing

回答

2

我认为这里的FormatCurrency有点没用的,这可以通过一次格式化列和离开它这样来完成。表单函数中的Formula和FormulaLocal似乎有问题。这里是我的解决办法:

删除线wsInvoice.Cells(i,4).Formula ...

在CommandButton1_Click(结束),加入这一行FormulaCorrection

里面一个模块,写下这个非常简单的函数,将你想要做什么:

Sub FormulaCorrection() 

    Sheets("Invoice").Activate 
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row 
    For x = 2 To lastRow 
     Cells(x, 4).FormulaLocal = "=B" & x & "/(1-C" & x & ")" 
    Next x 

End Sub 
+0

我不确定我明白你的意思。 –

+0

Oups ...它不会在我的单元格中插入任何内容.. – Max078

+0

如果您在实施我的解决方案时遇到问题,我可以提供一些指导。然而,这真的应该解决你的问题。 –

1

如果我理解正确的话,这里有一个办法:

修改这一行:

wsInvoice.Cells(i, 4).Formula = FormatCurrency(wsInvoice.Cells(i, 2).Value/(1 - (wsInvoice.Cells(i, 3))), 2, vbFalse, vbFalse, vbTrue) 

是:

wsInvoice.Cells(i, 4).Formula = "=" & wsInvoice.Cells(i, 2).Value & "/ (1 - (C" & i & "))" 

这似乎对我的测试片工作至少。

编辑:

此外,您的整个方法可以缩小一点。这应该做同样的事情:

Private Sub CommandButton1_Click() 
Dim wsInvoice As Worksheet, wsRange As Worksheet, wsPrice As Worksheet 
Dim nr As Integer, lr As Integer 
With ThisWorkbook 
    Set wsInvoice = .Worksheets("Invoice") 
    Set wsRange = .Worksheets("Range") 
    Set wsPrice = .Worksheets("Price") 
End With 
nr = wsInvoice.Cells(Rows.Count, 1).End(xlUp).Row + 1 
Select Case Me.ComboBox1 
    Case "Paper" 
     wsRange.Range("Paper").Copy wsInvoice.Cells(nr, 1) 
    Case "Pen" 
     wsRange.Range("B2:B100").Copy wsInvoice.Cells(nr, 1) 
    Case "Sticker" 
     wsRange.Range("C2:c100").Copy wsInvoice.Cells(nr, 1) 
End Select 

     lr = wsInvoice.Cells(Rows.Count, 1).End(xlUp).Row 
     For i = nr To lr 
      wsInvoice.Cells(i, 2) = Application.VLookup(Cells(i, 1), wsPrice.Range("A:B"), 2, 0) 
      wsInvoice.Cells(i, 3) = (".3") 
      wsInvoice.Cells(i, 4).Formula = "=" & wsInvoice.Cells(i, 2).Value & "/ (1 - (C" & i & "))" 
     Next i 
End Sub 
+0

@ Max078这很奇怪,它在我结束时正常工作,当我用我在Edit中添加的方法替换整个方法时,它工作正常。我可以添加任何组合框项目,并将其填充到表单中。你能告诉我错误是什么吗? – sous2817

+0

@ Max078你可以发布工作簿,将错误返回给你的谷歌驱动器并重新链接链接?我不会在我的最后遇到任何错误。 – sous2817

+0

对不起,我在刚刚发布的工作表上运行代码时仍然处于亏损状态,我没有收到任何错误。 – sous2817