Страница: 1 |
Вопрос: на листах книги макрос работает по разному, help | Добавлено: 12.12.08 11:38 |
Автор вопроса: ![]() |
Помогите понять в чем причина: с помощью NYTROGENa, спасибо ему, был написан код блокировки ячеек по определенной дате, я попытался его отладить на 2-х листах книги и на одном листе заблокировать положением курсора, чтобы сохранить формулы вне зависимости от наличия защиты листа. Вероятно было бы грамотнее присваивать свойства защищенности определенному диапазону, но пока еще плаваю в этом, поэтому пошел по такому пути. Но суть вопроса в другом: на каждом из листов присутствуют столбцы с несколькими одинаковыми датами, идущими подряд друг за другом, при этом на одном листе блокируются ячейки все ячейки с датой меньше текущей, а на другом блокируется столбец с одной из дат, равной текущей (в частности левый) а второй, третий не блокируется. Мозг закипает, не могу понять вообще с какой стороны подойти. Если есть возможность надоумьте пожалуйста. Спасибо!
Private Sub Workbook_open() Dim ROWS_AMOUNT As Long 'общее количество строк Dim COLUMNS_AMOUNT As Integer 'общее количество колонок Dim theSheet As Worksheet 'рабочий лист Dim todayColumn As Integer 'номер колонки с сегодняшней датой 'запоминаем значения ROWS_AMOUNT = Rows.Count COLUMNS_AMOUNT = Columns.Count 'запоминаем рабочий лист Set theSheet = ThisWorkbook.Worksheets("лист1") 'вычисляем колонку с сегодняшней датой todayColumn = CInt(Application.Evaluate("MATCH(TODAY(), " & theSheet.Name & "!23:23)")) 'разблокируем лист theSheet.Unprotect 'блокируем предыдущие даты Range(theSheet.Cells(1, 1), theSheet.Cells(ROWS_AMOUNT, todayColumn - 1)).Locked = True 'разблокируем сегодняшнюю и последующие даты Range(theSheet.Cells(1, todayColumn), theSheet.Cells(ROWS_AMOUNT, COLUMNS_AMOUNT)).Locked = False 'блокируем лист theSheet.Protect ROWS_AMOUNT = Rows.Count COLUMNS_AMOUNT = Columns.Count 'запоминаем рабочий лист Set theSheet = ThisWorkbook.Worksheets("лист2") 'вычисляем колонку с сегодняшней датой todayColumn = CInt(Application.Evaluate("MATCH(TODAY(), " & theSheet.Name & "!1:1)")) 'разблокируем лист theSheet.Unprotect 'блокируем предыдущие даты Range(theSheet.Cells(1, 1), theSheet.Cells(ROWS_AMOUNT, todayColumn - 1)).Locked = True 'разблокируем сегодняшнюю и последующие даты Range(theSheet.Cells(1, todayColumn), theSheet.Cells(ROWS_AMOUNT, COLUMNS_AMOUNT)).Locked = False 'блокируем лист theSheet.Protect Worksheets("лист1").ScrollArea = "a25:iv33" End Sub |
Ответы | Всего ответов: 10 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #1 | Добавлено: 12.12.08 13:21 |
Сразу вопрос: А в тех столбцах, что не блокируются, даты точно формата даты, а не что-нибудь еще ? |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ICQ: 308-534-060 Вопросов: 20 Ответов: 1860 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 12.12.08 14:44 |
Подойдите со стороны трассировки кода макроса, а там уже станет ясно, в каком именно месте программа не делает то, что нужно. Ставите точки останова (breakpoints), запускаете по F9, затем трассируете пошагово по F8. В промежутках можете смотреть значения переменных или выводить значения выражекний в окне Immediate. Удачи! |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 12 Ответов: 23 |
Профиль | Цитата | #3 | Добавлено: 12.12.08 17:50 |
Немного наоборот, блокируются лишние столбцы с датой равной текущей, а формат столбцов одинаков, "дата". |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #4 | Добавлено: 12.12.08 19:31 |
Можешь выслать пример файла на z_e_s@mail.ru ? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 12 Ответов: 23 |
Профиль | Цитата | #5 | Добавлено: 12.12.08 19:46 |
Теперь только в понедельник. Можно? |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #6 | Добавлено: 12.12.08 20:01 |
Если файл не секретный, можно. ![]() Только дай свой адрес, а то буду на работе, там нет доступа к майлу. ![]() |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 186 |
Профиль | Цитата | #7 | Добавлено: 12.12.08 23:51 |
Да тут я уже ![]()
|
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #8 | Добавлено: 15.12.08 07:12 |
Оооо, автор появился. Сразу понял что, куда и посоветовал как исправить. ![]() |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 12 Ответов: 23 |
Профиль | Цитата | #9 | Добавлено: 15.12.08 11:24 |
Большое спасибо всем за помощь. Подход NYTROGENа к решению проблемы настолько универсален, что нет слов. Просто супер. Спасибо!!!! |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 186 |
Профиль | Цитата | #10 | Добавлено: 15.12.08 16:05 |
Спасибо, стараюсь ![]() |
Страница: 1 |
|