Репликация формы для печати двух копий на одном листе vba

Используя форму в качестве электронного чека и хотите распечатать два экземпляра на одном листе бумаги. Как скопировать форму при печати?

2 ответа

  1. Если я правильно вас понимаю — я не думаю, что есть супер прямой способ сделать это. Вот что я бы рекомендовал…

    Вот способ сделать это, работая в Excel. Я создаю скрытый лист (лист 3 установлен в скрытый), чтобы мои пользователи не видели его. Я использую этот код в кнопке» Печать»:

    Private Sub CommandButton1_Click()
    
        'ALT+Printscreen to screen capture the form
        Application.SendKeys "%{1068}"
    
        'Paste on a hidden sheet
        Sheet3.Paste Destination:=Worksheets("Sheet3").Range("A1")
        Sheet3.Paste Destination:=Worksheets("Sheet3").Range("A6")
    
        'Print hidden sheet.
        Sheet3.PrintOut
    End Sub
    

    Это решает вашу проблему?

  2. Спасибо за помощь. Я не мог использовать предложения-Николас вы полностью получили то, что я собирался-но пошел с этим довольно низким техническим решением, которое работает. Создав «макет» формы на другой электронной таблице, я смог записать значения из элементов управления пользовательской формы в определенные ячейки электронной таблицы, скопировать макет формы ниже и таким образом напечатать два на одной странице-для двух копий квитанции. Вот код, который я использовал:

    Частный Суб PrintCMD_Click()

    ‘Загрузить значения формы в электронную таблицу 2

    Sheet2.Activate
    Range("A1:K16").Select
    
    Range("B3").Value = DateTimeTXT.Value
    Range("B5").Value = StrConv(FirstNameTXT.Value, vbUpperCase)
    Range("C5").Value = StrConv(LastNameTXT.Value, vbUpperCase)
    Range("J5").Value = RelationshipCBO.Value
    Range("B7").Value = PaymentType1CBO.Value
    Range("B9").Value = Ref1TXT.Value
    Range("B11").Value = AmountTXT.Value
    Range("B13").Value = ApplyToCBO.Value
    Range("F7").Value = PaymentType2CBO.Value
    Range("F9").Value = REF2TXT.Value
    Range("F11").Value = Amount2TXT.Value
    Range("F13").Value = ApplyTo2CBO.Value
    Range("F15").Value = TotalAmountTXT.Value
    Range("J7").Value = PatientNumberTXT.Value
    Range("J9").Value = ClinicCBO.Value
    Range("J11").Value = ProviderCBO.Value
    Range("J13").Value = InitialsTXT.Value
    Range("J15").Value = ReceiptTXT.Value
    

    ‘Печать квитанции

    Range("A1:K16").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=9
    Range("A20").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=12
    Range("A1:K35").Select
    Range("K35").Activate
    Application.CutCopyMode = False
    ActiveSheet.PageSetup.PrintArea = "$A
    	

    If I'm understanding you correctly -- I don't think there is a super straight forward way to do this. Here's what I would recommend...

    Here's a way to do it working in Excel. I create a hidden sheet (sheet 3 is set to hidden) so that my users don't see it. I use this code in the "print" button:

    Private Sub CommandButton1_Click()
    
        'ALT+Printscreen to screen capture the form
        Application.SendKeys "%{1068}"
    
        'Paste on a hidden sheet
        Sheet3.Paste Destination:=Worksheets("Sheet3").Range("A1")
        Sheet3.Paste Destination:=Worksheets("Sheet3").Range("A6")
    
        'Print hidden sheet.
        Sheet3.PrintOut
    End Sub
    

    Does that solve your problem?

    Thank you for the help. I wasn't able to use the suggestions--Nicholas you totally got what I was going for--but went with this fairly low-tech solution which works. By creating a "mock" form on another spreadsheet, I was able to write values from the user form controls to specific cells on the spreadsheet, replicate the mock form below, and thus print two on one page--for two copies of the receipt. Here is the code I used:

    Private Sub PrintCMD_Click()

    'Load form values to spreadsheet 2

    Sheet2.Activate
    Range("A1:K16").Select
    
    Range("B3").Value = DateTimeTXT.Value
    Range("B5").Value = StrConv(FirstNameTXT.Value, vbUpperCase)
    Range("C5").Value = StrConv(LastNameTXT.Value, vbUpperCase)
    Range("J5").Value = RelationshipCBO.Value
    Range("B7").Value = PaymentType1CBO.Value
    Range("B9").Value = Ref1TXT.Value
    Range("B11").Value = AmountTXT.Value
    Range("B13").Value = ApplyToCBO.Value
    Range("F7").Value = PaymentType2CBO.Value
    Range("F9").Value = REF2TXT.Value
    Range("F11").Value = Amount2TXT.Value
    Range("F13").Value = ApplyTo2CBO.Value
    Range("F15").Value = TotalAmountTXT.Value
    Range("J7").Value = PatientNumberTXT.Value
    Range("J9").Value = ClinicCBO.Value
    Range("J11").Value = ProviderCBO.Value
    Range("J13").Value = InitialsTXT.Value
    Range("J15").Value = ReceiptTXT.Value
    

    'Print receipt sheet

    Range("A1:K16").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=9
    Range("A20").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=12
    Range("A1:K35").Select
    Range("K35").Activate
    Application.CutCopyMode = False
    ActiveSheet.PageSetup.PrintArea = "$A$1:$K$35"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    

    End Sub

    :$K"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

    Конец Sub