Методы автоматизации при работе в MS Excel. Синявская Г.А. - 56 стр.

UptoLike

Составители: 

56
Программный код процедуры:
Private Sub выбор_Click() Процедура обработки нажатия кнопки «выбор»
Dim numidx As Long Переменной присваивается тип «длинное целое»
numidx = Spisok.ListCount Количество элементов в списке записывается в
‘numidx
J = 0 Организация счетчика количества строк табл.части накладной
For i = 0 To numidx - 1
If Spisok.Selected(i) Then Если элемент списка отмечен, то выполняется блок
нижеследующих операторов. В противном случае
увеличивается счетчик цикла и проверяется сле-
дующий элемент
If J > 1 Then ' Если отмеченных элементов в списке больше двух, то
'табличную часть накладной надо увеличивать для каждого
следующего элемента
Sheets("Накладная").Select Переход на лист Накладная
ActiveSheet.Range("A" & (J + 14)).Select Выделение ячеек А16, А17 и
т.д. в цикле на листе Накладная
Selection.EntireRow.Insert 'добавление строки
' Выделение ячеек, содержащих формулы и форматы:
ActiveSheet.Range("B" & (J + 13) & ":L" & (J + 13)).Select
' Копирование с помощью маркера заполнения выделенных ячеек:
Selection.AutoFill Destination:=ActiveSheet.Range("B" & (J + 13) _
& ":L" & (J + 14)), Type:=xlFillDefault
End If
' Запись реквизитов товара в очередную строку листа Накладная:
Sheets("Накладная").Range("b" & (J + 14)) = Spisok.List(i, 1) Наименование
Sheets("Накладная").Range("f" & (J + 14)) = Spisok.List(i, 2) Ед.изм.
Sheets("Накладная").Range("j" & (J + 14)) = Spisok.List(i, 3) Цена
J = J + 1 Увеличение номера строки таблицы
End If
Next I Переход к проверке следующего элемента списка или конец цикла
Sheets("Товары").Select Активизация листа Товары
ActiveSheet.Range("B3").Select Переход в ячейку, содержащую данные
' Сортировка списка товаров по коду товара:
Selection.Sort Key1:=ActiveSheet.Range("a2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Sheets("Накладная").Select Активизация листа Накладная
End Sub
Итак, обе процедуры обработки сформированы.
Если в списке будет выбрано больше двух элементов, то табличная часть
увеличится и использовать « испорченный» бланк будет неудобно. Новую на-
кладную желательно создавать при условии, что в табличной части бланка на-
кладной всего две строки.
     Программный код процедуры:

    Private Sub выбор_Click() ‘Процедура обработки нажатия кнопки «выбор»
    Dim numidx As Long          ‘Переменной присваивается тип «длинное целое»
    numidx = Spisok.ListCount ‘Количество элементов в списке записывается в
                             ‘numidx
    J=0              ‘Организация счетчика количества строк табл.части накладной
    For i = 0 To numidx - 1
    If Spisok.Selected(i) Then ‘Если элемент списка отмечен, то выполняется блок
            ‘                      нижеследующих операторов. В противном случае
                                  ‘увеличивается счетчик цикла и проверяется сле-
                                  ‘дующий элемент
       If J > 1 Then     ' Если отмеченных элементов в списке больше двух, то
                         'табличную часть накладной надо увеличивать для каждого
                          ‘следующего элемента

          Sheets("Накладная").Select ‘Переход на лист Накладная
          ActiveSheet.Range("A" & (J + 14)).Select ‘Выделение ячеек А16, А17 и
                                             ‘       т.д. в цикле на листе Накладная
          Selection.EntireRow.Insert 'добавление строки
                  ' Выделение ячеек, содержащих формулы и форматы:
          ActiveSheet.Range("B" & (J + 13) & ":L" & (J + 13)).Select
                  ' Копирование с помощью маркера заполнения выделенных ячеек:
          Selection.AutoFill Destination:=ActiveSheet.Range("B" & (J + 13) _
             & ":L" & (J + 14)), Type:=xlFillDefault
      End If
             ' Запись реквизитов товара в очередную строку листа Накладная:
      Sheets("Накладная").Range("b" & (J + 14)) = Spisok.List(i, 1) ‘Наименование
      Sheets("Накладная").Range("f" & (J + 14)) = Spisok.List(i, 2)            ‘Ед.изм.
      Sheets("Накладная").Range("j" & (J + 14)) = Spisok.List(i, 3)            ‘Цена
      J=J+1               ‘Увеличение номера строки таблицы
    End If
    Next I        ‘Переход к проверке следующего элемента списка или конец цикла
    Sheets("Товары").Select                ‘Активизация листа Товары
    ActiveSheet.Range("B3").Select         ‘Переход в ячейку, содержащую данные
                 ' Сортировка списка товаров по коду товара:
    Selection.Sort Key1:=ActiveSheet.Range("a2"), Order1:=xlAscending, _
          Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom
    Sheets("Накладная").Select              ‘Активизация листа Накладная
    End Sub

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



                                          56