Swede1975
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем доброго здоровья и исполнения желаний! Прошу помочь с реализацией макроса. Я инвалид, отсутствует возможность запоминать происходящее. Поэтому вынужден постоянно вести дневник. Дневник веду в OpenOffice Calc. Когда-то еще на MS Excel сделал себе удобный макрос "NextDay": нажимаешь кнопку Next и в строке, где находится курсор, вставляется жирная шапка заголовка дня, а левые столбцы со следующей строки заполняются парами "дата-день". Сейчас бьюсь над подобным в Calc'е. Соорудил следующее: Sub CellProcessing(oCell) ActSheet = ThisComponent.CurrentController.ActiveSheet 'определить активный лист col = oCell.getRangeAddress().StartColumn 'первый столбец выделенной области row = oCell.getRangeAddress().StartRow 'первая строка выделенной области FirstColumnCell = ActSheet.GetCellByPosition(1,row) 'ячейка в первом столбце листа на первой строке выделенной области txt = FirstColumnCell.getFormula() 'содержимое этой ячейки If txt = "" Then 'если ячейка пустая, то R = row ' R - обозначается текущая строка. Found = False ' Found - признак того, что строка с предыдущей датой найдена. Do While Not Found ' Цикл, пока не найдена строка с предыдущей датой: If ActSheet.GetCellByPosition(R, 1).Value <> "" Then ' Если ячейка в первом столбце не пуста, то PrevDayRow = R ' Запомнить строку с предыдущей датой; Found = True ' Установить флаг, что найдена строка с предыдущей датой; Exit Do ' Выйти из цикла. Else ' Если текущая ячейка пуста, то Found = False ' Флаг, что найдена строка с предыдущей датой - не устанавливать; R = R - 1 ' Уменьшить номер текущей строки на 1; End If ' Конец блока Если. Loop ' К началу цикла. Rw = PrevDayRow + 3 ' Строка начала следующего дня - отступив три строки от последней строки предыдущего дня. NxtDay = "" ' Обозначение следующего дня недели. ActSheet.GetCellByPosition(PrevDayRow, 1).Value = ActSheet.GetCellByPosition(PrevDayRow, 1).Value + 1 PrevDay = ActSheet.GetCellByPosition(PrevDayRow, 2).Value ' Считать предыдущий день недели. If PrevDay = "Пн" Then NxtDay = "Вт" ' Тупо выбрать следующий день недели. If PrevDay = "Вт" Then NxtDay = "Ср" ' If PrevDay = "Ср" Then NxtDay = "Чт" ' If PrevDay = "Чт" Then NxtDay = "Пт" ' If PrevDay = "Пт" Then NxtDay = "Сб" ' If PrevDay = "Сб" Then NxtDay = "Вс" ' If PrevDay = "Вс" Then NxtDay = "Пн" ' ActSheet.GetCellByPosition(Rw, 1).Value = "Дата" ' ! ActSheet.GetCellByPosition(Rw, 2).Value = "День" ' ! ActSheet.GetCellByPosition(Rw, 3).Value = "Время" ' ! ActSheet.GetCellByPosition(Rw, 4).Value = "Запись" ' !Заполнить строку заголовка. ActSheet.GetCellByPosition(Rw, 5).Value = "Сохр" ' ! ActSheet.GetCellByPosition(Rw, 6).Value = "Вып." ' ! ActSheet.GetCellByPosition(Rw, 7).Value = "Планы-Заметки" ' ! ActSheet.GetCellByPosition(Rw, 8).Value = "Резюме" ' ! ActSheet.GetCellByPosition(Rw, 9).Value = "Сохр" ' ! 'ActiveSheet.GetCellByPosition(Rw, 1).HorizontalAlignment = xlCenter ' Выровнять строку заголовка по центру. 'ActiveSheet.GetCellByPosition(Rw, 2).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 3).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 4).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 5).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 6).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 7).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 8).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 9).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 10).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 11).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 12).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 13).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 14).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 15).HorizontalAlignment = xlCenter 'ActiveSheet.GetCellByPosition(Rw, 1).WrapText = False ' Отменить перенос по словам в строке заголовка. 'ActiveSheet.GetCellByPosition(Rw, 2).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 3).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 4).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 5).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 6).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 7).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 8).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 9).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 10).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 11).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 12).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 13).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 14).WrapText = False 'ActiveSheet.GetCellByPosition(Rw, 15).WrapText = False 'Range(ActiveSheet.GetCellByPosition(Rw, 1), ActiveSheet.GetCellByPosition(Rw, 15)).WrapText = False ' Запретить писать заголовок в две строки. Rw = Rw + 1 ' Перейти к следующей строке после заголовка. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. Rw = Rw + 1 ' Перейти к следующей строке. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. Rw = Rw + 1 ' Перейти к следующей строке. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. Rw = Rw + 1 ' Перейти к следующей строке после заголовка. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. Rw = Rw + 1 ' Перейти к следующей строке. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. Rw = Rw + 1 ' Перейти к следующей строке. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. Rw = Rw + 1 ' Перейти к следующей строке. ActSheet.GetCellByPosition(Rw, 1).Value = NextDate ' Вставить следующую дату. ActSheet.GetCellByPosition(Rw, 2).Value = NxtDay ' Вставить следующий день недели. End If End Sub При запуске на выполнение просто ничего не происходит. Выполняется программа, не выполняется - непонятно. В чем может быть проблема? Помогите, пожалуйста, я в абсолютном тупике... |