Страницы: 1
RSS
Не работает EnableControl 21 предложенная ZVI
 
Добрый всем вечер!  
 
Нашёл на данном сайте нужный код (см. http://www.planetaexcel.ru/forum.php?thread_id=4577).  
Но он не работает ... выдаёт ошибку на EnableControl 21.    
 
Помогите разобраться в проблеме. Пожалуйста.    
 
С уважением,
 
ПС: я сослался на ZVI чтобы определить источник данных. Ничего лишнего прошу не думать :), т.к. косяк процентов на 100 у меня!  
 
С уважением,
 
а что это за метод (свойство, процедура) - EnableControl?  
в каком Excel'е ?  
у меня в 2003-м такого нет.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=30.03.2011 10:47}{thema=}{post}а что это за метод (свойство, процедура) - EnableControl?  
в каком Excel'е ?  
у меня в 2003-м такого нет.{/post}{/quote}  
 
Добрый вечер, ikki  
 
да вот я и не знаю ... я догадываюсь, что это отключает определённые клавиши. Смотрите файл.
 
{quote}{login=Пахом}{date=30.03.2011 10:53}{thema=Re: }  
да вот я и не знаю ... я догадываюсь, что это отключает определённые клавиши. Смотрите файл.{/post}{/quote}  
клавиши клавиатуры отключает Application.OnKey с пустой строкой в качестве второго аргумента.  
EnableControl, по видимому, должен отключать соответствующие пункты в интерфейсе. причем в любых местах - в меню, на панелях, в контекстных меню. но в 2003-м такого нет. а вы так и не сознались - какая у вас версия Excel'я... нелицензионная что ли? %)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Очевидно, в сообщении 2008 г. не хватает вот такой процедуры:  
 
Sub EnableControl(Id As Integer, Enabled As Boolean)  
 Dim CB As CommandBar  
 Dim C As CommandBarControl  
 For Each CB In Application.CommandBars  
   Set C = CB.FindControl(Id:=Id, recursive:=True)  
   If Not C Is Nothing Then C.Enabled = Enabled  
 Next  
End Sub  
 
' На всякий случай приведе и то, что упоминалось:  
Sub Откл()  
 EnableControl 21, False  ' cut  
 EnableControl 19, False  ' copy  
 EnableControl 22, False  ' paste  
 EnableControl 755, False  ' pastespecial  
 Application.OnKey "^c", ""  
 Application.OnKey "^v", ""  
 Application.OnKey "^y", ""  
 Application.OnKey "{F4}", ""  
 Application.OnKey "+{DEL}", ""  
 Application.OnKey "+{INSERT}", ""  
 Application.CellDragAndDrop = False  
End Sub  
 
Sub Вкл()  
 EnableControl 21, True  ' cut  
 EnableControl 19, True  ' copy  
 EnableControl 22, True  ' paste  
 EnableControl 755, True  ' pastespecial  
 Application.OnKey "^c"  
 Application.OnKey "^v"  
 Application.OnKey "^y"  
 Application.OnKey "{F4}"  
 Application.OnKey "+{DEL}"  
 Application.OnKey "+{INSERT}"  
 Application.CellDragAndDrop = True  
End Sub  
 
Хотя сегодня я бы, пожалуй, сделал иначе :-)
 
ZVI,  
ну... после экспериментов с макрорекодером я тоже пришел к такому.  
но засомневался :)  
 
а если юзер вызовет настройку меню и панелей и заново вытащит кнопки "копировать"-"вставить" ?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Из книги Билла Джелена  
"Применение VBA и макросов...."
 
В варианте Билла Джелена можно зайти внутрь ячейки (или в поле редактирования формулы), выделить что-нибудь, нажать Ctrl-C, выйти и по Ctrl-V вставить куда угодно.  
 
В феврале я приводил для Дианы пример кода для блокировки вставки на определеном листе книги без манипулций с контролами. Прикладываю слегка модернизированный вариант, в котором добавлено ещё и блокирование перетягивания ячеек.
 
{quote}{login=ikki}{date=30.03.2011 11:16}{thema=}{post}а если юзер вызовет настройку меню и панелей и заново вытащит кнопки "копировать"-"вставить" ?{/post}{/quote}  
В приведенном выше варианте вытаскивание кнопок не поможет.  
Но всегда существует уровень здравого смысла, на который можно и нужно расчитывать, потому что таких "а если" много, можно ведь и макросы отключить :-)
 
{quote}{login=ZVI}{date=30.03.2011 11:50}{thema=}{post}В варианте Билла Джелена можно зайти внутрь ячейки (или в поле редактирования формулы), выделить что-нибудь, нажать Ctrl-C, выйти и по Ctrl-V вставить куда угодно.{/post}{/quote}  
Уточню, что вставить по Ctrl-V можно в любои вариантие кода с применением OnKey, войдя внутрь какой-либо ячейки (режим редактирования) или в поле редактирорвания формулы ячейки, и там уже нажимать Ctrl-V. Это связано с тем, что в режиме редактирования ячейки/формулы Application.OnKey игнорируется.  
 
Поэтому в post_214188.zip я применил блокировку вставки на основе записи в буфер обмена пустой строки и очистки буфера. Это можно было бы сделать и с помощью API-функуций, но интересно было обойтись только VBA-кодом,
 
Извиняюсь за опечатки - кошка трется и прогуливается по клавиатуре :-)
 
Всем доброе утро!!!  
 
Благодарю Вас за участие!!! Рости мне до Вашего уровня надо будет очень долго ...    
ПС: для ikki - версия Excel 2003.  
 
 
С уважением и благодарностью,
 
После манипуляций с этим модулем, пропала функция вставки строк, даже если запустить Sub DisAbleAllCLear(), все равно работает все кроме вставки строк...
 
{quote}{login=Cifrus}{date=22.12.2011 01:57}{thema=проблема}{post}После манипуляций с этим модулем, пропала функция вставки строк, даже если запустить Sub DisAbleAllCLear(), все равно работает все кроме вставки строк...{/post}{/quote}Вы бы уточнили, что под "этим модулем" Вы имели в виду код Билла Джелена.  
Так там DisAbleAllCLear как раз отключает контролы, а восстанавливает  EnableAllClear.  
Свое отношение к деактивации контролов я уже высказывал выше - дыряво немного, но это зависит от предпочтений :-)
 
Да он самый, этот модуль.  
 
Теперь как мне вернуть функцию вставки строк, она вообще не в одной книге сейчас не работает.  
 
Переустанавливать офис?  
{quote}{login=ZVI}{date=22.12.2011 02:22}{thema=}{post}{quote}{login=Cifrus}{date=22.12.2011 01:57}{thema=проблема}{post}После манипуляций с этим модулем, пропала функция вставки строк, даже если запустить Sub DisAbleAllCLear(), все равно работает все кроме вставки строк...{/post}{/quote}Вы бы уточнили, что под "этим модулем" Вы имели в виду код Билла Джелена.  
Так там DisAbleAllCLear как раз отключает контролы, а восстанавливает  EnableAllClear.  
Свое отношение к деактивации контролов я уже высказывал выше - дыряво немного, но это зависит от предпочтений :-){/post}{/quote}
 
Да он самый.  
 
У меня теперь в любой книге не работает функция вставки строк.  
 
Что сейчас делать? Переустанавливать офис?  
{quote}{login=ZVI}{date=22.12.2011 02:22}{thema=}{post}{quote}{login=Cifrus}{date=22.12.2011 01:57}{thema=проблема}{post}После манипуляций с этим модулем, пропала функция вставки строк, даже если запустить Sub DisAbleAllCLear(), все равно работает все кроме вставки строк...{/post}{/quote}Вы бы уточнили, что под "этим модулем" Вы имели в виду код Билла Джелена.  
Так там DisAbleAllCLear как раз отключает контролы, а восстанавливает  EnableAllClear.  
Свое отношение к деактивации контролов я уже высказывал выше - дыряво немного, но это зависит от предпочтений :-){/post}{/quote}
 
{quote}{login=Cifrus}{date=22.12.2011 03:15}{thema=Re: }{post}Что сейчас делать? Переустанавливать офис?{/post}{/quote}  
Проще всего закрыть Excel и удалить файл(ы):  
Для Excel 2003:  
C:\Documents and Settings\_ИмяПрофайла_\Application Data\Microsoft\Excel\Excel11.xlb  
 
Для 2007 там же удалить файл Excel12.xlb  
 
Для Excel 2010 - Excel14.xlb
Страницы: 1
Читают тему
Наверх