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

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

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

Amator, да была ошибка. Обычно VBA сам приводит числа к одному виду и сравнивает, но почему-то с ListBox это не работает.

Правильный код такой:

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
            'CStr - для перевода чисел в тип данных "Текст",
                'чтобы можно было сравнить текст в ListBox,
                'в котором числа представлены текстом.
            If Me.ListBox1.List(i, 0) = CStr(shAkt.Range("M20").Value) Then
                shAkt.Range("Акт_1").PrintOut Copies:=TextBox1.Value
            ElseIf Me.ListBox1.List(i, 0) = CStr(shAkt.Range("M65").Value) Then
                shAkt.Range("Акт_2").PrintOut Copies:=TextBox1.Value
            End If
        End If
    Next i

End Sub

Amator

Спасибо ! И еще вопрос : можно- ли этот код написать с цыклом, так как в листе "АКТ" есть 15 именованных диапазонов (Акт_1  по  Акт_15). Ячека для условия М20 ;М65 (шаг 45).

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

В коде, в строке:
    For i = 20 To 65 Step 45
после "To" укажите номер последней строки, до которой должен макрос анализировать лист "АКТ".

Макрос
Private Sub CommandButton4_Click()

    Dim shAkt As Excel.Worksheet
    Dim i As Long, j As Long, k As Long
   
   
    'VBA-наиманование нужного листа, чтобы было удобно делать макрос.
    Set shAkt = Worksheets("АКТ")
       
    'В цикле с "i" движение по листу "АКТ" со строки 20, с шагом 45.
    For i = 20 To 65 Step 45
       
        'Переменная "k" для перехода по диапазонам "Акт_".
        k = k + 1
       
        'Просмотр всех строк в листбоксе.
        For j = 0 To Me.ListBox1.ListCount - 1 Step 1
            'Если в строке есть флажок.
            If Me.ListBox1.Selected(j) = True Then
                'CStr - для перевода чисел в тип данных "Текст",
                    'чтобы можно было сравнить текст в ListBox,
                    'в котором числа представлены текстом.
                If Me.ListBox1.List(j, 0) = CStr(shAkt.Range("M" & i).Value) Then
                    shAkt.Range("Акт_" & k).PrintOut Copies:=TextBox1.Value
                End If
            End If
        Next j
       
    Next i

End Sub
[свернуть]

Amator

Спасибо, все работает.