Печать листов из формы

Автор Amator, 22 апреля 2014, 14:59

Amator

Здравствуйте. Необходимо в данном макросе изменить условие.В ListBox1 выводить листы  в которых ячейка А1="НАРЯД...". Для печати выбранного листа нужно вказать диапазоны (как на кнопках).А из листа "АКТ" подтянуть страницу соответствующую выбранному листу (Если лист"11" - из листа "АКТ" диапазон А1:М45)  (Если лист"22" - из листа "АКТ" диапазон А46:М90) и т.д.  Мне это не под силу .Если не сложно - помогите!

[вложение удалено администратором]

Администратор

Amator, большие задачи не рассматриваются на форуме.
Форум создан для обсуждения небольших вопросов.

Разбивайте Вашу задачу на части и создавайте тему по этой части.

Amator

 Как изменить условие.В ListBox1 выводить листы  в которых ячейка А1="НАРЯД..."

Администратор

Private Sub CommandButton1_Click()
   
    Dim shMy As Excel.Worksheet
   
   
    For Each shMy In Worksheets
        If shMy.Range("A1").Value = "НАРЯД" Then
            Me.ListBox1.AddItem shMy.Name
        End If
    Next shMy
   
End Sub

Amator

Спасибо! А еще подскажите как в этот код прописать диапазон для печати (А1:Р35)?
Private Sub CommandButton2_Click()
Dim iloop As Integer
For iloop = 1 To ListBox1.ListCount
If ListBox1.Selected(iloop - 1) = True Then
   Sheets(ListBox1.List(iloop - 1, 0)).PrintOut Copies:=TextBox1.Value
      ListBox1.Selected(iloop - 1) = False
End If
Next
Unload Me
End Sub

Администратор

Amator, метод "PrintOut" есть у нескольких объектов. Чтобы посмотреть, у каких объектов есть метод "PrintOut", в VBA, в справке используйте для поиска слово "PrintOut". Вы увидите, что "PrintOut" есть у нескольких объектов, например у Workbook, Worksheets.

Попробуйте использовать метод "PrintOut" для объекта "Range", например:

Sub Макрос1()

    'Распечатка ячейки "A1" из первого листа в одном экземпляре.
    Worksheets(1).Range("A1").PrintOut Copies:=1
   
End Sub

Amator

Здравствуйте! С Вашей помощью , с двумя первыми заданиями я справился.Как из листа "АКТ" подтянуть соответствующую страницу .Задумка такова:     если имя выбранного листа в  ListBox1 = ячейке М20 листа "АКТ" то по нажатию CommandButton4 печатать именованный диапазон (Акт_1).
        если имя выбранного листа в  ListBox1 = ячейке М65 листа "АКТ" то по нажатию CommandButton4 печатать именованный диапазон (Акт_2).  Как это реализовать?


[вложение удалено администратором]

Администратор

Amator, а если пользователь выбрал в ListBox два флажка и оба соответствуют Вашим условиям, что тогда печатать?

Amator


Администратор

Макрос не тестировал, поэтому может быть какая-нибудь ошибка.

Private Sub CommandButton4_Click()
   
    Dim shAkt As Excel.Worksheet
    Dim i As Long
   
   
    'VBA-наиманование нужного листа, чтобы было удобно делать макрос.
    Set shAkt = Worksheets("АКТ")
   
    'Просмотр всех строк в листбоксе.
    For i = 0 To Me.ListBox1.ListCount - 1 Step 1
        'Если в строке есть флажок.
        If Me.ListBox1.Selected(i) = True Then
            If Me.ListBox1.List(i, 0) = shAkt.Range("M20").Value Then
                shAkt.Range("Акт_1").PrintOut
            ElseIf Me.ListBox1.List(i, 0) = shAkt.Range("M65").Value Then
                shAkt.Range("Акт_2").PrintOut
            End If
        End If
    Next i
   
End Sub

Amator

Не работает.

[вложение удалено администратором]

Администратор

Amator, на этом Форуме не рассматриваются большие задания.
Чтобы проверить работу макроса, мне надо изучить Ваш файл и макросы - это сложно.

Amator

А как протестировать макрос  Private Sub CommandButton4_Click() на работоспособность?

Администратор

Amator, создайте новый Excel-файл, сделайте в нём форму, на которой будут только необходимые элементы управления, выложите этот файл на Форуме.

Amator

Создал файл...

[вложение удалено администратором]