Использование VBA для печати нескольких счетов на странице и печати счетов только для избранных клиентов - PullRequest
0 голосов
/ 11 октября 2019

Изображение шаблона счета-фактуры

Invoice Template Image

Я печатаю счета-фактуры в Excel, используя приведенный выше шаблон, где сведения о шаблонах извлекаются из рабочего листа с каждой строкой, содержащей данныеодной накладной.

На каждой странице есть два накладных, и я хочу настроить их так, чтобы я мог распечатывать накладные только определенного покупателя за раз. Имя клиента - wks1.Cells(i, 6).Value.

. Я пытался использовать простые операторы If в цикле For, но независимо от того, что я делаю, только первый счет на странице печатается ссоответствующий клиент. Второй счет пуст.

Использование настраиваемого фильтра и выбор только клиента, для которого я хочу распечатать счета, не помогает, поскольку код обрабатывает каждую строку независимо от фильтра. Я не возражаю против того, чтобы имя клиента было жестко закодировано в VBA.

Я просто хочу, чтобы оба счета на странице были распечатаны последовательно на основе значения wks1.Cells(i, 6).Value.

Вот мой код

Sub Button1_Click()
Dim wks1 As Worksheet, wks2 As Worksheet

// Data Source
Set wks1 = Sheets("Data")
// Invoice Template
Set wks2 = Sheets("Template")

Dim i As Integer

LastRow = Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To LastRow
    // Make a temporary working copy
    wks2.Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "wks3"

    Set wks3 = Sheets("wks3")

    // Fill the details for the first invoice in the page

    wks3.Range("C3").Value = wks1.Cells(i, 1).Value
    wks3.Range("C5").Value = wks1.Cells(i, 2).Value
    wks3.Range("F14").Value = wks1.Cells(i, 3).Value & " days at " & ChrW(&H20B9) & " " & wks1.Cells(i, 4).Value & " per day "
    wks3.Range("C7").Value = wks1.Cells(i, 5).Text
    wks3.Range("I18").Value = wks1.Cells(i, 5).Text
    // wks1.Cells(i, 6).Value = Customer Name
    wks3.Range("C9").Value = " " & wks1.Cells(i, 6).Value
    wks3.Range("C12").Value = " " & wks1.Cells(i, 7).Value
    wks3.Range("C14").Value = wks1.Cells(i, 8).Value
    wks3.Range("C16").Value = wks1.Cells(i, 9).Value
    wks3.Range("C18").Value = wks1.Cells(i, 10).Value
    wks3.Range("D21").Value = wks1.Cells(i, 11).Value

    // Increment "i" to process the next row in the Data Source worksheet
    i = i + 1

    // Fill the details for the second invoice in the page

    wks3.Range("C27").Value = wks1.Cells(i, 1).Value
    wks3.Range("C29").Value = wks1.Cells(i, 2).Value
    wks3.Range("F38").Value = wks1.Cells(i, 3).Value & " days at " & ChrW(&H20B9) & " " & wks1.Cells(i, 4).Value & " per day "
    wks3.Range("C31").Value = wks1.Cells(i, 5).Text
    wks3.Range("I42").Value = wks1.Cells(i, 5).Text
    // wks1.Cells(i, 6).Value = Customer Name
    wks3.Range("C33").Value = " " & wks1.Cells(i, 6).Value
    wks3.Range("C36").Value = " " & wks1.Cells(i, 7).Value
    wks3.Range("C38").Value = wks1.Cells(i, 8).Value
    wks3.Range("C40").Value = wks1.Cells(i, 9).Value
    wks3.Range("C42").Value = wks1.Cells(i, 10).Value
    wks3.Range("D45").Value = wks1.Cells(i, 11).Value

    // Save temporary working sheet as PDF
    wks3.Range("A1:L48").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ThisWorkbook.Path & "\pdf\" & wks1.Cells(i - 1, 1).Value & "-" & wks1.Cells(i, 1).Value

    // Delete temporary working sheet after PDF is saved
    Application.DisplayAlerts = False
    wks3.Delete
    Application.DisplayAlerts = True

    wks1.Activate

Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...