
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
14.02.2006, 15:11:17
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
Есть функция (не имеющая смысла, главное механизм): Код: plaintext 1. 2. 3. 4. 5. Проблема в том что свойство Locked при вызове функции в ячейке не устанавливается в True (остается без изменений). В чем может быть дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 15:36:18
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
(gl_Password) - что это? если название листа то Код: plaintext если пароль то Код: plaintext вобщем у тебя лист не распароливается и как следствие не меняется свойство ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 15:46:44
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
gl_Password - глобальная переменная, в которой зашит пароль Код: plaintext Видимо в другом дело... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 16:07:35
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
tokmЕсть функция (не имеющая смысла, главное механизм): Код: plaintext 1. 2. 3. 4. 5. Проблема в том что свойство Locked при вызове функции в ячейке не устанавливается в True (остается без изменений). В чем может быть дело? 80 % ошибок это синтаксис Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 16:15:55
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
С синтаксисом тоже все в порядке - пример несуществующий... Копировать получилось бы дольше. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 16:24:43
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
tokmgl_Password - глобальная переменная, в которой зашит пароль Код: plaintext Видимо в другом дело... Вообще-то, насколько я изучил справку: 1. ActiveWorksheet.UnProtect(gl_Password) возвращает объект рабочий лист, а не True 2. а переменная gl_Password должна содержать пароль, а не True Скорее всего ты наводишь курсор на gl_Password и тебе показывается его значение, а не результат операции ActiveWorksheet.UnProtect. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 21:39:50
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
k-nikeВообще-то, насколько я изучил справку: 1. ActiveWorksheet.UnProtect(gl_Password) возвращает объект рабочий лист, а не True 2. а переменная gl_Password должна содержать пароль, а не True Скорее всего ты наводишь курсор на gl_Password и тебе показывается его значение, а не результат операции ActiveWorksheet.UnProtect. 1. Нет. Unprotect возвращает: • True - разблокировать лист удалось • False - разблокировать лист не удалось • Null - лист не защищен 2. Курсор никуда не навожу - все делаю через Stop и окно Immediate или Watch. Сделал функцию MakeLocked() и процедуру MakeLockedMacro(): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В результате при вызове функции в ячейке не происходит даже разблокирования (Unprotect возвращает False). Макрос работает прекрасно. В чем может быть дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2006, 23:15:13
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
tokmВ результате при вызове функции в ячейке не происходит даже разблокирования (Unprotect возвращает False). Макрос работает прекрасно. В чем может быть дело? Вот чего я не могу понять никак, почему ты говоришь о разблокировании, а делаешь блокирование? И вообще, все прекрасно работает. Скорее всего у тебя ошибка в имени переменной gl_Password. Поставь первой строкой в каждом модуле Option Explicit - VBA сам покажет где есть использование необъявленной переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 07:33:40
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
White Owl Вот чего я не могу понять никак, почему ты говоришь о разблокировании, а делаешь блокирование? См. последний код - снимаю защиту с листа, устанавливаю защищать текущую ячейку, воосстанавлию защиту. White Owl И вообще, все прекрасно работает. Все - это сильно сказано :) Меня интересует почему не работает пример - см. последний код в случае с функцией. С процедурой MakeLockedMacro() - да, работает, а с функцией - нет. White OwlСкорее всего у тебя ошибка в имени переменной gl_Password. Поставь первой строкой в каждом модуле Option Explicit - VBA сам покажет где есть использование необъявленной переменной. Опять же см. последний пример: gl_Password устанавливаю прямо в тексте функции/процедуры, текст которых не отличается ничем. При этом (повторюсь) при вызове функции сниятие защиты не происходит: ActiveSheet.Unprotect (gl_Password) - возвращает False, в процедура тот же метод возвращает True... Поэтому до сих пор не ясно как быть в такой ситуации - критично снимать защиту листа и менять свойства ячейки именно при вызове в ней функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 08:49:44
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. прописал в модуле, потом в модуле листа, всё работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 10:05:16
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
vkodor Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. прописал в модуле, потом в модуле листа, всё работает. Работает функция MakeLocked() или процедура d()? Мне нужно чтобы функция меняла свойства ячейки, из которой она была вызвана, на защищенном листе (конкретно - "Защищаемая ячейка"). В вашем примере ничего происходить не будет: функцией значение "Защищаемая ячейка" с True на False поменять нельзя... Так как без снятия защиты листа в защищаемую ячейку функцию не записать. Критично чтобы снятие защиты происходило без участия пользователя. Непонятно наверно обясняю, пардон. Итак сценарий такой: 1. Есть лист, в одной из ячеек галочка "Защищаемая ячейка" снята. 2. Защищаю лист, пароль "drowssap". 3. См. выше пример MakeLocked(). 4. В незащищаемой ячейке пишу "=MakeLocked()". Ожидаемый эффект: галочка "Защищаемая ячейка" для данной ячейки должна быть установлена. Но этого не происходит. На самом деле все вроде как по уму: не очень корректная ситуация, если вписали формулу в ячейку а в результате выполнения этой функции мы не сможем формулу поменять. Но нужно именно это... Как можно обойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 10:50:33
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. работает Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. работает Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 11:00:38
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
vkodorработает Код: plaintext 1. 2. 3. 4. 5. 6. 7. Работает = после вызове функции "=MakeLocked()" в незащищенной ячейке на защищенном листе она становится защищенной? У меня не работает (MS Office 2003). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 11:01:52
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
tokmНа самом деле все вроде как по уму: не очень корректная ситуация, если вписали формулу в ячейку а в результате выполнения этой функции мы не сможем формулу поменять. Но нужно именно это... Как можно обойти? Непонятно каким образом вызывается эта функция MakeLocked() из ячейки!? Если редактированием самой ячейки, тогда смысл в ней? Может тогда лучше использовать событие Worksheets_Change? Опишите поподробнее смысл всего этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 11:11:10
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
k-nike tokmНа самом деле все вроде как по уму: не очень корректная ситуация, если вписали формулу в ячейку а в результате выполнения этой функции мы не сможем формулу поменять. Но нужно именно это... Как можно обойти? Непонятно каким образом вызывается эта функция MakeLocked() из ячейки!? Если редактированием самой ячейки, тогда смысл в ней? Может тогда лучше использовать событие Worksheets_Change? Опишите поподробнее смысл всего этого. Да редактированием ячейки. Есть функция которая рассчитывает определенные значения статьи (берется из таблицы SQL Server). При этом значение из таблицы может быть рассчитано руками или берется из справочника. Если берется из справочника, то нужно закрывать данную ячейку от редактирования (откуда берется значение определяется при вычисления значения внутри функции). При полном пересчете листа защиту реализовал, теперь хочется сделать совсем красиво - при редактировании отдельных ячеек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 11:50:46
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
Одним смыслом не обошелся)) Не понятно какая функция, откуда она вызывается, какие значения она берет из таблицы, какие из SQL и т.п... Еще подробнее можно? Может вашу проблему можно решить более простым путем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 12:02:48
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
k-nikeОдним смыслом не обошелся)) Не понятно какая функция, откуда она вызывается, какие значения она берет из таблицы, какие из SQL и т.п... Еще подробнее можно? Может вашу проблему можно решить более простым путем? Думаю что более простого пути нет - так как именно это и есть требование заказчика: защищать ячейки в которых значение функции getSValue() рассчитывается на основании справочника (то есть добавить "побочный эффект" в функцию - помимо возвращения значения, защищать ячейки по условию). Текст функции приводить не имеет смысла - она достаточно объемная и работает корректно кроме как раз момента который вынесен в примере в MakeLocked(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 13:27:58
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
Вы меня не так поняли. Просто я так и не понял логики работы. Ну и ладно. Иными словами, некая функция при пересчете в зависимости от данных (справочные или нет) должна сама себя защитить или не защитить? Если я все правильно понял, почему бы не воспользоваться событием Worksheet_Calculate() или Worksheet_Change() и не защищать ячейки этим событием? И не надо городить огород с этой функцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 14:17:22
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
k-nikeВы меня не так поняли. Просто я так и не понял логики работы. Ну и ладно. Иными словами, некая функция при пересчете в зависимости от данных (справочные или нет) должна сама себя защитить или не защитить? Если я все правильно понял, почему бы не воспользоваться событием Worksheet_Calculate() или Worksheet_Change() и не защищать ячейки этим событием? И не надо городить огород с этой функцией. Логику работы вы поняли правильно. Спасибо! Буде делать через события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 18:43:44
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
Иными словами, некая функция при пересчете в зависимости от данных (справочные или нет) должна сама себя защитить или не защитить? Хорошая постановка задачи, "сама себя защитить". А если "сама себя разрешить", то первая же клавиша нажатая юзером сотрет эту формулу к чертовой матери. Об этом вы не задумывались? Кстати, раз пошла такая пьянка, пусть крыша едет дальше :) Вы в своей супер-пупер формуле действительно используете ActiveCell или это только для примера было? ActiveCell он знаете ли меняется, поэтому в функции его использовать нельзя совершенного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 19:59:20
|
|||
|---|---|---|---|
|
|||
Блокировка ячеек в функции |
|||
|
#18+
White OwlХорошая постановка задачи, "сама себя защитить". А если "сама себя разрешить", то первая же клавиша нажатая юзером сотрет эту формулу к чертовой матери. Об этом вы не задумывались? По-моему если ячейка на защищенном листе защищена, то стереть формулу без снятия защиты листа не удастся. Если я не прав - поправьте. White Owl] Кстати, раз пошла такая пьянка, пусть крыша едет дальше :) Вы в своей супер-пупер формуле действительно используете ActiveCell или это только для примера было? ActiveCell он знаете ли меняется, поэтому в функции его использовать нельзя совершенного. С этим согласен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 22:18:06
|
|||
|---|---|---|---|
Блокировка ячеек в функции |
|||
|
#18+
tokm White OwlХорошая постановка задачи, "сама себя защитить". А если "сама себя разрешить", то первая же клавиша нажатая юзером сотрет эту формулу к чертовой матери. Об этом вы не задумывались? По-моему если ячейка на защищенном листе защищена, то стереть формулу без снятия защиты листа не удастся. Если я не прав - поправьте. Прав. Но тебе же нужно не только защищать ячейки, не так ли? Некоторые ячейки тебе надо разрешать для редактирования. А если ячейка разрешена - формула в ней может (и обязательно будет) стерта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&tablet=1&tid=2185244]: |
0ms |
get settings: |
4ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
65ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 370ms |

| 0 / 0 |
