к оглавлению   к 4GL - визуальному программированию

Язык визуального программирования приложений Visual Basic for Application

ПРОГРАММИРОВАНИЕ ПАНЕЛИ ИНСТРУМЕНТОВ VBA

Программирование панели инструментов позволяет создавать для приложений пользователя собственный интерфейс, например, исключить из меню и панелей инструментов основного приложения кнопки и команды, не относящиеся к разрабатываемому пользователем приложению и добавить новые необходимые средства.

Объект CommandBar и семейство CommandBars

Объект CommandBar и семейство CommandBars используются для программирования строк меню и панелей инструментов. В семействе CommandBars хранятся все строки меню и панели инструментов конкретного приложения.

Семейство CommandBars содержится в объекте Application. Оно представляет собой панели команд. В свою очередь каждый объект CommandBar содержит семейство commandBarControls, состоящее из всех элементов управления данной панели инструментов. Свойство controls объекта CommandBar возвращает семейство CommandBarControls. Элементы семейства CommandBarControis относятся к одному из трех типов.

CommandBar But ton

Кнопка или элемент меню, вызывающий выполнение команды или подпрограммы

CommandBarComboBox

Сложно организованные меню, такие как поле ввода, раскрывающийся список или поле со списком

CommandBarPopUp

Меню или вложенное меню

На рис. 8.1 показана иерархическая схема объекта CommandBar.

Рис. 8.1. Иерархическая схема объекта CommandBar

Обсудим наиболее часто используемые методы и свойства объекта CommandBar. Начнем с его методов.

Add Delete

Создает новую панель команд и добавляет ее в семейство CommandBars

Синтаксис:

Add (Name, Position, MenuBar, Temporary)

  • Name — имя создаваемой панели команд
  • Position — определяет местоположение панели команд. Допустимые значения:
    • msoBarLeft (привязка строки меню к левой границе окна основного приложения)
    • msoBarTop (привязка строки меню к верхней границе окна основного приложения)
    • msoBarRight (привязка строки меню к правой границе окна основного приложения)
    • msoBarBottom (привязка строки меню к нижней границе окна основного приложения)
    • msoBarFloating (свободное размещение строки меню на экране)
    • msoBarPopup (устанавливает, будет ли панель команд контекстным меню)
  • MenuBar — допустимые значения: True (панель команд заменяет активную строку меню) и False (в противном случае)
  • Temporary — допустимые значения: True (панель команд удаляется при закрытии Excel) и False (в противном случае) Удаляет панель команд

ShowPopUp

Отображает контекстную панель команд в специфицированном местоположении, если указаны координаты, либо в месте расположения указателя, если они опущены.

Синтаксис:

ShowPopUp (х, у)

  • х — х-координата панели команд
  • у — у-координата панели команд

Reset

Восстанавливает в исходное состояние (по умолчанию) встроенную панель инструментов

Перейдем к обсуждению наиболее часто употребляемых свойств объекта CommandBar.

Enabled

Определяет возможность доступа к панели команд

Visible

Определяет, видима ли строка панели команд. Например, скрыть панель инструментов Форматирование (Formatting) можно с помощью следующей инструкции:

Application. CommandBars ("Formatting" ) .Visible = False

Отобразить все панели инструментов можно с помощью следующей инструкции:

Application. CommandBars .Visible = True

Controls

Возвращает семейство commandBarControis, состоящее из всех элементов управления конкретной панели инструментов

Position

Возвращает местоположение панели команд. Допустимые значения:

  • msoBarLeft (привязка строки меню к левой границе окна основного приложения)
  • msoBarTop (привязка строки меню к верхней границе окна основного приложения)
  • msoBarRight (привязка строки меню к правой границе окна основного приложения)
  • msoBarBottom (привязка строки меню к нижней границе окна основного приложения)
  • msoBarFloating (свободное размещение строки меню на экране)
  • msoBarPopup (устанавливает, будет ли панель команд контекстным меню)

Protection

Устанавливает защиту строки меню от изменений со стороны пользователя. Допустимые значения:

msoBarNoProtection, msoBarNoCustomize, msoBarNoResize, msoBarNoMove, msoBarNoChangeVisible, msoBarNoChangeDock, msoBarNoVerticalDock и msoBarNoHorizontalDock

Как отмечалось выше, в семействе CommandBars хранятся все строки меню и панели инструментов конкретного приложения. В табл. 8.1 приведены названия наиболее часто используемых встроенных панелей инструментов Excel.

Таблица 8.1. Названия панелей инструментов

Название (англ.)

Название (рус.)

Formatting

Форматирование

Standard

Стандартная

Visual Basic

Visual Basic

Drawing

Рисование

Web

Web

WordArt

WordArt

External Data

Внешние данные

Chart

Диаграммы

Picture

Настройка изображения

Worksheet Menu Bar

Строка меню листа

Reviewing

Рецензирование

PivotTable

Сводные таблицы

Control Toolbox

Элементы управления

Clipboard

Буфер обмена

Custom 1

Настраиваемая 1

Stop Recording

Остановка записи

Shadow Settings

Настройка тени

3-D Settings

Настройка объема

Circular Reference .

Циклические ссылки

Full Screen

Во весь экран

Chart Menu Bar

Строка меню диаграммы

Auditing

Зависимости

 

Семейство CommandBarControls и объект CommandBarControl

Семейство CommandBarControls содержит все элементы конкретной панели инструментов или меню. Важнейшим методом этого семейства является метод Add, создающий новый элемент. Рассмотрим синтаксис метода Add.

Add

Добавляет новый элемент на панель управления или в меню. Возвращает объект CommandBarButton, CommandBarComboBox или CommandBarPopup.

Синтаксис:

Add (Type, Id, Parameter, Before, Temporary)

  • Type — задает тип добавляемого элемента. Допустимые значения:
    • msoControlButton (кнопка или элемент меню)
    • msoControlEdit (поле ввода)
    • msoControlOropdown (раскрывающийся список)
    • msoControlComboBox (поле со списком)
    • msoControlPopup (вложенное меню)
  • id — целое число, идентифицирующее встроенный элемент управления. Если аргумент Id равен 1 или опущен, то добавляется пустой элемент управления заданного типа
  • Parameter — задает параметр, используемый встроенным элементом управления
  • Before — индекс или имя элемента управления, перед которым добавляется новый элемент управления. Если аргумент опущен, то элемент размещается в конце панели инструментов или меню
  • Temporary — допустимые значения: True (новый элемент управления автоматически удаляется из меню или панели инструментов при закрытии приложения) и False (в противном случае)

Обсудим вкратце основные свойства объекта CommandBarControi.

Caption

Текстовая строка, отображаемая в заголовке

DescriptionText

Возвращает описание элемента управления

Enabled

Устанавливает, является ли допустимым выбранный пользователем элемент управления

FacelD

Возвращает номер встроенной кнопки, используемой в качестве элемента управления. Если это свойство равно нулю, то возвращается пустой элемент управления

OnAction

Возвращает имя макроса, выполняемого при активизации элемента управления

ShortcutText

Возвращает комбинацию горячих клавиш, назначенных элементу управления

Style

Только для объекта CommandBarButton. Устанавливает . внешний вид кнопки. Допустимые значения:

  • msoButtonAutomatic (кнопка не содержит текста и рисунка)
  • msoButtonIcon (кнопка содержит рисунок, в этом случае надо также задать свойство Icon)
  • msoButtonCaption (кнопка содержит текст, в этом случае надо также задать свойство caption)
  • msoButtonIconandCaption (кнопка содержит текст и рисунок, в этом случае надо также задать свойства Icon и Caption)


TooltipText

Текст, отображаемый в окне всплывающей подсказки

Visible

Устанавливает режим отображения (видимость) на экране кнопки

 

Пример создания панели инструментов пользователя

Приведем пример проекта, который создает интерфейс приложения, состоящего из строки меню и одной панели инструментов. В панель инструментов входят две кнопки и раскрывающийся список. На поверхности одной из кнопок выводится рисунок, а другой — надпись (рис. 8.2).

Рис. 8.2. Пользовательский интерфейс

Каждая из кнопок связана с макросом таким образом, что их активизация приводит к выполнению соответствующего макроса. Кроме того, эти кнопки снабжены пояснительными надписями, которые отображаются в окне всплывающей подсказки. При закрытии приложения данная панель инструментов удаляется, а ее место занимают панели инструментов Стандартная (Standard) и Форматирование (Formatting).

В окне Проект — VBAProject (Project - VBAProject) выберите лист ThisWorkbook и наберите следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)

'

' Процедура создания новой панели инструментов при

' открытии рабочей книги

'

' При открытии рабочей книги панели инструментов Форматирование

' и Стандартная скрываются

'

'

With Application

.CommandBars("Formatting").Visible = False

.CommandBars("Standard").Visible = False End With

' Создание новой панели инструментов с именем

' МояПанельИнструментов, которая будет

' удаляться при закрытии приложения

'

With Application.CommandBars

.Add(Name:="МояПанельИнструментов",

Position:=msoBarTop, MenuBar:=False, Temporary:=True)

.Visible = True With .Controls

' Создание кнопки с рисунком

With .Add(Type:=msoControlButton, Id:=2950)

.TooltipText = "КнопкаДейства!" .OnAction = "Действо 1"

End With

'

' Создание кнопки с надписью

With .Add(Type:=msoControlButton, Id:=l)

.Caption = "Действо"

.TooltipText = "КнопкаДейства2"

.Style = msoButtonCaption

.OnAction = "Действо 2" End With

' Создание раскрывающегося списка

With .Add(Type:=msoControlDropdown)

.Addltem "Приедет", 1 .Addltem "Уедет", 2

.Addltem "Еще не решил", 3

.Listlndex = i

End With

End With

End With

End Sub

'

Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)

' Процедура, отображающая панели инструментов Форматирование

' ' и Стандартная при закрытии приложения

'

With Application

.CommandBars("Formatting").Visible = True

.CommandBars("Standard").Visible = True

End With

End Sub

А на листе модуля введите следующие две процедуры, которые будут выполняться при нажатии на соответствующие кнопки.

Sub Действо1()

MsgBox "Результат действа 1"

End Sub

Sub Действо 2()

MsgBox " Результат действа 2"

End Sub

Пример создания строки меню пользователя

Приведем пример проекта, который создает интерфейс приложения, состоящего из пользовательской строки меню. Пользовательская строка меню включает два пункта меню, причем первый пункт содержит в себе также раскрывающееся меню (рис. 8.3). Каждый пункт связан с макросом так, что при их выборе выполняется -соответствующий макрос. При закрытии приложения пользовательская строка меню удаляется.

Рис. 8.3. Интерфейс с пользовательской строкой меню

В окне Проект — VBA Project (Project - VBAProject) выберите лист Thisworkbook и введите на нем следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)

'

' Процедура создания новой строки меню при

' открытии рабочей книги. При закрытии приложения

' подданная строка удаттететея

'

With Application.CoimnandBars.Add(Name:="МоеМеню", MenuBar:=True, Temporary:=True) .Visible = True

With .Controls

'

' Создание меню Меню!

'

With .Add(Type:=msoControlPopup)

.Caption = "&Меню1" With .Controls

With .Add (Type :=msoControlButtoj»)

.Caption = "Пункт&1" .OnAction = "АтьДва!"

End With

'

' Создание подменю Меню1

With -Add(Type:=msoControlPopup)

.Caption = "&ПодМеню1" With

.Controls

With .Add(Type:=msoControlButton)

.Caption = "Пункт&2" .OnAction = "АтьДва2"

End With

With .Add(Type:=msoControlButton)

.Caption = "Пункт&З"

.OnAction = "АтьДваЗ"

End With

End With

End With

End With

End With

'

' Создание меню Меню2

'

With .Add(Type:=msoControlPopup)

.Caption = "&Меню2" With .Controls

With .Add(Type:=msoControlButton)

.Caption = "Пункт&4"

.OnAction = "АтьДва4"

End With

End With

End With

End With

End With

End Sub

А на листе модуля введите следующие четыре процедуры, которые будут выполняться при выборе соответствующего пункта меню.

Sub АтьДва!()

MsgBox "Стой! Стоять! Буду стрелять!"

' End Sub

'

Sub АтьДва2 ()

MsgBox "Стой! Стоять! Стреляю в воздух!"

End Sub

Sub АтьДваЗ()

MsgBox "Стой! Стоять! Последний раз стреляю в воздух!"

End Sub

'

Sub АтьДва4()

MsgBox "Стой! Стоять! Стреляю!"

End Sub

Создание пользовательской панели инструментов вручную

Иногда бывает удобнее проектировать собственную панель вручную, чем ее программировать.

Создается панель пользователя по следующему алгоритму.

Шаг 1

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Шаг 2

В появившемся диалоговом окне Настройка (Customize) нажмите кнопку Создать (New) (рис. 8.4).

Рис. 8.4. Диалоговое окно Настройка

ШагЗ

В появившемся диалоговом окне Создание панели инструментов в поле Панель инструментов (Toolbars) введите имя новой панели инструментов, например моя панель (рис. 8.5).

 

Рис. 8.5. Диалоговое окно Создание панели инструментов

Шаг 4

Нажмите кнопку ОК. Это приведет к появлению новой панели инструментов (рис. 8.6). Пусть вас не смущает ширина панели инструментов. Она будет автоматически расширяться по мере ее заполнения элементами управления.

 

Рис. 8.6. Новая панель инструментов и диалоговое окно Настройка

Шаг 5

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и перетащите на новую панель нужные кнопки из списка Команды (Commands). Итак, панель инструментов создана (рис. 8.7). Программно та же панель инструментов создается следующими инструкциями:

Application. CommandBars

.Add (Name :=" Моя панель" )

.Visible = True Application. CommandBars ( "Моя панель")

. Controls .Add Type : =msoControlButton, Id:=23, Before:=l Application. CommandBars ( "Моя панель")

. Controls. Add Type:=msoControlButton, Id:=211, Before:=2 Application. CommandBars ( "Моя панель").Controls.

Add Type:=msoControlButton,

Id:=1031, Before :=3

Application. CommandBars ("Моя панель") .Controls.

Add Type:=msoControlButton, Id:=166, Before:=4

По указанному выше алгоритму, опустив шаги со второго по четвертый, можно также добавлять элементы управления в уже существующие панели инструментов.

Рис. 8.7. Новая панель инструментов Моя панель

Удаление элемента управления из панели инструментов вручную

Вручную элемент управления удаляется из панели инструментов по следующему алгоритму.

Шаг 1

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Шаг 2

После появления диалогового окна Настройка (Customize) выберите удаляемую кнопку и перетащите ее за пределы панели инструментов в область рабочего листа, но так, чтобы она не попала на другую панель инструментов.

ШагЗ

Отпустите кнопку мыши. Элемент управления удален. Удалите по указанному выше алгоритму, например, четвертую кнопку из панели инструментов моя панель. Программно тот же результат достигается инструкцией:

Application. CommandBars ("Моя панель") .Controls (4) .Delete

 

Удаление пользовательской панели инструментов вручную

Вручную пользовательская панель инструментов удаляется по следующему алгоритму.

Шаг 1

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Шаг 2

Раскройте вкладку Панели инструментов (Toolbars) диалогового окна Настройка (Customize). Выделите пользовательскую панель и сбросьте соответствующий флажок, а затем нажмите кнопку Удалить (Delete). Программно тот же результат достигается инструкцией:

Application. CommandBars ("Моя панель") .Delete


 

Назначение вручную макроса кнопке

Вручную элементу управления на панели инструментов макрос назначается по следующему алгоритму.

Шаг 1

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Шаг 2

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите элемент управления, который требуется связать с макросом. Нажмите кнопку Изменить выделенный объект (Modify selection). В появившемся меню выберите команду Назначить макрос (Assign Macro) (рис. 8.8).

 

Рис. 8.8. Меню с командой Назначить макрос

ШагЗ

Появится диалоговое окно Назначить макрос (Assign Macro) (рис. 8.9). В списке Имя макроса (Macro Name) выберите имя макроса, назначаемое элементу управления. Нажмите кнопку ОК диалогового окна Назначить макрос (Assign Macro) и кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь макрос назначен кнопке.

Рис. 8.9. Диалоговое окно Назначить макрос

Изменение и создание вручную изображения на кнопке

Вручную можно изменить изображение любой кнопки. В Excel имеется коллекция из 42 встроенных кнопок. Кроме того, при помощи встроенного редактора можно создать любой рисунок на поверхности кнопки и изменить уже существующий. Для этого надо воспользоваться следующим алгоритмом.

1 Шаг

Выберите команду Вид, Панели инструментов, Настройка (View,
Toolbars, Customize) или переместите указатель на любую панель 1 инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Шаг 2 Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите кнопку, которую следует видоизменить. Нажмите кнопку Изменить выделенный объект (Modify selection). Выберите команду Выбрать значок для кнопки (ChangeButton Image) и один из значков в появившемся меню (рис. 8.10). Нажмите кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь изображение на кнопке изменилось.

Рис. 8.10. Диалоговое окно со значками

Если необходимо создать пользовательское изображение на кнопке или подкорректировать уже существующее, шаг 2 алгоритма должен быть следующим.

Рис. 8.11. Диалоговое окно Редактор кнопок

Шаг 2

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите кнопку, которую следует видоизменить. Нажмите кнопку Изменить выделенный объект (Modify selection). Выберите команду Изменить значок на кнопке (Edit Button Image).

ШагЗ

Появится диалоговое окно Редактор кнопок (Edit Button) (рис. 8.11). Используя средства этого редактора можно создать любое изображение на поверхности кнопки. Нажмите кнопку OK диалогового окна Редактор кнопок (Edit Button) и кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь изображение на кнопке изменилось.

к оглавлению   к 4GL - визуальному программированию

Знаете ли Вы, что, как и всякая идолопоклонническая религия, релятивизм ложен в своей основе. Он противоречит фактам. Среди них такие:

1. Электромагнитная волна (в религиозной терминологии релятивизма - "свет") имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например, ~200 тыс км/с в стекле и ~3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью "Температура эфира и красные смещения"), разную скорость для разных частот (см. статью "О скорости ЭМ-волн")

2. В релятивизме "свет" есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский "свет" - это волнение ничего в ничем. У него нет среды-носителя колебаний.

3. В релятивизме возможны манипуляции со временем (замедление), поэтому там нарушаются основополагающие для любой науки принцип причинности и принцип строгой логичности. В релятивизме при скорости света время останавливается (поэтому в нем абсурдно говорить о частоте фотона). В релятивизме возможны такие насилия над разумом, как утверждение о взаимном превышении возраста близнецов, движущихся с субсветовой скоростью, и прочие издевательства над логикой, присущие любой религии.

4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те "подтверждающие теорию Эйнштейна факты", которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution