среда, 3 июня 2015 г.

Использование сложной функции If Then со многими ElseIf

Функция if then которая отвечает за выполнение или не выполнение каких либо действий по определенному условию может иметь несколько вложенных операторов Elseif и быть довольно сложной.
Рассмотрим пример из макроса Комплексного отчета - построение файла данные для проводок. В этом файле столбец "Сумма документа" копируется в несколько смежных столбцов, где затем заголовки меняются на соот. цех, а данные не принадлежащие этому цеху удаляются. Рассмотрим как это реализуется программно:

Sub Dell_Cell
'Определяем текущий диапазон
 oSheet = ThisComponent.CurrentController.getActiveSheet()
 myrows=oSheet.getrows
 oCellCursor = oSheet.createCursor()
 oCellCursor.GotoStartOfUsedArea(True)
 oCellCursor.GotoEndOfUsedArea(True)
 Start_Row = oCellCursor.getRangeAddress.StartRow
 End_Row = oCellCursor.getRangeAddress.EndRow + 1
 For i=End_Row To Start_Row step -1
'Определяем что содержит ячейка с названием цеха в столбце 10
  text1 = osheet.getcellbyposition(9,i).String
'Если она содержит Производство, тогда в этой строчке удаляем данные из ячеек не 
'принадлежащих производству (другие цеха)
   If Left(text1,12) = "Производство" Then
    osheet.getcellbyposition(3,i).String = ""
    osheet.getcellbyposition(5,i).String = ""
    osheet.getcellbyposition(6,i).String = ""
    osheet.getcellbyposition(7,i).String = ""
    'Если она содержит Пекарня, тогда в этой строчке удаляем данные из ячеек не 
'принадлежащих Пекарне(другие цеха)
      ElseIf Left(text1,17) = "Пекарня" Then
    osheet.getcellbyposition(4,i).String = ""
    osheet.getcellbyposition(5,i).String = ""
    osheet.getcellbyposition(6,i).String = ""
    osheet.getcellbyposition(7,i).String = ""
'И так далее...
          ElseIf Left(text1,8) = "Столовая" Then
    osheet.getcellbyposition(3,i).String = ""
    osheet.getcellbyposition(4,i).String = ""
    osheet.getcellbyposition(6,i).String = ""
    osheet.getcellbyposition(7,i).String = ""
     ElseIf Left(text1,18) = "Цех фасовки овощей" Then
     osheet.getcellbyposition(3,i).String = ""
    osheet.getcellbyposition(4,i).String = ""
    osheet.getcellbyposition(5,i).String = ""
    osheet.getcellbyposition(7,i).String = ""
         ElseIf Left(text1,8) = "-" Then
    osheet.getcellbyposition(3,i).String = ""
    osheet.getcellbyposition(4,i).String = ""
    osheet.getcellbyposition(5,i).String = ""
        osheet.getcellbyposition(6,i).String = ""
   End if   
   Next i
   End Sub

Задача: Откройте необработанный файл реестр документов по МХ - скопируйте столбец сумма в два столбцы правее (оставив предварительно пустые столбцы). Откорректируйте приведенный выше макрос по ваш файл и сделайте обработку на цеха Производства, Пекарни, Столовой.

Комментариев нет:

Отправить комментарий