用于发票的Excel宏

用于发票的Excel宏

问题描述:

因此,此供应商每周都会向我发送电子表格以获取其发票。如果名称为colum,如果它等于“BCR Plaza”,我想让excel自动在其下面添加另一行,复制前一行的一些数据并将原始行中的总数除以2.我已经有一个全部的宏这个的。我不能弄清楚的是如何告诉excel,在执行完所有上述操作后,再回到原来的总数并将其除以得到结果。用于发票的Excel宏

这是我现在有现在的宏:

Sub BlankLine() 

Dim Rng As Range 
Dim WorkRng As Range 
Dim Name As String 
Dim Memo As String 
Dim dn As Variant 
Dim dt As Variant 
Dim Total As Variant 

On Error Resume Next 
xTitleId = "Add New Row" 
Set WorkRng = Application.Selection 
Set WorkRng = Cells.Select 
Set WorkRng = WorkRng.Columns(1) 
xLastRow = WorkRng.Rows.Count 
Application.ScreenUpdating = False 
For xRowIndex = xLastRow To 1 Step -1 
    Set Rng = WorkRng.Range("A" & xRowIndex) 
    If Rng.Value = "BCR Plaza" Then 
      dt = Range("B" & xRowIndex).Value 
      dn = Range("D" & xRowIndex).Value + 0.5 
      Memo = Range("C" & xRowIndex).Value 
      Total = (Range("I" & xRowIndex).Value)/2 
     Rng.Offset(1, 0).EntireRow.Insert Shift:=xlDown 
      Range("A" & xRowIndex + 1) = "Billing" 
      Range("D" & xRowIndex + 1) = dn 
      Range("B" & xRowIndex + 1) = dt 
      Range("C" & xRowIndex + 1) = Memo 
      Range("I" & xRowIndex + 1) = Total 

    End If 
Next 
Application.ScreenUpdating = True 
End Sub 

原始文件 enter image description here

enter image description here

+1

'在错误恢复下一个'?为什么?这使得代码几乎不可能调试(如果按照您使用的方式进行使用 - 不检查“Err.Number”并且没有匹配的“On Error GoTo 0”)。以这种方式使用它几乎总是一个坏主意。 –

+0

我会记住下次当我coda vba。感谢您指出了这一点。我在2周前刚开始使用vba,所以我还有很长的路要走。再次感谢。 – OneaboveAll

+0

几个星期的漂亮代码。另一个有点类似的说法是习惯使用'Option Explicit'(实际上,通过在VBA编辑器选项中启用'Require Variable Declaration'来使其自动化)。这两个建议从长远来看将为您节省大量的调试时间。 –

后试试这个...

Sub BlankLine() 
Dim Memo As String 
Dim dn As Variant 
Dim dt As Variant 
Dim Total As Variant 
Dim xRowIndex As Long, xLastRow As Long 

Application.ScreenUpdating = False 
xLastRow = Cells(Rows.Count, 1).End(xlUp).Row 
For xRowIndex = xLastRow To 2 Step -1 
    If Cells(xRowIndex, 1) = "BCR Plaza" Then 
     dt = Range("B" & xRowIndex).Value 
     dn = Range("D" & xRowIndex).Value + 0.5 
     Memo = Range("C" & xRowIndex).Value 
     Total = (Range("I" & xRowIndex).Value)/2 
     Rows(xRowIndex + 1).Insert 
     Range("A" & xRowIndex + 1) = "Billing" 
     Range("D" & xRowIndex + 1) = dn 
     Range("B" & xRowIndex + 1) = dt 
     Range("C" & xRowIndex + 1) = Memo 
     Range("I" & xRowIndex + 1) = Total 
     Range("I" & xRowIndex) = Total 
    End If 
Next 
Application.ScreenUpdating = True 
End Sub 
+0

它的工作原理。它和我的宏一样。问题是新行具有原始行/ 2的总数,但原始行仍保持不变。这需要改变,并用剩下的另一半的新号码替换。我在这里试图做的是将原件总数分成两半,将其中一半换成新的一排,并用剩下的一半替换原来的总数。我不知道该怎么做..... – OneaboveAll

+0

你只需要添加一行Range(“I”&xRowIndex)= Total。查看编辑的解决方案。 – sktneer

+0

谢谢先生。这真太了不起了! – OneaboveAll