Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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  
 
При запуске на выполнение просто ничего не происходит. Выполняется программа, не выполняется - непонятно. В чем может быть проблема?
Помогите, пожалуйста, я в абсолютном тупике...
 

Всего записей: 2 | Зарегистр. 03-11-2015 | Отправлено: 12:39 03-11-2015
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru