Страницы: 1
RSS
Копирование данных с листа на лист и дальнейшая печать страниц
 
Добрый день!

Уважаемые форумчане помогите в следующем вопросе:

Нужно, чтоб при нажатии кнопки "Print" выводилось input cообщение с вопросом о номере ряда клиента который нужен для распечатки, после указания номера ряда со страницы "Card Order" копируется информация соответствующего ряда (нужные столбцы указаны зеленым цветом) и копируется на лист "Info" и после этого дается на печать страницы "Print 1" и "Print 2".

Cпасибо заранее за любую помощь!
С уважением.
 
oggis, проверяйте.
Код
Sub prePrint()
    Sheets("Card Order").Activate
    Dim rowSource As Variant
    [A2].Select
    Set rowSource = Application.InputBox(Prompt:="Select row to print", Title:="Row selection", Type:=8, Default:=Selection.Address)
    Set rowSource = Intersect(rowSource.EntireRow, [B:N])
    If Not rowSource Is Nothing Then
        With Sheets("Info")
            .Range("C2:C11").Value = ""
            .Range("C2").Value = rowSource.Cells(1, 1).Value 'Name:
            .Range("C3").Value = rowSource.Cells(1, 2).Value 'SURNAME
            .Range("C4").Value = rowSource.Cells(1, 3).Value 'PASSPORT
            .Range("C5").Value = rowSource.Cells(1, 6).Value 'Mobile
            .Range("C8").Value = rowSource.Cells(1, 9).Value 'Account
            .Range("C9").Value = rowSource.Cells(1, 10).Value 'Account Class
            .Range("C10").Value = rowSource.Cells(1, 12).Value 'Client Type
            .Range("C11").Value = rowSource.Cells(1, 3).Value 'Client Class
        End With
        Sheets("Print 1").PrintOut
        Sheets("Print 2").PrintOut
    End If
End Sub

То, что листы Print 1 и Print 2 - пустые - так и должно быть, позже заполните?
Изменено: tolstak - 22.08.2017 21:43:53
In GoTo we trust
 
tolstak,cпасибо большое, все работает! Не подскажите, можно ли дать возможность указать несколько рядов или диапазон рядов? И как это реализовать?

Цитата
tolstak написал:
о, что листы Print 1 и Print 2 - пустые - так и должно быть, позже заполните?
да, позже заполню, после добавления привязанных договоров.
Еще раз спасибо!
Изменено: oggis - 22.08.2017 23:59:16
 
oggis, модифицируйте макрос следующим образом:
Код
Sub prePrint()
    Sheets("Card Order").Activate
    Dim rowSource As Variant
    [A2].Select
    Set rowSource = Application.InputBox(Prompt:="Select row to print", Title:="Row selection", Type:=8, Default:=Selection.Address)
    Set rowSource = Intersect(rowSource.EntireRow, [B:N])
    If Not rowSource Is Nothing Then
        For Each rrow In rowSource.Rows
            With Sheets("Info")
                .Range("C2:C11").Value = ""
                .Range("C2").Value = rrow.Cells(1, 1).Value 'Name:
                .Range("C3").Value = rrow.Cells(1, 2).Value 'SURNAME
                .Range("C4").Value = rrow.Cells(1, 3).Value 'PASSPORT
                .Range("C5").Value = rrow.Cells(1, 6).Value 'Mobile
                .Range("C8").Value = rrow.Cells(1, 9).Value 'Account
                .Range("C9").Value = rrow.Cells(1, 10).Value 'Account Class
                .Range("C10").Value = rrow.Cells(1, 12).Value 'Client Type
                .Range("C11").Value = rrow.Cells(1, 3).Value 'Client Class
            End With
            Sheets("Print 1").PrintOut
            Sheets("Print 2").PrintOut
        Next rrow
    End If
End Sub
In GoTo we trust
 
tolstak, cпасибо Вам большое!
 
Здравствуйте еще раз!
Уважаемые форумчане помогите еще раз, надо изменить макрос так, что он не спрашивал ряд на печать, а номер пасспорта и искал точное совпадение на листе "Card Order" в столбце D. И после нахождения копирует данные на лист "Info".

Заранее Вам благодарен!
 
oggis, так?
Код
Sub prePrint()
    Sheets("Card Order").Activate
    Dim rowSource As Range, findRn As Range, firstFindRnAddr As String

    Set findRn = [D:D].Find(What:=Application.InputBox(Prompt:="Type passport data", Title:="Data for print", Type:=2), LookAt:=xlWhole)
    If Not findRn Is Nothing Then
        firstFindRnAddr = findRn.Address
        
        ' Поиск всех совпадений со строкой поиска
  '<<<<< Если нужно печатать выводить только первое совпадение, то закомментировать...
        Do
            If rowSource Is Nothing Then
                Set rowSource = findRn
            Else
                Set rowSource = Union(rowSource, findRn)
            End If
            
            Set findRn = [D:D].FindNext(findRn)
        Loop While Not findRn Is Nothing And findRn.Address <> firstFindRnAddr

        ' Предупреждение о нескольких совпадениях
      '**** Если вывод предупреждения не нужен, то закоментировать...
        If rowSource.Rows.Count > 1 Then
            rowSource.Parent.Activate
            rowSource.Select
            wrn = MsgBox("More then 1 row is found." & vbNewLine & "Continue to print?", vbYesNo + vbInformation, "Warning")
            If wrn <> vbYes Then Exit Sub
        End If
      '**** до этой строки
      
  '<<<<< до этой строки
  
        Set rowSource = Intersect(rowSource.EntireRow, [B:N])
        If Not rowSource Is Nothing Then
            For Each rrow In findRn.Rows
                With Sheets("Info")
                    .Range("C2:C11").Value = ""
                    .Range("C2").Value = rrow.Cells(1, 1).Value 'Name:
                    .Range("C3").Value = rrow.Cells(1, 2).Value 'SURNAME
                    .Range("C4").Value = rrow.Cells(1, 3).Value 'PASSPORT
                    .Range("C5").Value = rrow.Cells(1, 6).Value 'Mobile
                    .Range("C8").Value = rrow.Cells(1, 9).Value 'Account
                    .Range("C9").Value = rrow.Cells(1, 10).Value 'Account Class
                    .Range("C10").Value = rrow.Cells(1, 12).Value 'Client Type
                    .Range("C11").Value = rrow.Cells(1, 3).Value 'Client Class
                End With
                Sheets("Print 1").PrintOut
                Sheets("Print 2").PrintOut
            Next rrow
        End If
    Else
        MsgBox "Nothing found", vbCritical, "No data"
    End If
End Sub

Ищет полное соответствие или совпадение по маске - как в поиске: "?" - для одного любого символа, "*" - для любого кол-ва любых символов.
Т.е. ввод "78 12461785" - выдаст строки 5,6; "7? 12461785" - строки 2-6; "7? 124*" - строки 2-6 и т.д.
Если нужно вывести только первую строку - закомментируйте соответствующие строки в коде.
Изменено: tolstak - 25.08.2017 14:57:46
In GoTo we trust
 
tolstak,так, только макрос вроде подставляет не правильно. Н-р вместо Имени вставляется номер паспорта, вместо паспорта Application Number  
 
oggis, точно, перемудрил с номерами столбцов :) Тогда вот такой кусок кода вставки:
Код
Set rowSource = Intersect(rowSource.EntireRow, [B:N])
        If Not rowSource Is Nothing Then
            For Each rrow In findRn.EntireRow.Rows
                With Sheets("Info")
                    .Range("C2:C11").Value = ""
                    .Range("C2").Value = rrow.Cells(1, 2).Value 'Name:
                    .Range("C3").Value = rrow.Cells(1, 3).Value 'SURNAME
                    .Range("C4").Value = rrow.Cells(1, 4).Value 'PASSPORT
                    .Range("C5").Value = rrow.Cells(1, 7).Value 'Mobile
                    .Range("C8").Value = rrow.Cells(1, 10).Value 'Account
                    .Range("C9").Value = rrow.Cells(1, 11).Value 'Account Class
                    .Range("C10").Value = rrow.Cells(1, 13).Value 'Client Type
                    .Range("C11").Value = rrow.Cells(1, 14).Value 'Client Class
                End With
                Sheets("Print 1").PrintOut
                Sheets("Print 2").PrintOut
            Next rrow
        End If
Изменено: tolstak - 25.08.2017 17:16:16
In GoTo we trust
 
tolstak, огромное Вам спасибо!
Страницы: 1
Наверх