Аггрегация папки с файлами в итоговую таблицу

Автор luu, 5 декабря 2019, 11:16

0 Пользователи и 1 гость просматривают эту тему.

luu

Еще раз спасибо за помощь!
Немного подогнал, "причесал" кмк получившуюся конструкцию. Т.к. с форматом итоговой таблицы и самих карточек еще до конца не определились - добавил переменных, для удобства использования макроса при изменении положения ячеек.
На данный момент имеет такой вид:
Sub Aggr
GlobalScope.BasicLibraries.LoadLibrary("Tools")
Dim rezCol, rezRow As Integer 'координаты первой ячейки с указанием номера карточки в итоговой таблице (номер столбца, номер строки)
' В первой колонке справа от ячейки с номерами карточек будет контроль наличия файла (0,1)
' Копирование данных из файлов карточек будет начинаться со второй колонки от номера карточки (начиная с показателя 1)
Dim cardCol, cardRow As Integer 'координаты первой ячейки с данными в карточке
Dim QuantInd As Integer 'количество показателей для перебора циклом
   
    Dim FolderName As String
    Dim prop(0) as new com.sun.star.beans.PropertyValue
    oASheet = Thiscomponent.Sheets(1)
   
    rezCol = 1
    rezRow = 2
    cardCol = 1
    cardRow = 1
    QuantInd = 57
    prop(0).Name="Hidden"
    prop(0).Value= true
   
FolderName = convertFromURL(DirectoryNameoutofPath(ThisComponent.URL, "/") & "/Data/"
    Print FolderName
   
    While oASheet.getCellByPosition(rezCol, rezRow).String <> ""
    If  FileExists(FolderName & oASheet.getCellByPosition(rezCol, rezRow).String & ".ods" ) Then
            oDoc2 = StarDesktop.loadComponentFromUrl(convertToURL(FolderName & oASheet.getCellByPosition(rezCol, rezRow).String & ".ods"), "_blank", 0, Prop())
For i = 0 To QuantInd
oASheet.getCellByPosition(i+rezCol+2,rezRow).String = oDoc2.Sheets(0).getCellByPosition(cardCol, cardRow+i).String
Next
oASheet.getCellByPosition(rezCol+1,rezRow).String = "ok"
oDoc2.Close(true)
Else
oASheet.getCellByPosition(rezCol+1,rezRow).String = "Нет файла"
End if
        rezRow = rezRow + 1
    Wend
End Sub


Сейчас возник еще один вопрос. Так как при большом количестве файлов макрос работает достаточно долго, иногда есть необходимость его не запускать (а по умолчанию - запускать при открытии файла).
Как показывать диалог с кнопкой "ОК" мне понятно. А как показать диалог с несколькими кнопками и, соответственно, при нажатии на них обрабатывать эти события?

Т.е. можно ли при запуске файла открывать диалог с вопросом "Запускать макрос?" и двумя вариантами "Да" и "Нет"?

rami

Можно так:
Sub Main
Dim n%, ans$
ans="Была нажата кнопка "
n=MsgBox("Запускать макрос?", 4, "Заголовок")
If n=7 Then ans=ans & "НЕТ" Else If n=6 Then ans=ans & "ДА"
MsgBox(ans, 4, "Ответ")
End Sub