Страницы: 1 2 След.
RSS
Программно перейти в режим Конструктора
 
Подскажите, пожалуйста, как можно по нажатию кнопки НА ЛИСТЕ, например CommandButton1, программно перейти в режим Конструктора?  
 
Макрорекордер, естественно, на переход в режим Конструктора ничего записывать не хочет :-(
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алекс, а для чего?
 
Юрий, думаю любопытно :)  
 
Могу ошибаться, но мне любопытно.  
 
Научите нас, пожалуйста! ;)
<FONT COLOR="CadetBlue">
 
Маленькими, не выводимыми на печать элементами управления Label помечаю столбцы, из которых должен выбирать значения макрос.  
Это чтобы не нужно было лезть в код и что-то там править, если вдруг требуется изменить столбцы. Вообще-то получается очень просто и "юзабельно" (я так научился делать в своём "Удобном автофильтре" http://www.planetaexcel.ru/forum.php?thread_id=11478&page_forum=3&allnum_forum=70  и теперь часто использую).  
Файл лежит в общем доступе, а народу это понравилось. Я сделал даже для них краткую инструкцию как перенастроить автофильтр "под себя". Но объяснить далёкой от нормального использования Ёкселя дЭвушке что такое режим конструктора и как в него войти, чтобы можно было передвинуть элемент управления, а потом ещё не забыть из него выйти... Ну, в общем вы понимаете...  
Вот я и хочу сделать кнопочку (а потом "подвешу" это на DblClick по элементу управления), по которой можно будет просто перейти в режим конструктора. А при потере фокуса элементом - автоматически выйти из режима.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Application.CommandBars("Control Toolbox").Controls(1).Execute
 
Вот, например, гляньте, что я наваял для  
' Topic_HEADER : Поиск + автоматический переход в списке по первым буквам  
' Topic_URL    : http://www.planetaexcel.ru/forum.php?thread_id=12706  
Здесь положением элементов Label1 и Label2 задаются столбцы с данными.  
Элементы сами позиционируются при клике по их ячейкам.    
НО ещё хотелось бы чтобы при DblClick по элементу появлялась возможность его перемещать...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Юрий, спасибо Вам!  
 
А как можно повесить на фигуру?
<FONT COLOR="CadetBlue">
 
Что повесить?
 
Аналогичная тема была.    
 
Для Alex_ST: набрал в окне поиска "переход в режим конструктора" - самая первая ссылка - <EM>http://www.planetaexcel.ru/forum.php?thread_id=16645</EM>  
 
Дъмитръ - там ответ на Ваш вопрос есть.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Юрий, спасибо.  
Подвесил для пробы на:  
Private Sub Label1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)  
  Application.CommandBars("Control Toolbox").Controls(2).Execute  
End Sub  
Работает.  
А как выйти из режима конструктора при потере фокуса:  
Private Sub Label1_LostFocus()  
?????  
End Sub  
 
 
И попутно вопрос: как привязать не к кнопке на панели инструментов, а к её действию?  
Ведь они могут быть перемещены как у меня (Controls(2))или могут быть изменены имена?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=19.07.2010 01:37}{thema=}{post}1. А как выйти из режима конструктора при потере фокуса:  
 
2. И попутно вопрос: как привязать не к кнопке на панели инструментов, а к её действию?  
{/post}{/quote}1. В ссылке в моем предыдущем посте все это есть. И я посоветовал бы привязываться все же к ID элемента, нежели к его индексу на панели.  
 
2. Вообще не понял. Что привязать и к какому действию?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, спасибо за "наводку".  
Но там к стати так и остался открытым вопрос "как узнать ControlID?"  
 
И к сожалению, в режиме конструктора перестают обрабатываться события. Поэтому выйти из режима по событию LostFocus не удаётся, т.к. оно не происходит...  
 
А прицеплять к шэйпам не удобно, т.к. их легко случайно удалить, да и не нужно, т.к. двигаются они без режима конструктора...  
 
Задумка не прошла... АбЫдно,пАнимаЭшь, ДА?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
А кто отменил горячие клавиши?  
 
А как узнать СontrolID, можно было бы и самим попробовать подумать:  
 
Sub Get_Control_ID()  
   Dim oCmBr As CommandBar, oCntrl As CommandBarControl, li As Long  
   Application.ScreenUpdating = False  
   Range("A1:B1") = Array("Caption", "ID")  
   li = 1  
   For Each oCmBr In Application.CommandBars  
       For Each oCntrl In oCmBr.Controls  
           li = li + 1  
           Cells(li, 1) = oCntrl.Caption  
           Cells(li, 2) = oCntrl.ID  
       Next oCntrl  
   Next oCmBr  
   Set oCmBr = Nothing: Set oCntrl = Nothing  
   Application.ScreenUpdating = True  
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, а как повесить на автофигуру?!  
 
Что-то я не понял Вашу подсказку...
<FONT COLOR="CadetBlue">
 
Рисуете автофигуру на листе и назначаете макрос. Правый клик мыши по фигуре-Назначить макрос...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Покопался в И-нете и в MSDN нарыл как войти в режим конструктора:  
Sub TurnOnDesignMode()  
  ThisWorkbook.ToggleFormsDesign  
End Sub  
 
Попробовал приписать этот макрос к шэйпу на листе.  
Работает!  
Но описанный там же переключатель режима "вкл-выкл" почему-то не работает, а ругается, что свойства Workbook.DesignMode не существует:  
 
Private Sub WorkbookToggleFormsDesign()  
  If Not ThisWorkbook.DesignMode Then  
     ThisWorkbook.ToggleFormsDesign  
  End If  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Дмитрий, нашел Ваш пример, но для меня это загадка.  
 
Юрий, гляньте пожалуйста, все сразу поймете.
<FONT COLOR="CadetBlue">
 
Дмитрий, глянте Ваш пример, там как-то через гиперссылку, хотя могу и ошибаться, но явно не через макрос.
<FONT COLOR="CadetBlue">
 
{quote}{login=Дъмитръ}{date=19.07.2010 02:50}{thema=}{post}Дмитрий, нашел Ваш пример, но для меня это загадка.{/post}{/quote}Где именно загадка? Какой пример?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Простите, на работе кондиционер полетел, очень жарко, поэтому могу что-то не так сделать :)  
 
Вот, посмотрите.
<FONT COLOR="CadetBlue">
 
Ё-маё, Дмитрий! Какое это имеет отношение к данной теме? Тут разговор про режим конструктора, а Вы про переход в редактор VBA спрашиваете. Что мешает свою тему создать или спросить хотя бы в той, где пример есть?  
 
А делается это так:  
Правый клик на фигуре- Гиперссылка- Веб-страница  
Пишите туда: #ИмяМодуля.ИмяМакроса  
 
P.S. В следующий раз за такое безобразие с вопросом не по теме и вообще из головы - удалю все посты не глядя и не отвечая. У нас тут тоже жара и лишний раз голову ломать, про какие Вы там примеры думаете, желания мало.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Извините, Дмитрий!    
 
Видимо я не так понял что означает "перейти в режим Конструктора"...  
 
В дальнейшем обещаю быть более внимательным!  
 
Спасибо за помощь!
<FONT COLOR="CadetBlue">
 
Так всё-таки: как программно узнать, включен в книге режим конструктора или нет?  
 
А метод ToggleFormsDesign и макрос:  
Sub TurnOnDesignMode()  
ThisWorkbook.ToggleFormsDesign  
End Sub  
почему-то только включает, а не переключают (ON-OFF) режима конструктора    
А как тогда выйти из него ?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=20.07.2010 09:12}{thema=}{post}А как тогда выйти из него ?{/post}{/quote}Алекс, ну ведь в ссылке, которую я дал есть строка, которая снимает режим конструктора:  
Application.CommandBars.FindControl(ID:=1605).Reset  
 
Насчет узнать включен он или нет надо подумать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Application.CommandBars.FindControl(ID:=1605).Reset    
всего лишь выполняет пункт меню (т.е. имитирует нажатие кнопки).    
При этом вовсе не факт что ID:=1605 будет соответствовать режиму конструктора в других версиях и локализациях Ёкселя.    
Вот, к примеру, Юрий М 19.07.2010, 13:22  предлагал использовать    
Application.CommandBars("Control Toolbox").Controls(1).Execute  
а у меня панели настроены "под себя" и режиму конструктора соответствует вовсе не Controls(1), а Controls(2)... Поэтому это предложение мне сразу не очень понравилось и я стал искать альтернативные методы.  
То же вполне может касаться и обращению по ID.  
Согласитесь, что это своего рода "протез" в отличие от использования МЕТОДА  
Workbook.ToggleFormsDesign, который воздействует непосредственно на объект.  
И собственно вопрос-то остался только в том, почему этот метод не переключает, а только включает режим конструктора?  
А если это баг, то нельзя ли его обойти, запросив программно СВОЙСТВО состояния (включен/выключен) режима конструктора и (опять же узнав как) выключить его, используя соответствующий МЕТОД.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=20.07.2010 12:42}{thema=}{post}Application.CommandBars.FindControl(ID:=1605).Reset    
всего лишь выполняет пункт меню (т.е. имитирует нажатие кнопки).    
При этом вовсе не факт что ID:=1605 будет соответствовать режиму конструктора в других версиях и локализациях Ёкселя.    
Вот, к примеру, Юрий М 19.07.2010, 13:22  предлагал использовать    
Application.CommandBars("Control Toolbox").Controls(1).Execute  
а у меня панели настроены "под себя" и режиму конструктора соответствует вовсе не Controls(1), а Controls(2)... Поэтому это предложение мне сразу не очень понравилось и я стал искать альтернативные методы.  
То же вполне может касаться и обращению по ID.  
Согласитесь, что это своего рода "протез" в отличие от использования МЕТОДА  
Workbook.ToggleFormsDesign{/post}{/quote}Не соглашусь и очень категорично.    
Во-первых: ID во всех локализациях один и не может быть заменен. А вот индекс(.Controls(1))как раз и меняется, о чем я и писал ранее - 19.07.2010, 13:48.  
Во-вторых: метод .Reset не "всего лишь выполняет пункт меню (т.е. имитирует нажатие кнопки)", а сбрасывает нажатую кнопку меню. А выполняет .Execute.  
 
Я так полагаю, что метод Workbook.ToggleFormsDesign Вы не считаете протезом, несмотря на то, что как раз он способен только включить режим конструктора? А .DesignMode вообще умер в 97 Exele....
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ну, на счёт постоянства ID вам, ГУРУ, конечно виднее, а я просто намотаю себе это на ус...  
Но согласитесь, что программный код, в котором режим конструктора включается методом Workbook.ToggleFormsDesign, намного "читабельнее" чем то же действие, выполняемое по директиве Application.CommandBars.FindControl(ID:=1605).Execute ...  
Ведь что делается при Workbook.ToggleFormsDesign ясно безо всяких комментариев, а вот для того, чтобы узнать, что выполняется по директиве Application.CommandBars.FindControl(ID:=1605).Execute, придётся очень поломать голову (я не думаю, что кто-нибудь в состоянии запомнить соответствие этих почти 1,5 тысячи номеров выполняемым действиям).    
Ну, ведь не пишете же вы для того чтобы ВСТАВИТЬ директиву Application.CommandBars.FindControl(ID:=22).Execute
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Ну тогда я пас. Если для Вас читабельность важнее функционала - это не ко мне. Я других универсальных методов включения режима конструктора не знаю.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Алексей, а я вот понял, что я ничего не понял.  
 
А смысл этого всего?! Для чего такие сложности?!  
Объясните пожалуйста на примере. С выложенного файла ничего не понял...  
 
Я Вам помочь не могу, но хочется для себя разобраться, зачем все это, вдруг пригодиться :)
<FONT COLOR="CadetBlue">
 
Дъмитръ, вы мой файл post_138679.zip открывали?  
Тему http://www.planetaexcel.ru/forum.php?thread_id=12706 смотрели?  
Вроде бы и в файле и в коде и в теме вполне должно хватать разъяснений и комментариев ... (уж чем-чем, а недостаточностью комментариев в программах я, кажется, не грешу)  
Ну, что же там может быть не понятно?  
Я просто для того, чтобы указать программе, по каким диапазонам работать, поставил на лист элементы управления - Label1 и Label2.  
В результате появилась возможность для изменения диапазонов данных (это может потребоваться, например, при удалении или добавлении строк/столбцов в таблицу) не лезть в код VBA чтобы там ручками исправлять диапазоны, а просто переместить в нужные места (в заголовки диапазонов) элементы управления.  
При удалении/добавлении столбцов/строк на листе эти элементы управления скорее всего переместятся вместе с ячейками, к которым они "привязаны" сами и ничего перетаскивать мышкой не придётся...  
Но уж если вдруг почему-то нужно будет самому изменить диапазоны данных, то тут без режима конструктора никак не обойтись, т.к. элементы управления мышкой "цепляются" только в нём.  
Вот мне и хотелось бы ещё больше упростить работу с таблицей путём введения возможности входа в режим конструктора ну, например, по событию двойного клика по ячейке, где стоит элемент управления, и выхода из него по событию Worksheet_SelectionChange...  
 
уф-ф-ф... теперь понятно?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1 2 След.
Читают тему
Наверх