1

そのため、レポートを実行し、同じ請求書番号を持つすべてのレコードを取得して、同じ請求書のすべての行の合計である日付を1つの行にまとめるマクロを作成する必要がありました。番号の拡張価格、該当する場合は注文貨物、および拡張価格と注文貨物の合計。

これらの値を取得して、新しいシートに配置します。

これが私が問題にぶつかっているところです。ほとんどの場合、マクロは機能しているように見えますが、特定のレコードに到達すると、実際には番号(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
4

1 に答える 1

0

最初の/外側のループの終わり近くに、次のコード行があります。

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は次の行で使用されているため、次の行にも次の変更を提案します(これは、コメントで@Scottによっても提案されました)。

InvoiceNum = Selection.Offset(1, 0).Value
于 2012-07-13T13:17:30.010 に答える