Microsoft Excelmacros在更改单元格的值时

所以,我不得不制作一个macros,它会通过一个报告,并把所有具有相同发票号码的logging,并把它们放在一起,其date,销售给谁,同一发票的所有行的总和数量的延期定价,订单运费(如适用)以及延期定价和订单运费的总和。

它会把这些值,并把它们放到一个新的工作表。

这是我遇到问题的地方。 大多数情况下,它似乎是macros观的工作,但一旦达到一定的logging,它实际上改变了数字的发票,即(123456)到下一行(即123457)因此,发票是123456不再现有的,而是与123457分组在一起。

我穿过它,应该没有理由改变价值,因为它没有为任何其他细胞。 有没有人有一个理由,为什么这样做呢?

这是我的代码。 提前致谢。

Sub CombineInvoice() Dim InvoiceNum As String, InvoiceDate As String, SoldToAcct As String Dim ExtPrice As Double, OrderFreight As Double, OrderTotal As Double Dim WS2 As Worksheet Application.ScreenUpdating = False Set WS2 = Sheets.Add With Sheet1.Range("A1,C1,D1,BB1,BD1") .Copy Destination:=Sheet2.Range("A1:F1") End With Sheet1.Select InvoiceNum = Range("A2").Value InvoiceDate = Range("C2").Value SoldToAcct = Range("D2").Value Sheet2.Select Selection.Offset(0, 5).Value = "Order Total" Range("A2").Select Sheet1.Select Range("A2").Select Do 'Set order freight OrderFreight = OrderFreight + Selection.Offset(0, 55) 'Set invoice date InvoiceDate = Selection.Offset(0, 2) 'Set Sold to account SoldToAcct = Selection.Offset(0, 3) 'Get extended price Do Until Selection.Value <> InvoiceNum ExtPrice = ExtPrice + Selection.Offset(0, 53) 'Make sure orderFreight is the same If (OrderFreight <> OrderFreight Or OrderFreight = 0) Then OrderFreight = OrderFreight + Selection.Offset(0, 55) Else OrderFreight = OrderFreight End If Selection.Offset(1, 0).Select Loop 'Add Extended Price to Order Freight OrderTotal = ExtPrice + OrderFreight 'Populate Sheet 2 with data Sheet2.Select With Selection .Value = InvoiceNum .Offset(0, 1).Value = InvoiceDate .Offset(0, 2).Value = SoldToAcct .Offset(0, 3).Value = ExtPrice .Offset(0, 4).Value = OrderFreight .Offset(0, 5).Value = OrderTotal .Offset(1, 0).Select End With 'Return to sheet 1 for next invoice number Sheet1.Select Selection.Value = Selection.Offset(1, 0) InvoiceNum = Selection.Value ExtPrice = 0 OrderFreight = 0 If (Selection.Value = "") Then Exit Do Loop Application.ScreenUpdating = True End Sub 

接近第一个/外部循环的末尾,我们有这些代码行:

 Sheet1.Select Selection.Value = Selection.Offset(1, 0) InvoiceNum = Selection.Value ExtPrice = 0 OrderFreight = 0 If (Selection.Value = "") Then Exit Do 

OP在评论中指出,删除这条线是有效的:

 Selection.Value = Selection.Offset(1, 0) 

但是,由于Selection.Value在下一行使用,所以我build议对下一行进行以下更改(这也是@Scott在注释中提到的)。

 InvoiceNum = Selection.Offset(1, 0).Value