用于发票的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
后试试这个...
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
它的工作原理。它和我的宏一样。问题是新行具有原始行/ 2的总数,但原始行仍保持不变。这需要改变,并用剩下的另一半的新号码替换。我在这里试图做的是将原件总数分成两半,将其中一半换成新的一排,并用剩下的一半替换原来的总数。我不知道该怎么做..... – OneaboveAll
你只需要添加一行Range(“I”&xRowIndex)= Total。查看编辑的解决方案。 – sktneer
谢谢先生。这真太了不起了! – OneaboveAll
'在错误恢复下一个'?为什么?这使得代码几乎不可能调试(如果按照您使用的方式进行使用 - 不检查“Err.Number”并且没有匹配的“On Error GoTo 0”)。以这种方式使用它几乎总是一个坏主意。 –
我会记住下次当我coda vba。感谢您指出了这一点。我在2周前刚开始使用vba,所以我还有很长的路要走。再次感谢。 – OneaboveAll
几个星期的漂亮代码。另一个有点类似的说法是习惯使用'Option Explicit'(实际上,通过在VBA编辑器选项中启用'Require Variable Declaration'来使其自动化)。这两个建议从长远来看将为您节省大量的调试时间。 –