Описан пример создания временного меню по наличию файлов в каталоге 1 файл - один пункт в меню, 2 файла - два пункта...
CommandBar MS Access 97 SR2. Написан код по созданию на лету временного(без последующего сохранения в панели меню) пункта меню. Литературная часть (вводная): Цитата из хелпа: Доступ ко всем свойствам и методам объекта CommandBars открывается после установления на него указателя. Для его установления выберите из меню Сервис модуля, находящегося в режиме конструктора, команду Ссылки. После этого в диалоговом окне Ссылки создайте связи с библиотекой объектов Microsoft Office 8.0, установив соответствующий флажок. Установил ссылку и далее по хелпу И решил он делать пункт меню налету и что это хорошо. Есть несколько однотипных баз данных, с различными направлениями товара, подключаемых к одному модулю. Поскольку переключаться между ними приходится часто, я решил что каждый раз вызывать форму выбора товара (базы) через панель меню нерационально. То есть для переключения на другую базу было необходимо: * выбрать пункт меню "Выбрать товар" * в открывшейся форме поставить галку напротив нужного отдела * нажать "ОК" (Сами знаете "синдром ползания по меню" при долгой работе). Значит надо подключать базы прямо из панели меню. При этом хотелось, что бы в меню появлялись только те наименования баз, которые в данный момент находятся в каталоге. Сказано-сделано. Все описано в хелпах! Function BuildBar() Dim cbc As CommandBarControl Dim Condition As String Dim rs As Recordset, myName As String 'Устанавливаем новый пункт меню Set cbc = Application.CommandBars.ActiveMenuBar. _ Controls.Add(msoControlPopup, , , 1, True) cbc.TooltipText = "&Отделы" cbc.Caption = "&Отделы" 'Вот сделали новую менюшку и вперед: 'В таблице INFO записаны наименование базы и имя файла. 'Сканируя каталог с базами, сопоставляем имя базы с 'записью в таблице. При совпадении добавляем 'наименование в пункт меню. Set rs = CurrentDb.OpenRecordset("Info", dbOpenDynaset) myName = Dir("c:DB*.mdb") Do While myName <> "" 'Ищем в таблице INFO имя файла Condition = "[Info] = '" & myName & "'" rs.FindFirst Condition 'Если нашли - добавляем пункт меню с наименованием 'True указывает на то, что пункты подменю тоже временные! Set cbc = Application.CommandBars.ActiveMenuBar. _ Controls("&Отделы"). _ Controls.Add(msoControlButton, , , , True) With cbc .Caption = rs![Id] .BeginGroup = False ' .OnAction = "=Tovar('" & rs!Id & "')" .Style = msoButtonCaption End With myName = Dir Loop rs.Close 'Вместо сообщения открываем готовую панель меню SendKeys "%О" & vbCr End Function
'И, теперь, удаление временного пункта меню: Function DeleteBar() CommandBars.ActiveMenuBar.Controls("&Отделы").Delete End Function
|
Просмотров: 5115
Ваш коментарий будет первым | | |