2014-01-07 90 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