Excel макрос всплывающее окно

Create a pop-up message box in Excel using VBA Macros. This allows you to show a message to the user and to get input back, depending on which buttons were clicked in the pop-up message.

To output a message in Excel, we use the MsgBox function. Below, you will find many examples that should suit your needs.

Sections:

Syntax

Example 1 — Output Basic Text

Example 2 — Add Buttons to the Message Box

Example 3 — Figure Out Which Button Was Clicked

Example 4 — Do Something After the User Clicks a Button

Example 5 — Change MsgBox Appearance

Notes

Syntax

MsgBox(prompt, [buttons], [title], [helpfile], [context])
Argument Description
Prompt

The text that will be in the message box. This is the only required argument for the MsgBox function.

[Buttons]

Allows you to display different buttons and icons in the message box.

[Title]

Text that appears in the title bar of the message box.

[Helpfile]

Not needed. Allows for a specific help file to be used.

[Context]

Not needed. Required if the helpfile argument is used.

[] means it is an optional argument.

Button Arguments

These are the values that can be entered for the buttons argument. You will use the VB Codes to add them to the message box. Examples below will include some of these options so you can better understand them.

VB Code Description Value

vbOKOnly

OK Button. Default.

0

vbOKCancel

OK and Cancel buttons.

1

vbAbortRetryIgnore

Abort, Retry, and Ignore buttons.

2

vbYesNoCancel

Yes, No, and Cancel buttons.

3

vbYesNo

Yes and No buttons.

4

vbRetryCancel

Retry and Cancel buttons.

5

vbCritical

Displays the Critical Message icon in the message box window.

16

vbQuestion

Displays the Warning Query icon in the message box window.

32

vbExclamation

Displays the Warning Message icon in the message box window.

48

vbInformation

Displays the Information Message icon in the message box window.

64

vbDefaultButton1

Selects the first button in the message box by default.

0

vbDefaultButton2

Selects the second button in the message box by default.

256

vbDefaultButton3

Selects the third button in the message box by default.

512

vbDefaultButton4

Selects the fourth button in the message box by default.

768

vbApplicationModal

Application modal; the user must respond to the message box before continuing work in Excel.

0

vbSystemModal

System modal; all applications are suspended until the user responds to the message box.

4096

VbMsgBoxSetForeground

Specifies the message box window as the foreground window

65536

vbMsgBoxRight

Text is right aligned

524288

Values Returned from Button Clicks in the Message Box

When a user clicks one of the buttons that are in the message box, a value will be returned to VBA; that value corresponds to the button that was clicked and is listed below.

Button Clicked Returned Constant Returned # Value

OK

vbOK

1

Cancel

vbCancel

2

Abort

vbAbort

3

Retry

vbRetry

4

Ignore

vbIgnore

5

Yes

vbYes

6

No

vbNo

7

Example 1 — Output Basic Text

Basic message box with text.

This is the simplest form of outputting a message.

MsgBox "Hi, this is my message."

a63ffa7cd8882f6ceadecdb8df1f21ba.jpg

Running the macro we get this:

c46b3081178c9e6626f8785ee388b478.jpg

Remember, the OK button is there by default and clicking that simply closes the pop-up message box window.

Example 2 — Add Buttons to the Message Box

Message box with multiple buttons.

MsgBox "Hi, this is my message.", vbYesNoCancel

db0f8fdeac20a772711bf8eafc93ce33.jpg

I added a comma after the display text and then input one of the VB codes from the Button Arguments list above.

2dea7d7b5e6391765e3a6b6661789ebd.jpg

Run the macro and we get this in Excel:

f8ac44abed8da3166c9ce60897767240.jpg

Example 3 — Figure Out Which Button Was Clicked

When a button is clicked, it sends a value back to Excel. Now, we need to capture that value so we can do something with it.

response = MsgBox("Hi, this is my message.", vbYesNoCancel)

4201571bd7a681c0b0102d55a8ff2ec2.jpg

All we have to do is to set a variable equal to the output of the MsgBox function. Here, the variable response is equal to the output of the function, which means that we type response =  and then the msgbox function.

Note also that there are now parentheses surrounding the arguments for the MsgBox function; these weren’t included before because they weren’t needed. Often, they aren’t used when creating simple pop-up windows.

I will now output the variable response into a Msgbox of its own so you can see the value it returns after a button was clicked.

Here is the final code for this example:

b6056271ee5283726f0493532c267437.jpg

Run it and you get this:

7ee7a2cc2dd7f2214b8abc8f2e9773a9.jpg

Click one of the buttons and the next message box will open with the value that was returned as a result of the button click in the first window.

ad4d29f171f3b99745743da22c860edb.jpg

A 6 is returned, which means the button Yes was clicked. We know this from the table above «Values Returned from Button Clicks in the Message Box», which lists the values that each button click will return.

Example 4 — Do Something After the User Clicks a Button

Now that you know how to determine which button was clicked, let’s do something useful with it.

I will make a simple IF statement that checks which button was clicked and outputs a message based on that.

Sub button_action_msgbox()

response = MsgBox("Hi, this is my message.", vbYesNo)

If response = 6 Then
    MsgBox "You clicked Yes"
ElseIf response = 7 Then
    MsgBox "You clicked No"
End If

End Sub

74e8e0e525ee2b884813984e0bb0585f.jpg

Run the macro:

5a3ec2e9d11e8f438483a7b79788801a.jpg

Hit one of the buttons and the next part of the macro will run and the corresponding msgbox will appear:

1a40178ea6aa380be3256decf2a543f8.jpg

At this point, we have created a useful pop-up message box that solicits feedback and does something with that feedback.

Example 5 — Change MsgBox Appearance

You can add some additional things to the pop-up window to change its look and feel and here I will include some of those options, including a custom title for the window.

Sub button_style_msgbox()

MsgBox _
    "Hi, this is my message.", _
    vbOKOnly + vbInformation, _
    "Custom Title"

End Sub

8d756ee11ae6c7f7f5dbd0ba45030a52.jpg

First, notice that I used «_» at the end of each line so that I could place this piece of code on multiple lines.

Second, notice that there is now a custom title called Custom Title that will appear for the msgbox.

Third, notice that there is more than one option for the buttons argument and that each argument is separated with a plus sign (+) like this: vbOKOnly + vbInformation.

Run the macro and we get this:

12471f5ba0f2c25a758a04457f3b1079.jpg

The option vbOKOnly meant there would be only an OK button. The option vbInformation put that image with the i inside the blue circle in there. The custom title appears in the upper-left corner of the pop-up message box window.

Notes

These are a few examples that should get you comfortable using the Message Box pop-up window feature in macros in Excel.

This is a great way to give some information to your user that they must process or at least must reply to in some way before continuing.

Make sure to download the sample file attached to this tutorial to get all of the sample VBA Macro codes.

Microsoft Excel: выпадающие списки

Выпадающий список в Microsoft Excel

​Смотрите также​ в ссылке, смотрели?​ рождение​ применит все установленные​ «Ок».​ и т.д. кроме​- сколько строк​ — Validation)​Спасибо!​ Workbook_Open() должно быть​rinat_n​oldval = Target​

​ обычный список именованным​ любой ячейке. Как​

Создание дополнительного списка

​ содержание в одной​ Например, =ДВССЫЛ($B3).​ переходим во вкладку​При работе в программе​хз​Hugo​

​ параметры, и список​2​ цвета)​ показывать в выпадающем​. Из выпадающего списка​Sergei A​ Private Sub Workbook_Activate()​: Апострофф, дата следующего​If Len(oldval) <>​ диапазоном (с помощью​ это сделать, уже​ ячейке нескольких значений.​Как видим, список создан.​ «Файл» программы Excel,​ Microsoft Excel в​

tablitsa-zagotovka-i-spisok-v-microsoft-excel

​: да смотрел, и​: Как Вы думаете​ готов к использованию.​Как сделать выпадающий​ForeColor​ списке. По умолчанию​Тип данных (Allow)​

Присвоение имени в Microsoft Excel

​:​rinat_n​ пересмотра. Данный файл​ 0 And oldval​ «Диспетчера имен»). Помним,​ известно. Источник –​ Когда пользователь щелкает​Теперь, чтобы и нижние​ а затем кликаем​ таблицах с повторяющимися​ там он выдает​ поступать с выходными?​

Создание имени в Microsoft Excel

​В Ворде​ список в экселе​и​ — 8, но​выберите вариант​AchilleS​: Апострофф, при проверки​ ответственный немножко неправильно​

Проверка данных в Microsoft Excel

​ <> newVal Then​ что имя не​ имя диапазона: =деревья.​ по стрелочке справа,​ ячейки приобрели те​ по надписи «Параметры».​ данными, очень удобно​ только которые родяться,​ Предупреждать заранее, или​Открываешь панель «Элементы​В нужном месте​BackColor​

Параметры вводимых значений в Microsoft Excel

​ можно больше, чего​Список (List)​: Спасибо! И сорри,​ скрипта выходит ошибка:​ сделал, я вот​Target = Target​ может содержать пробелов​Снимаем галочки на вкладках​ появляется определенный перечень.​

Выпадающий список в программе Microsoft Excel

Создание выпадающего списка с помощью инструментов разработчика

​ же свойства, как​В открывшемся окне переходим​ использовать выпадающий список.​ а ели например​ потом, с прошедшим​ управления» (правой кнопкой​ листа выберите ячейку​- цвет текста​ не позволяет предыдущий​и введите в​ что так) По​ Compile error: Expected​ хотел заняться пересмотром.​ & «,» &​

Переход в параметры Microsoft Excel

​ и знаков препинания.​ «Сообщение для ввода»,​ Можно выбрать конкретное.​ и в предыдущий​ в подраздел «Настройка​ С его помощью​

Включение режима разработчика в Microsoft Excel

​ день рождение 25.09.1990​ поздравлять будете?​ мыши на панели​ для задания выпадающего​ и фона, соответственно​ способ.​ строчку​ форуму поискал -​ End Sub​ Вообще возможно сделать​ newVal​Создадим первый выпадающий список,​ «Сообщение об ошибке».​Очень удобный инструмент Excel​

Выбор поля со списком в Microsoft Excel

​ раз, выделяем верхние​ ленты», и ставим​ можно просто выбирать​ он не выдает​А пример всёж​

Форма списка в Microsoft Excel

​ инструментов) выбираешь ComboBox,​ списка. В меню​Большим и жирным плюсом​После нажатия на​

Переход в свойства элемента управления в Microsoft Excel

​Источник (Source)​ не нашел. А​StoTisteg​ всплывающее окошко об​Else​ куда войдут названия​ Если этого не​

Свойства элемента управления в Microsoft Excel

​ для проверки введенных​ ячейки, и при​ флажок напротив значения​ нужные параметры из​Юрий М​

Редактирование в Microsoft Excel

​ сообразите…​ вставляешь в ячейку​

Выпадающий список в приложении Microsoft Excel

​ откройте пункты «Данные»​ этого способа является​ОК​знак равенства и​ помнил, что что-то​: Ну так добавьте​ окончании действия инструкций?​

Протягивание выпадающего списка в Microsoft Excel

Связанные списки

​Target = newVal​ диапазонов.​ сделать, Excel не​ данных. Повысить комфорт​ нажатой клавише мышки​ «Разработчик». Жмем на​ сформированного меню. Давайте​: С чего Вы​Юрий М​ таблицы. В режиме​ — «Проверка». После​ возможность быстрого перехода​списком можно пользоваться.​ имя диапазона (т.е.​ подобное видел.​ последнюю строку End​Апострофф​

​End If​Когда поставили курсор в​ позволит нам вводить​ работы с данными​ «протаскиваем» вниз.​ кнопку «OK».​

Таблицы в Microsoft Excel

​ выясним, как сделать​ взяли? У Сотрудника​: Не создавайте дубликатов​ конструктора (кнопка с​ чего перейдите в​

Присваивание имени в Microsoft Excel

​ к нужному элементу​Чтобы вместо порядкового номера​=Товары​Кос​ Sub. И вообще​

Ввод данных в Microsoft Excel

​: Код в модуль​If Len(newVal) =​ поле «Источник», переходим​ новые значения.​ позволяют возможности выпадающих​Всё, таблица создана.​После этого, на ленте​

Ввод данных для второй ячейки в Microsoft Excel

​ раскрывающийся список различными​

Список создан в Microsoft Excel

​ 17 поставил дату​ тем!​ треугольником и карандашом)​ новом окне во​ в списке при​ элемента выводилось его​).​: Здравствуйте! Я так​

Таблица создана в Microsoft Excel

​ скопируйте код полностью,​

​ ЭтаКнига, и будете​ 0 Then Target.ClearContents​ на лист и​Вызываем редактор Visual Basic.​ списков: подстановка данных,​Мы разобрались, как сделать​ появляется вкладка с​ способами.​ 22.11.1990 — работает.​Ваших данных нет,​ тебе также доступны​ вкладку «Параметры» и​ вводе первых букв​

​ название можно дополнительно​

lumpics.ru

Отображение и скрытие всплывающих подсказок

​Нажмите​ сделал. Всё работает.​ а не только​ получать «всплывающие предупреждения»​Application.EnableEvents = True​ выделяем попеременно нужные​ Для этого щелкаем​

ScreenTip

​ отображение данных другого​ выпадающий список в​ названием «Разработчик», куда​Скачать последнюю версию​KuklP​ так что смотрите​ свойства и исходный​

Enhanced ScreenTip

В этой статье

​ в открывшемся поле​ с клавиатуры(!), чего​

​ использовать функцию​

Отображение и скрытие всплывающих подсказок

  1. ​ОК​​ Единственный минус(лично для​​ то, что видите,​

  2. ​ при каждом открытии.​​End If​​ ячейки.​

  3. ​ правой кнопкой мыши​​ листа или файла,​​ Экселе. В программе​

  4. ​ мы и перемещаемся.​​ Excel​​: Гляньте и мой.​​ на моих и​​ текст (двойной клик​

    • ​ «Тип данных» установите​​ нет у всех​ИНДЕКС (INDEX)​.​ меня),это то .что​ End Sub там​Private Sub Workbook_Open()​End Sub​Теперь создадим второй раскрывающийся​ по названию листа​ наличие функции поиска​ можно создавать, как​

    • ​ Чертим в Microsoft​Самым удобным, и одновременно​​ На работе как-то​ дорабатывайте сами.​ левой клавишей мыши​ строку «Список». При​ остальных способов. Приятным​, которая умеет выводить​

    • ​Все! Наслаждайтесь!​​ сначала частично открывется​ есть.​Dim ws As​Не забываем менять диапазоны​ список. В нем​ и переходим по​

​ и зависимости.​

Видео о всплывающих подсказках

​ простые выпадающие списки,​​ Excel список, который​ наиболее функциональным способом​ маялся.​хз​ на ComboBox сразу​ этом в том​

​ моментом, также, является​

support.office.com

Выпадающий список в Excel с помощью инструментов или макросов

​ содержимое нужной по​Важный нюанс. В качестве​ страница Эксель ,а​Апострофф​ Worksheet, rn As​ на «свои». Списки​ должны отражаться те​

​ вкладке «Исходный текст».​Путь: меню «Данные» -​ так и зависимые.​ должен стать выпадающим​ создания выпадающего списка,​Юрий М​: спасибо юрий м​ создает процедурку ComboBox1_Change()​ же окне появится​ возможность настройки визуального​

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

​ счету ячейки из​ источника данных для​ после всплывающее окно.​:​ Range, r As​

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

​ создаем классическим способом.​ слова, которые соответствуют​ Либо одновременно нажимаем​ инструмент «Проверка данных»​

  1. ​ При этом, можно​ меню. Затем, кликаем​Ввод значений.
  2. ​ является метод, основанный​: Что-то Вы путаете:​ это практически что​ — действия при​Проверка вводимых значений.
  3. ​ поле «Источник». Введите​ представления (цветов, шрифтов​ диапазона:​ списка может выступать​

Имя диапазона. Раскрывающийся список.

​ А можно сделать,чтоб​rinat_n​

​ Long​

Выпадающий список в Excel с подстановкой данных

​ А всю остальную​ выбранному в первом​ клавиши Alt +​ — вкладка «Параметры».​ использовать различные методы​ на Ленте на​ на построении отдельного​ в списке нет​

  1. ​ надо​ изменении содержимого). Соответственно​ в него символ​ и т.д.)​Форматировать как таблицу.
  2. ​Этот способ частично напоминает​ и динамический именованный​ наоборот? При запуске​, так Вы или​Dim NG As​ работу будут делать​ списке названию. Если​ F11. Копируем код​ Тип данных –​ создания. Выбор зависит​ значок «Вставить», и​ списка данных.​ НИ ОДНОГО дня​Выпадающий список.
  3. ​Hugo​ перед использованием, ComboBox​ «=» и имя​При использовании этого способа,​ предыдущий. Основное отличие​ диапазон, например прайс-лист.​ *.xlsx ,чтобы сначала​ код полностью скопируйте,​

Ввод значения в источник.

​ Long, NR As​ макросы.​ «Деревья», то «граб»,​

Список и таблица.

​ (только вставьте свои​ «Список».​

Добавлено значение елка.

​ от конкретного предназначения​

Удалено значение береза.

​ среди появившихся элементов​Прежде всего, делаем таблицу-заготовку,​ рождения в 2010​

​: Т.е. это будут​ необходимо заполнить значениями,​ выделенного диапазона, которое​ также возможно указывать​ в том, что​ Тогда при дописывании​ всплывало окно, а​

Ввод данных из списка.

  1. ​ или допишите этот​ Long​На вкладке «Разработчик» находим​ «дуб» и т.д.​ параметры).Private Sub Worksheet_Change(ByVal​Создание имени.
  2. ​Ввести значения, из которых​ списка, целей его​ в группе «Элемент​ где собираемся использовать​ году. О каких​
  3. ​ извещения о ещё​ грубо говоря опиши​ было задано ячейкам​ в качестве​ на лист добавляется​ новых товаров к​ потом уже открывалась​Сообщение об ошибке.
  4. ​ END SUB, раз​Dim D As​ инструмент «Вставить» –​ Вводим в поле​ Target As Range)​ будет складываться выпадающий​ создания, области применения,​ ActiveX» выбираем «Поле​ выпадающее меню, а​ «родяться» Вы говорите?​ не родившихся клиентах?​ процедуру заполнения (макрос)​ с данными. Для​ListFillRange​ не элемент управления,​ прайсу, они будут​ книга?!​ Бэйсику это нужно.​ Date​ «ActiveX». Здесь нам​ «Источник» функцию вида​ Dim lReply As​ список, можно разными​ и т.д.​ со списком».​ также делаем отдельным​openid.mail.ru/mail/vlad3622340​ :)​ например:​ применения параметров нажмите​не только одномерные​ а элемент ActiveX​ автоматически добавляться к​
  5. ​[email protected]​rinat_n​Сообщение об ошибке.
  6. ​For Each ws​ нужна кнопка «Поле​ =ДВССЫЛ(E3). E3 –​ Long If Target.Cells.Count​ способами:​Автор: Максим Тютюшев​Кликаем по месту, где​ списком данные, которые​

Макрос.

​: Немного изменил вариант​А с другой​Код:​ «Enter» или «Ок».​ диапазоны. Можно, например​»Поле со списком»​

​ выпадающему списку. Еще​: Чтобы отображалась только​: Апострофф, StoTisteg, сорри.​

Выпадающий список в Excel с данными с другого листа/файла

​ In ThisWorkbook.Worksheets​ со списком» (ориентируемся​ ячейка с именем​ > 1 Then​Вручную через «точку-с-запятой» в​Всплывающие подсказки представляют собой​ должна быть ячейка​ в будущем включим​ Юрия.​ стороны, если клиентов​Private Sub ComboBox1_DropButtonClick()​

  1. ​ Это вариант самого​ задать диапазон из​из раскрывающегося набора​
  2. ​ одним часто используемым​ форма, добавьте в​ Действительно не правильно​

​Set rn =​ на всплывающие подсказки).​ первого диапазона.​ Exit Sub If​ поле «Источник».​ небольшие окна, в​ со списком. Как​ в это меню.​25.09.1990 считается :)​ 1000, то грубо​

Как сделать зависимые выпадающие списки

​With ComboBox1​

Три именованных диапазона.

​ простого выпадающего списка.​ двух столбцов и​ под кнопкой​ трюком для таких​ код строку:​ скопировал скрипт. Подскажите​ ws.UsedRange​Щелкаем по значку –​

  1. ​Бывает, когда из раскрывающегося​ Target.Address = «$C$2″​Ввести значения заранее. А​Список диапазонов.
  2. ​ которых выводится текст​ видите, форма списка​ Эти данные можно​openid.mail.ru/mail/vlad3622340​ в среднем в​Таблица со списком.
  3. ​.AddItem «Раз», 0​3​ нескольких строк, указав​Вставить (Insert)​ списков является создание​Application.Visible = False​ возможно ли в​rn.Interior.Pattern = xlNone​ становится активным «Режим​ списка необходимо выбрать​ Then If IsEmpty(Target)​ в качестве источника​ описания при наведении​Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

    ​ появилась.​ размещать как на​: Вот файл​ день по 3,​.AddItem «Два», 1​

    1. ​Как сделать выпадающий​ дополнительно, что выводить​с вкладки​ связанных выпадающих списков​У кого мало времени​ также сделать в​For r =​ конструктора». Рисуем курсором​ сразу несколько элементов.​ Then Exit Sub​ указать диапазон ячеек​ указателя мыши на​Затем мы перемещаемся в​ этом же листе​хз​ итого если за​.AddItem «Три», 2​ список в экселе​ нужно два столбца​Разработчик (Developer)​ (когда содержимое одного​ и нужно быстро​ этом скрипте чтобы​ 3 To rn.Rows.Count​ (он становится «крестиком»)​ Рассмотрим пути реализации​
    2. ​ If WorksheetFunction.CountIf(Range(«Деревья»), Target)​ со списком.​ команду или элемент​ «Режим конструктора». Жмем​ документа, так и​: как мне еще​ 6 дней предупреждать​End With​При этом в​ (свойство​:​ списка меняется в​ ухватить суть -​ проверка проводилась циклически,​If IsDate(rn(r, «E»))​ небольшой прямоугольник –​ задачи.​ = 0 Then​Назначить имя для диапазона​
    3. ​ управления.​ на кнопку «Свойства​ на другом, если​ добавить клиентов после​ — каждый месидж​
      ​End Sub​ том же окне​
      ​ColumnCount​Механизм добавления тот же​
      ​ зависимости от выбора​ смотрим обучающее видео:​ по изменению и​ Then​
      ​ место будущего списка.​
      ​Создаем стандартный список с​
      ​ lReply = MsgBox("Добавить​
      ​ значений и в​
      ​Улучшенные всплывающие подсказки представляют​ элемента управления».​ вы не хотите,​
      ​ девятнадцатого​ на 18 фамилий...​Также заполненение ComboBox​
      ​ появится поле «Источник».​
      ​=2). Тогда можно получить​
      ​ - выбираем объект​
      ​ в другом).​Кому интересны подробности и​
      ​ по открытию документа​
      ​D = rn(r,​
      ​Жмем «Свойства» – открывается​

    ​ помощью инструмента «Проверка​ введенное имя «​ поле источник вписать​ собой окна большего​Открывается окно свойств элемента​ чтобы обе таблице​

    Выпадающий список с поиском

    1. ​Юрий М​Не просто всё​ можно повесить на​ Введите в него​ весьма привлекательные результаты,​ из списка и​Вставить ActiveX.
    2. ​Этот способ представляет собой​ нюансы всех описанных​ изменению​ «E»)​ перечень настроек.​ данных». Добавляем в​Элемент ActiveX.
    3. ​ & _ Target​ это имя.​Свойства ActiveX.
    4. ​ размера, которые содержат​ управления. В графе​ располагались визуально вместе.​: А зачем? Ведь​ это…​ открытие Документа…​ символ «=» и​ окупающие все потраченные​

    ​ рисуем его на​

    ​ вставку на лист​ способов — дальше​Апострофф​If D <​Вписываем диапазон в строку​ исходный код листа​ & » в​Любой из вариантов даст​ больше текста, чем​ «ListFillRange» вручную через​

    exceltable.com

Всплывающее окно как message box (Макросы/Sub)

​Выделяем данные, которые планируем​​ Вы писали, что​Юрий М​Валерий аникин​ имя выделенного диапазона,​ на дополнительные настройки​ листе. А вот​ нового объекта -​ по тексту.​: Можно.​ Date Then​ ListFillRange (руками). Ячейку,​ готовый макрос. Как​ выпадающий список?», vbYesNo​ такой результат.​ обычные подсказки, и​ двоеточие прописываем диапазон​ занести в раскрывающийся​ не работает как​: Конечно, нужно ставить​: в волрде такого​ которое было задано​ усилия:​ дальше начинаются серьезные​ элемента управления «поле​Один щелчок правой кнопкой​

​rinat_n​​’срок истек​​ куда будет выводиться​​ это делать, описано​ + vbQuestion) If​​ могут содержать ссылки​ ячеек таблицы, данные​
​ список. Кликаем правой​ надо :-)​ ограничения :-) но​ нет, но можно​ ячейкам с данными.​

​Способ 1.​​ отличия от предыдущего​ со списком» с​ мыши по пустой​: Апострофф, подскажите плиз​NR = NR​ выбранное значение –​ выше. С его​ lReply = vbYes​

​Необходимо сделать раскрывающийся список​​ на статьи справки.​ которой будут формировать​ кнопкой мыши, и​Просто скопируйте любую​
​ ведь я их​
​ сделать похожее: через​ Для применения установленных​Примитивный​ способа.​
​ последующей привязкой его​ ячейке под столбцом​ как сделать?​
​ + 1​ в строку LinkedCell.​
​ помощью справа от​ Then Range("Деревья").Cells(Range("Деревья").Rows.Count +​
​ со значениями из​Отображение и скрытие всплывающих​
​ пункты выпадающего списка.​
​ в контекстном меню​ ячейку столбца D.​
​ не знаю...​ сноску, через гиперссылку​
​ параметров нажмите «Enter»​Способ 2.​
​Во-первых, созданный выпадающий ActiveX​ к диапазонам на​
​ с данными, команда​
​StoTisteg​rn.Rows(r).Interior.Color = vbRed​
​ Для изменения шрифта​
​ выпадающего списка будут​ 1, 1) =​ динамического диапазона. Если​
​ подсказок​
​Далее, кликаем по ячейке,​ выбираем пункт «Присвоить​
​KuklP​
​Владимир​
​ (например будет открываться​
​ или «Ок». Это​
​Стандартный​
​ список может находится​ листе. Для этого:​ контекстного меню​
​: Тот же код​ElseIf D -​ и размера –​ добавляться выбранные значения.Private​
​ Target End If​
​ вносятся изменения в​

​Видео о всплывающих подсказках​​ и в контекстном​respect

​ имя…».​​: Приветствую всех. Юр,​: Наверное правильнее будет​ тексовый документик) ,​

​ вариант самого простого​​Способ 3.​​ в двух принципиально​​В Excel 2007/2010 откройте​Выбрать из раскрывающегося списка​ в модуль изменяемого​ 100 < Date​:)

​ Font.​​ Sub Worksheet_Change(ByVal Target​ End If End​ имеющийся диапазон (добавляются​

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

​ разных состояниях -​​ вкладку​​(Choose from drop-down list)​​ листа в Private​ Then​Скачать пример выпадающего списка​ As Range) On​ If End Sub​ или удаляются данные),​

​Файл​​ по пунктам «Объект​ В поле «Имя»​ 1000 будет? Это​ у которых ДР​

​ (но заметки будут​​4​Способ 4.​ режиме отладки, когда​Разработчик (Developer)​или нажать сочетание​ Sub Worksheet_Change(ByVal Target​’на подходе​При вводе первых букв​

​ Error Resume Next​​Сохраняем, установив тип файла​​ они автоматически отражаются​​.​ ComboBox» и «Edit».​ вписываем любое удобное​ ж крыша свалится​ через 3-5 дней.​

​ всегда торчать)​​Как сделать выпадающий​Элемент ActiveX​ можно настраивать его​. В более ранних​ клавиш​ As Range)​NG = NG​ с клавиатуры высвечиваются​ If Not Intersect(Target,​ «с поддержкой макросов».​

​ в раскрывающемся списке.​​Выберите​

​Выпадающий список в Microsoft​​ наименование, по которому​ ерзать по списку.​

​ Т.к. клиентов туева​​хз​ список в экселе​Сложность​ параметры и свойства,​ версиях — панель​

​ALT+стрелка вниз​​rinat_n​ + 1​ подходящие элементы. И​ Range(«Е2:Е9»)) Is Nothing​Переходим на лист со​Выделяем диапазон для выпадающего​Параметры​ Excel готов.​ будем узнавать данный​ Я сначала тоже​:)

​ хуча и перечисление​​: как сделать всплывающее​В Excel существует​низкая​ двигать его по​ инструментов​. Способ не работает,​: StoTisteg, еще вопрос​rn.Rows(r).Interior.Color = vbYellow​ это далеко не​ And Target.Cells.Count =​ списком. Вкладка «Разработчик»​ списка. В главном​.​Чтобы сделать и другие​ список. Но, это​ на эти грабли​

​ всех будет неудобоваримым.​​ окно, например о​ возможности для задания​средняя​:'(
​ листу и менять​Формы (Forms)​:D
​ если ячейку и​respect​ возможно ли в​End If​

excelworld.ru

Всплывающее окно при открытии файла

​ все приятные моменты​​ 1 Then Application.EnableEvents​
​ — «Код» -​ меню находим инструмент​Откройте раздел​ ячейки с выпадающим​ наименование должно начинаться​ стал. Но потом​—​ наступлении дня рождения​
​ выпадающего списка, обладающего​

​высокая​​ размеры и -​

​через меню​​ столбец с данными​ скрипте прописать чтобы​End If​ данного инструмента. Здесь​ = False If​ «Макросы». Сочетание клавиш​

​ «Форматировать как таблицу».​​Общие​ списком, просто становимся​ обязательно с буквы.​ сделал то, что​66022​ для столбца​ более сложной конструкцией.​Возможность настройки шрифта, цвета​ режиме ввода, когда​Вид — Панели инструментов​ отделяет хотя бы​ при всплывающем окне​Next r​

​ можно настраивать визуальное​​ Len(Target.Offset(0, 1)) =​ для быстрого вызова​Откроются стили. Выбираем любой.​
​.​

planetaexcel.ru

Выпадающий список в ячейке листа

Видео

​ на нижний правый​ Можно также вписать​ выложил.​хз​

​R Dmitry​ Для этого применяют​ и т.д.​ единственное, что можно​

Способ 1. Примитивный

​ — Формы (View​ одна пустая строка​ выходил список просроченных​Next ws​ представление информации, указывать​​ 0 Then Target.Offset(0,​ ​ – Alt +​​ Для решения нашей​В разделе​​ край готовой ячейки,​​ примечание, но это​Юрий М​: а вот как​: ​ элемент управления под​нет​ — выбирать из​ — Toolbars -​ или вам нужен​

Как вȎxcel сделать всплывающее окно

Способ 2. Стандартный

  1. ​ инструкций? Если напиши​If NG +​ в качестве источника​ 1) = Target​
  2. ​ F8. Выбираем нужное​ задачи дизайн не​Параметры пользовательского интерфейса​ нажимаем кнопку мыши,​​ не обязательно. Жмем​: Привет! А я​ ​ поставить что бы​Уважаемый хз(надеюсь не​​ названием «поле со​нет​ него данные. Переключение​​ Forms)​​ товар, который еще​​ пожалуйста как сделать​​ NR > 0​​ сразу два столбца.​​ Else Target.End(xlToRight).Offset(0, 1)​ имя. Нажимаем «Выполнить».​ имеет значения. Наличие​в списке​ и протягиваем вниз.​ на кнопку «OK».​​ чё? Я не​​ он выдовал не​​ «хрен знает»)​​ списком» , вставляемый​
  3. ​да​ между этими режимами​. Если этой вкладки​ ни разу не​ и какой скрипт.​ Then​​rinat_n​ = Target End​​Когда мы введем в​​ заголовка (шапки) важно.​​Стиль всплывающих подсказок​​Также, в программе Excel​​Переходим во вкладку «Данные»​ виноват. Можно список​​ только тех людей​​вы бы примерчик​ на рабочий лист​​Количество отображаемых строк​​ происходит с помощью​

Как вȎxcel сделать всплывающее окно

​ не видно, то​​ вводился выше:​​ Спасибо большое, мастерам​

​MsgBox «Просроченные выделены​

Как вȎxcel сделать всплывающее окно

​: Добрый день форумчане.​ If Target.ClearContents Application.EnableEvents​ пустую ячейку выпадающего​ В нашем примере​выберите нужный параметр.​ можно создавать связанные​ программы Microsoft Excel.​ отсортировать… Будем надеяться,​ у которые родились​ приложили где дата​ Excel. Чтобы его​всегда 8​ кнопки​ нажмите кнопку​Выделите ячейки с данными,​ да своего дела​ красным, с истекающим​ Помогите решить одну​

Способ 3. Элемент управления

​ = True End​ списка новое наименование,​ это ячейка А1​Показывать расширенные всплывающие подсказки.​ выпадающие списки. Это​ Выделяем область таблицы,​ что у автора​ в 2010, но​

  1. ​ как должно сработать​ установить, откройте в​​любое​​Режим Конструктора (Design Mode)​Офис — Параметры Excel​ которые должны попасть​​StoTisteg​​ сроком (через 100​​ задачку в части​ If End Sub​ появится сообщение: «Добавить​ со словом «Деревья».​​     Этот параметр включает​ такие списки, когда​ где собираемся применять​​ небольшой коллектив. В​ ​ и других?​​ да и примеров​​ меню пункты «Вид»​Быстрый поиск элемента по​на вкладке​-​ в выпадающий список​: Это лучше не​
  2. ​ дней) — желтым.»​ excel. Есть документ​Чтобы выбранные значения показывались​ введенное имя баобаб​ То есть нужно​​ отображение как улучшенных,​​ при выборе одного​
    Как вȎxcel сделать всплывающее окно
    ​ выпадающий список. Жмем​ противном случаем действительно​Hugo​ на форуме полно,​
  3. ​ , затем «Панели​ первым буквам​Разработчик (Developer)​​флажок​​ (например, наименованиями товаров).​ Msgbox’ом, а формой.​
  • ​End If​​ в котором есть​ снизу, вставляем другой​ в выпадающий список?».​ выбрать стиль таблицы​
  • ​ так и обычных​​ значения из списка,​ на кнопку «Проверка​ нужны другие варианты.​: Вы хотели сказать​
  • ​ помню месяц назад​​ инструментов» и подпункт​нет​:​Отображать вкладку Разработчик на​Если у вас Excel​ Если достаточно вывести​End Sub​

​ список документов с​​ код обработчика.Private Sub​​Нажмем «Да» и добавиться​

​ со строкой заголовка.​ всплывающих подсказок для​ в другой графе​ данных», расположенную на​​Макрос уже готов. Запускается​​ — которые родятся​ делали похожее :)​ «Формы».​нет​

Как вȎxcel сделать всплывающее окно

Способ 4. Элемент ActiveX

​Если эта кнопка нажата,​ ленте (Office Button​ 2003 или старше​ «красные», то много​rinat_n​ датами начала действия​​ Worksheet_Change(ByVal Target As​​ еще одна строка​ Получаем следующий вид​​ вывода дополнительных сведений​​ предлагается выбрать соответствующие​​ Ленте.​​ кнопкой. Но нужно​

Как вȎxcel сделать всплывающее окно

​ в 2010? :)​R Dmitry​5​да​ то мы можем​ — Excel Options​ — выберите в​ изменений не потребуется,​

​: Апострофф, спасибо большое.​ и окончания действия​ Range) On Error​ со значением «баобаб».​ диапазона:​ о командах, например​ ему параметры. Например,​Открывается окно проверки вводимых​ сделать так, чтобы​хз​: От безделия даже​Выберите на открывшейся​Необходимость использования дополнительной функции​ настраивать параметры выпадающего​ — Show Developer​ меню​ в начале чистим​​rinat_n​​ инструкций. Вот необходимо​​ Resume Next If​​Когда значения для выпадающего​

Как вȎxcel сделать всплывающее окно

​Ставим курсор в ячейку,​ имени команды, сочетания​ при выборе в​ значений. Во вкладке​ после нажатия кнопки​​: нет это окно​​ нашел вам то​ панели элементов управления​ИНДЕКС​ списка, нажав соседнюю​

Как вȎxcel сделать всплывающее окно

​ Tab in the​Вставка — Имя -​ ListBox формы, вместо​

  • ​: Апострофф, Данный скрипт​​ создать напоминалку (всплывающее​ Not Intersect(Target, Range(«Н2:К2»))​ списка расположены на​ где будет находиться​ клавиш, графических элементов​ списке продуктов картофеля,​ «Параметры» в поле​ и выполнения макроса​
  • ​ всплывает на тех​​ что hugo делал​ значок «поле со​нет​ кнопку​
  • ​ Ribbon)​​ Присвоить​ (или после) rn.Rows®.Interior.Color​
  • ​ добавляем в макрос​​ окно) допустим за​ Is Nothing And​ другом листе или​ выпадающий список. Открываем​
  • ​ и ссылок на​​ предлагается выбрать как​​ «Тип данных» выбираем​​ вышло окно, на​ кто родиться только​

​39353​ списком» — это​да​Свойства (Properties)​Найдите значок выпадающего списка​(Insert — Name -​ = vbRed добавляем​ и все?​ неделю до окончания​ Target.Cells.Count = 1​ в другой книге,​ параметры инструмента «Проверка​ статьи справки. Он​

​ меры измерения килограммы​ параметр «Список». В​ котором будет написано,​​ в 2010 а​​KuklP​ и есть выпадающий​нет​, которая откроет окно​ среди элементов управления​ Define),​ в него параметр​StoTisteg​​ действия инструкции. Подскажите​​ Then Application.EnableEvents =​ стандартный способ не​ данных» (выше описан​ выбран по умолчанию.​ и граммы, а​

Как вȎxcel сделать всплывающее окно

Итоговая сравнительная таблица всех способов

​ поле «Источник» ставим​​ типа «Я макрос,​ ​ на остальных кто​​: Привет, Дим. Там​ ​ список. Нарисуйте мышкой​​Возможность создания связанных выпадающих​ ​ со списком всех​​ форм (не ActiveX!).​
​если Excel 2007​ ​ истёкшей инструкции, после​ ​:​ ​ такое возможно сделать​
​ False If Len(Target.Offset(1,​ работает. Решить задачу​ ​ путь). В поле​ ​Не показывать расширенные всплывающие​ ​ при выборе масла​
​ знак равно, и​ ​ я сам все​ ​ например в 1990​
​ вроде о будильнике​ прямоугольник в форме​ ​ списков​ ​ возможных настроек для​ ​ Ориентируйтесь по всплывающим​
​ или новее -​​ завершения цикла по​ ​Апострофф​ ​ в excel в​ ​ 0)) = 0​
​ можно с помощью​ «Источник» прописываем такую​ ​ подсказки.​ ​ растительного – литры​ ​ сразу без пробелов​

planetaexcel.ru

Знатокам Word, Excel. Как сделать при наведении мышки на слово или элемент выпадающее сообщение?

​ сделал»)​​ не всплывает​ речь шла. А​ поля. Выделите правой​нет​

​ выделенного объекта:​​ подсказкам -​
​ откройте вкладку​ ws проверяем число​
​, я бы на​ виде скрипта как​ Then Target.Offset(1, 0)​ функции ДВССЫЛ: она​ функцию:​     Этот параметр отключает​ и миллилитры.​ пишем имя списка,​Александр погребняк​Юрий М​ тут напоминалка о​ кнопкой мыши нарисованный​да​
​Самые нужные и полезные​
​Поле со списком​Формулы (Formulas)​
​ Item’ов в ListBox’е​ Activate повесил на​ message box?. К​ = Target Else​ сформирует правильную ссылку​Протестируем. Вот наша таблица​ отображение улучшенных всплывающих​Прежде всего, подготовим таблицу,​ которое присвоили ему​: Макросы — выделяешь​: Посмотрите здесь:​ ДР нужна. Я​ список и укажите​нет​ свойства, которые можно​:​и воспользуйтесь кнопкой​ и если больше​ случай месяцами не​ сообщению прикладываю частичку​ Target.End(xlDown).Offset(1, 0) =​ на внешний источник​ со списком на​ подсказок для вывода​
​ где будут располагаться​
​ выше. Жмем на​ свой макрос -​
​Если бы Вы​ такую выкладывал как-то.​ команду «Формат объекта…».​Anatoliy​ и нужно настроить:​Щелкните по значку​Диспетчер имен (Name Manager)​ нуля, вызываем форму.​ перезагружаемого компа​ файла. Данная напоминалка​ Target End If​ информации.​ одном листе:​
​ только имени команды​
​ выпадающие списки, и​ кнопку «OK».​
​ Изменить — перед​ обратили внимание на​Юрий М​6​: Кликаешь правой клавишей​ListFillRange​ и нарисуйте небольшой​, затем​rinat_n​rinat_n​ нужна, так как​ Target.ClearContents Application.EnableEvents =​Делаем активной ячейку, куда​Добавим в таблицу новое​ и, возможно, сочетания​
​ отдельно сделаем списки​
​Выпадающий список готов. Теперь,​ последней строчкой End​ моё сообщение 23.09.2010,​: Я тоже что-то​Как сделать выпадающий​ мыши/выбираешь из списка,​- диапазон ячеек,​ горизонтальный прямоугольник -​Создать​: StoTisteg, напишите пожалуйста​: StoTisteg, подскажите Activate​
​ периодически забывается обновить​
​ True End If​ хотим поместить раскрывающийся​
​ значение «елка».​ клавиш.​ с наименованием продуктов​ при нажатии на​ Sub вставляешь MsgBox​ 22:47 и набрали​ такое делал. Помню,​ список в экселе​ вставить примечание, так​ откуда берутся данные​ будущий список.​. Введите имя (можно​ скрипт, дабы мне​ куда добавить? чтоб​ инструкцию. Также возможно​ End Sub​ список.​Теперь удалим значение «береза».​Не показывать всплывающие подсказки.​ и мер измерения.​
​ кнопку у каждой​
​ («Работа макроса окончена»).​ в поиске -​ там ещё была​В появившемся диалоговом​ же можешь гиперссылку.​ для списка. Выделить​Щелкните по нарисованному списку​ любое, но обязательно​ не совершить ошибок​ месяц проверку проводил.​ ли напоминалку разнести​Чтобы выбираемые значения отображались​Открываем параметры проверки данных.​Осуществить задуманное нам помогла​     Этот параметр отключает​Присваиваем каждому из списков​ ячейки указанного диапазона​ Отправил пример на​ мигалка, то сами​ мигалка (ZVI помог).​ окне в поле​
​Антон​
​ мышью диапазон он​
​ правой кнопкой мыши​
​ без пробелов и​
​Программирование мне не​
​Апострофф​
​ на несколько страниц​
​ в одной ячейке,​
​ В поле «Источник»​ «умная таблица», которая​ отображение как улучшенных,​

​ именованный диапазон, как​​ будет появляться список​ почту​ нашли бы это.​ В поиск -​ «Формировать список по​: 1​ не даст, надо​ и выберите команду​ начать с буквы!)​

всплывающее окно

​ дано​​:​ в одной книге?​ разделенные любым знаком​ вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).​

​ легка «расширяется», меняется.​​ так и обычных​
​ это мы уже​ параметров, среди которых​
​Pauk​Владимир​ напоминалка. Выбор есть​ диапазону» задайте нужный​Как сделать выпадающий​ просто вписать его​Формат объекта (Format control)​

​ для выделенного диапазона​​А Вам​rinat_n​Апострофф​

​ препинания, применим такой​

​Имя файла, из которого​​Теперь сделаем так, чтобы​ всплывающих подсказок для​ делали ранее с​ можно выбрать любой​: Тут поищи​: А откуда Вы​

​ :-)​​ диапазон ячеек. Для​ список в экселе​ руками с клавиатуры​. В появившемся диалоговом​ (например​за ответы и​, Вы читать умеете?​

​:​​ модуль.​ берется информация для​ можно было вводить​ вывода только имени​

​ обычными выпадающими списками.​​ для добавления в​άηϑρέΰ βσλσRσδζκμù ҂ 483643853​ знаете, кто и​vikttur​ этого мышкой выделите​В таблице или​ (например, Лист2!A1:A5)​

​ окне задайте​​Товары​ пути решений​ или​rinat_n​Private Sub Worksheet_Change(ByVal​
​ списка, заключено в​ новые значения прямо​

​ команды.​​В первой ячейке создаём​ ячейку.​
​: MsgBox в помощь​ когда родится в​: Я таких примеров​ ячейки, которые должны​

​ списке выделите ячейки​​LinkedCell​Формировать список по диапазону​). Нажмите​

​AchilleS​​THISWORKBOOK​, непонятно что у​ Target As Range)​ квадратные скобки. Этот​
​ в ячейку с​В начало страницы​ список точно таким​Второй способ предполагает создание​Abram pupkin​ будущем?​ не встречал. У​ попасть в данный​ с теми данными,​
​- связанная ячейка,​- выделите ячейки​

​ОК​​: Добрый день!​, если не по​ вас в столбце​On Error Resume​

​ файл должен быть​​ этим списком. И​Примечание:​ же образом, как​ выпадающего списка с​: Функция Msgbox выводит​хз​ каждого столбца свой?​

​ выпадающий список Excel.​
​ которые вы хотите​

​ куда будет выводиться​​ с наименованиями товаров,​.​Подскажите, пожалуйста, как​ нашенскому.​ Е — дата​ Next​ открыт. Если книга​

​ данные автоматически добавлялись​​  В видео показан​ делали это ранее,​ помощью инструментов разработчика,​

​ на экран сообщение.​​: вот именно я​ :)​ В поле «Связь​ поместить в выпадающий​ выбранный из списка​ которые должны попасть​Выделите ячейки (можно сразу​

​ сделать так, чтобы​​StoTisteg​
​ последнего пересмотра или​If Not Intersect(Target,​ с нужными значениями​ в диапазон.​ пользовательский интерфейс Office​ через проверку данных.​ а именно с​

​Скопируй и вставь​​ не знаю когда​Guest​ с ячейкой» установите​ список. В меню​

​ элемент​​ в список​ несколько), в которых​ при открытии определенного​:​

​ дата следующего пересмотра.​​ Range(«C2:C5»)) Is Nothing​ находится в другой​Сформируем именованный диапазон. Путь:​ 2010, однако оно​

​Во второй ячейке тоже​​ использованием ActiveX. По​ после макроса :​ у этих клиентов​: мне надо когда​ номер ячейки для​ выберите пункты «Вставка»​

​ListRows​​Связь с ячейкой​ хотите получить выпадающий​ файла появлялось окошко​rinat_n​

​Если последнего, то​​ And Target.Cells.Count =​ папке, нужно указывать​ «Формулы» — «Диспетчер​

​ хорошо демонстрирует работу​​ запускаем окно проверки​ умолчанию, функции инструментов​MsgBox » Все​ день рождение​ заходиш в фаил​ вывода порядкового номера​

​ — «Имя» -​​- количество отображаемых​- укажите ячейку​
​ список и выберите​

​ с определенной информацией​​, всё тот же​

​ какого рожна там​​ 1 Then​ путь полностью.​ имен» — «Создать».​

​ аналогичных функций и​​ данных, но в​ разработчика отсутствуют, поэтому​ готово !» &​Юрий М​
​ что бы всплывало​ элемента, выбранного в​

​ «Присвоить». Далее, в​​ строк​ куда нужно выводить​ в меню (на​ (например, инструкцией к​ код в точности​ делает формула, да​Application.EnableEvents = False​Возьмем три именованных диапазона:​ Вводим уникальное название​ в Office 2013.​

​ графе «Источник» вводим​​ нам, прежде всего,​ vbLf & «​: хз, Вы мой​ окно автоматически что​ списке. Задайте требуемое​ запрашиваемом поле, введите​Font​ порядковый номер выбранного​

planetaexcel.ru

Как сделать всплывающее окно в EXcel так, чтобы по окончанию работы макроса вышло маленькое сообщение «Расчет окончен»

​ вкладке)​ тому, что находится​ туда же, только​ ещё и кривая​newVal = Target​Это обязательное условие. Выше​ диапазона – ОК.​В начало страницы​ функцию «=ДВССЫЛ» и​ нужно будет их​

​ Макрос решил вашу​​ мой второй файл​ у одного из​ количество строк создаваемого​ имя для выделенного​- шрифт, размер,​ пользователем элемента.​Данные — Проверка (Data​ в файле).​

​ вместо Private Sub​​ к тому же?​

​Application.Undo​​ описано, как сделать​

​Создаем раскрывающийся список в​​Под выпадающим списком понимается​ адрес первой ячейки.​
​ включить. Для этого,​ проблему «​
​ из темы, указанной​ клиентов сегодня день​ списка. Кнопка «Ок»​ диапазона и нажмите​ начертание (курсив, подчеркивание​

​Количество строк списка​

В этой заметке описываются методы создания пользовательских диалоговых окон, которые существенно расширяют стандартные возможности Excel. Диалоговые окна – это наиболее важный элемент пользовательского интерфейса в Windows. Они применяются практически в каждом приложении Windows, и большинство пользователей неплохо представляет, как они работают. Разработчики Excel создают пользовательские диалоговые окна с помощью пользовательских форм (UserForm). Кроме того, в VBA имеются средства, обеспечивающие создание типовых диалоговых окон.[1]

Рис. 1. Работа процедуры GetName

Скачать заметку в формате Word или pdf, примеры в архиве

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

Использование окон ввода данных

Окно ввода данных — это простое диалоговое окно, которое позволяет пользователю ввести одно значение. Например, можно применить окно ввода данных, чтобы предоставить пользователю возможность ввести текст, число или диапазон значений. Для создания окна ввода предназначены две функции InputBox: одна— в VBA, а вторая является методом объекта Application.

Функция InputBox в VBA

Функция имеет следующий синтаксис:

InputBox(запрос [, заголовок] [, по_умолчанию] [, xpos] [, ypos] [, справка, раздел])

  • Запрос. Указывает текст, отображаемый в окне ввода (обязательный параметр).
  • Заголовок. Определяет заголовок окна ввода (необязательный параметр).
  • По_умолчанию. Задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр).
  • xpos, ypos. Определяют координаты верхнего левого угла окна ввода на экране (необязательные параметры).
  • Справка, раздел. Указывают файл и раздел в справочной системе (необязательные параметры).

Функция InputBox запрашивает у пользователя одно значение. Она всегда возвращает строку, поэтому результат нужно будет преобразовать в числовое значение. Текст, отображаемый в окне ввода, может достигать 1024 символов (длину допускается изменять в зависимости от ширины используемых символов). Если определить раздел справочной системы, то в диалоговом окне будет отображена кнопка Справка.

Процедура GetName запрашивает у пользователя полное имя (имя и фамилию). Затем программа выделяет имя и отображает приветствие в окне сообщения (см. рис. 1; код функции можно найти в файле VBA inputbox.xlsm).

Sub GetName()

    Dim UserName As String

    Dim FirstSpace As Integer

    Do Until UserName <> «»

        UserName = InputBox(«Укажите имя и фамилию: «, _

            «Назовите себя»)

    Loop

    FirstSpace = InStr(UserName, » «)

    If FirstSpace <> 0 Then

        UserName = Left(UserName, FirstSpace 1)

    End If

    MsgBox «Привет « & UserName

End Sub

Обратите внимание: функция InputBox вызывается в цикле Do Until. Это позволяет убедиться в том, что данные введены в окно. Если пользователь щелкнет на кнопке Отмена или не введет текст, то переменная UserName будет содержать пустую строку, а окно ввода данных появится повторно. Далее в процедуре будет предпринята попытка получить имя пользователя путем поиска первого символа пробела (для этого применяется функция InStr). Таким образом, можно воспользоваться функцией Left для получения всех символов, расположенных слева от символа пробела. Если символ пробела не найден, то используется все введенное имя.

Если строка, предоставленная в качестве результата выполнения функции InputBox, выглядит как число, ее можно преобразовать с помощью функции VBA Val.

В процедуре GetWord пользователю предлагается ввести пропущенное слово (рис. 2). Этот пример также иллюстрирует применение именованных аргументов (р и t). Текст запроса выбирается из ячейки А1 рабочего листа.

Sub GetWord()

    Dim TheWord As String

    Dim p As String

    Dim t As String

    p = Range(«A1»)

    t = «Какое слово пропущено?»

    TheWord = InputBox(prompt:=p, Title:=t)

    If UCase(TheWord) = «ВОДОКАЧКУ» Then

        MsgBox «Верно.»

    Else

        MsgBox «Не верно.»

    End If

End Sub

Рис. 2. Использование функции VBA inputBox, отображающей запрос

Метод Excel InputBox

Метод Excel InputBox по сравнению с функцией VBA InputBox предоставляет три преимущества:

  • возможность задать тип возвращаемого значения;
  • возможность указать диапазон листа путем выделения с помощью мыши;
  • автоматическая проверка правильности введенных данных.

Метод InputBox имеет следующий синтаксис.

InputBox(запрос, [, заголовок], [, по_умолчанию], [, слева], [, сверху], [, справка, раздел], [, тип])

  • Запрос. Указывает текст, отображаемый в окне ввода (обязательный параметр).
  • Заголовок. Определяет заголовок окна ввода (необязательный параметр).
  • По_умолчанию. Задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр).
  • Слева, сверху. Определяют координаты верхнего левого угла окна ввода на экране (необязательные параметры).
  • Справка, раздел. Указывают файл и раздел в справочной системе (необязательные параметры).
  • Тип. Указывает код типа данных, который будет возвращаться методом (необязательный параметр; значения см. рис. 3).

Рис. 3. Коды типов данных, возвращаемые методом Excel InputBox

Используя сумму приведенных выше значений, можно возвратить несколько типов данных. Например, для отображения окна ввода, которое принимает текстовый или числовой тип данных, установите код равным 3 (1 + 2 или число + текст). Если в качестве кода типа данных применить значение 8, то пользователь сможет ввести в поле адрес ячейки или диапазона ячеек. Пользователь также можент выбрать диапазон на текущем рабочем листе.

В процедуре EraseRange используется метод InputBox. Пользователь может указать удаляемый диапазон (рис. 4). Адрес диапазона вводится в окно вручную, или выделяется мышью на листе. Метод InputBox с кодом 8 возвращает объект Range (обратите внимание на ключевое слово Set). После этого выбранный диапазон очищается (с помощью метода Clear). По умолчанию в поле окна ввода отображается адрес текущей выделенной ячейки. Если в окне ввода щелкнуть на кнопке Отмена, то оператор On Error завершит процедуру.

Sub EraseRange()

    Dim UserRange As Range

    On Error GoTo Canceled

    Set UserRange = Application.InputBox _

        (Prompt:=«Удаляемый диапазон:», _

        Title:=«Удаление диапазона», _

        Default:=Selection.Address, _

        Type:=8)

    UserRange.Clear

    UserRange.Select

Canceled:

End Sub

Рис. 4. Пример использования метода InputBox для выбора диапазона

Если в процедуре EraseRange ввести не диапазон адресов, то Excel отобразит сообщение (рис. 5) и позволит пользователю повторить ввод данных.

Рис. 5. Метод InputBox автоматически проверяет вводимые данные

Функция VBA MsgBox

Функция VBA MsgBox служит для отображения сообщения. Также она передает результат щелчка на кнопке ОК или Отмена). Синтаксис функции:

MsgBox(запрос[, кнопки][, заголовок][, справка, раздел])

  • Запрос. Определяет текст, который будет отображаться в окне сообщения (обязательный параметр).
  • Кнопки. Содержит числовое выражение (или константу), которое определяет кнопки, отображаемые в окне сообщения (необязательный параметр; рис. 6). Также можно задать кнопку по умолчанию.
  • Заголовок. Содержит заголовок окна сообщения (необязательный параметр).
  • Справка, раздел. Указывают файл и раздел справочной системы (необязательные параметры).

Рис. 6. Константы и значения, используемые для выбора кнопок в функции MsgBox

Первая группа значений (0–5) описывает номер и тип кнопок в диалоговом окне. Вторая группа (16, 32, 48, 64) описывает стиль значка. Третья группа (0, 256, 512) определяет, какая кнопка назначена по умолчанию. Четвертая группа (0, 4096) определяет модальность окна сообщения. Пятая указывает, показывать ли окно сообщений поверх других окон, устанавливает выравнивание и направление текста. В процессе сложения чисел для получения окончательного значения аргумента Buttons следует использовать только одно число из каждой группы.

Можно использовать функцию MsgBox в качестве процедуры (для отображения сообщения), а также присвоить возвращаемое этой функцией значение переменной. Функция MsgBox возвращает результат, представляющий кнопку, на которой щелкнул пользователь. В следующем примере отображается сообщение и не возвращается результат (код функций, приведенных в этом разделе см. также в файле VBA msgbox.xlsm).

Sub MsgBoxDemo()

    MsgBox «При выполнении макроса ошибок не произошло.»

End Sub

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

Sub GetAnswer()

    Dim Ans As Integer

    Ans = MsgBox(«Продолжать?», vbYesNo)

    Select Case Ans

        Case vbYes

            ‘ … [код при Ans равно Yes]

        Case vbNo

            ‘ ... [код при Ans равно No]

    End Select

End Sub

Рис. 7. Константы, возвращаемые MsgBox

Функция MsgBox возвращает переменную, имеющую тип Integer. Вам необязательно использовать переменную для хранения результата выполнения функции MsgBox. Следующая процедура представляет собой вариацию процедуры GetAnswer.

Sub GetAnswer2()

    If MsgBox(«Продолжать?», vbYesNo) = vbYes Then

‘ … [код при Ans равно Yes]

    Else

... [код при Ans равно No]

    End If

End Sub

В следующем примере функции используется комбинация констант для отображения окна сообщения с кнопками Да, Нет и знаком вопроса (рис. 8). Вторая кнопка (Нет) используется по умолчанию. Для простоты константы добавлены в переменную Config.

Private Function ContinueProcedure() As Boolean

   Dim Config As Integer

   Dim Ans As Integer

   Config = vbYesNo + vbQuestion + vbDefaultButton2

   Ans = MsgBox(«Произошла ошибка. Продолжить?», Config)

   If Ans = vbYes Then ContinueProcedure = True _

      Else ContinueProcedure = False

End Function

Рис. 8. Параметр Кнопки функции MsgBox определяет кнопки, которые отображаются в окне сообщения

В файле VBA msgbox.xlsm функция ContinueProcedure в демонстрационных целях представлена в виде процедуры. Функция ContinueProcedure может вызываться из другой процедуры. Например, оператор

If Not ContinueProcedure() Then Exit Sub

вызывает функцию ContinueProcedure (которая отображает окно сообщения). Если функция возвращает значение ЛОЖЬ (т.е. пользователь щелкнул на кнопке Нет), то процедура будет завершена. В противном случае выполняется следующий оператор.

Если в сообщении необходимо указать разрыв строки (рис. 9), воспользуйтесь константой vbCrLf (или vbNewLine):

Sub MultiLine()

    Dim Msg As String

    Msg = «Это первая строка.» & vbCrLf & vbNewLine

    Msg = Msg & «Вторая строка.» & vbCrLf

    Msg = Msg & «Третья строка.»

    MsgBox Msg

End Sub

Рис. 9. Разбиение сообщения на несколько строк

Для включения в сообщение символа табуляции применяется константа vbTab. В процедуре ShowRange окно сообщения используется для отображения диапазона значений размером 10 строк на 3 столбца — ячейки А1:С10 (рис. 10). В этом случае столбцы разделены с помощью константы vbTab. Новые строки вставляются с помощью константы vbCrLf. Функция MsgBox принимает в качестве параметра строку, длина которой не превышает 1023 символов. Такая длина задает ограничение на количество ячеек, которое можно отобразить в сообщении.

Sub ShowRange()

    Dim Msg As String

    Dim r As Integer, c As Integer

    Msg = «»

    For r = 1 To 10

        For c = 1 To 3

            Msg = Msg & Cells(r, c).Text

            If c <> 3 Then Msg = Msg & vbTab

            Next c

            Msg = Msg & vbCrLf

        Next r

    MsgBox Msg

End Sub

Рис. 10. Текст в этом окне сообщения содержит символы табуляции и разрыва строк

Метод Excel GetOpenFilename

Если приложению необходимо получить от пользователя имя файла, то можно воспользоваться функцией InputBox, но этот подход часто приводит к возникновению ошибок. Более надежным считается использование метода GetOpenFilename объекта Application, который позволяет удостовериться, что приложение получило корректное имя файла (а также его полный путь). Данный метод позволяет отобразить стандартное диалоговое окно Открытие документа, но при этом указанный файл не открывается. Вместо этого метод возвращает строку, которая содержит путь и имя файла, выбранные пользователем. По окончании данного процесса с именем файла можно делать все что угодно. Синтаксис (все параметры необязательные):

Application.GetOpenFilename(фильтр_файла, индекс_фильтра, заголовок, множественный_выбор)

  • Фильтр_файла. Содержит строку, определяющую критерий фильтрации файлов (необязательный параметр).
  • Индекс_фильтра. Указывает индексный номер того критерия фильтрации файлов, который используется по умолчанию (необязательный параметр).
  • Заголовок. Содержит заголовок диалогового окна (необязательный параметр). Если этот параметр не указать, то будет использован заголовок Открытие документа.
  • Множественный_выбор. Необязательный параметр. Если он имеет значение ИСТИНА, можно выбрать несколько имен файлов. Имя каждого файла заносится в массив. По умолчанию данный параметр имеет значение ЛОЖЬ.

Аргумент Фильтр_файла определяет содержимое раскрывающегося списка Тип файлов, находящегося в окне Открытие документа. Аргумент состоит из строки, определяющей отображаемое значение, а также строки действительной спецификации типа файлов, в которой находятся групповые символы. Оба элемента аргумента разделены запятыми. Если этот аргумент не указывать, то будет использовано значение, заданное по умолчанию: "Все файлы (*.*),*.*". Первая часть строки Все файлы (*.*) – то текст, отображаемый в раскрывающемся списке тип файлов. Вторая часть строки *.* указывает тип отображаемых файлов.

В следующих инструкциях переменной Filt присваивается строковое значение. Эта строка впоследствии используется в качестве аргумента фильтр_файла метода GetOpenFilename. В данном случае диалоговое окно предоставит пользователю возможность выбрать один из четырех типов файлов (кроме варианта Все файлы). Если задать значение переменной Filt, то будет использоваться оператор конкатенации строки VBA. Этот способ упрощает управление громоздкими и сложными аргументами.

Filt = «Текстовые файлы (*.txt),*.txt,» & _

   «Файлы Lotus (*.prn),*.prn,» & _

   «Файлы, разделенные запятой (*.csv),*.csv,» & _

   «Файлы ASCII (*.asc),*.asc,» & _

   «Все файлы (*.*),*.*»

В следующем примере у пользователя запрашивается имя файла. При этом в поле типа файлов используются пять фильтров (код содержится в файле prompt for file.xlsm).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

Sub GetImportFileName()

    Dim Filt As String

    Dim FilterIndex As Integer

    Dim FileName As Variant

    Dim Title As String

‘   Настройка списка фильтров

    Filt = «Text Files (*.txt),*.txt,» & _

            «Lotus Files (*.prn),*.prn,» & _

            «Comma Separated Files (*.csv),*.csv,» & _

            «ASCII Files (*.asc),*.asc,» & _

            «Все файлы (*.*),*.*»

   Отображает *.* по умолчанию

    FilterIndex = 3

‘   Настройка заголовка диалогового окна

    Title = «Выберите файл для импорта»

   Получение имени файла

    FileName = Application.GetOpenFilename _

        (FileFilter:=Filt, _

         FilterIndex:=FilterIndex, _

         Title:=Title)

‘   При отмене выйти из окна

    If FileName = False Then

        MsgBox «Файл не выбран.»

        Exit Sub

    End If

   Отображение полного имени и пути

    MsgBox «Вы выбрали « & FileName

End Sub

На рис. 11 показано диалоговое окно, которое выводится на экран после выполнения этой процедуры (по умолчанию предлагается фильтр *.csv).

Рис. 11. Метод GetOpenFilename отображает диалоговое окно, в котором выбирается файл

В следующем примере пользователь может, удерживая нажатыми клавиши <Shift> и <Ctrl>, выбрать в окне несколько файлов. Обратите внимание, что событие использования кнопки Отмена определяется по наличию переменной массива FileName. Если пользователь не щелкнул на кнопке Отмена, то результирующий массив будет состоять как минимум из одного элемента. В этом примере список выбранных файлов отображается в окне сообщения.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Sub GetImportFileName2()

    Dim Filt As String

    Dim FilterIndex As Integer

    Dim FileName As Variant

    Dim Title As String

    Dim i As Integer

    Dim Msg As String

‘   Установка списка фильтров файлов

    Filt = «Text Files (*.txt),*.txt,» & _

            «Lotus Files (*.prn),*.prn,» & _

            «Comma Separated Files (*.csv),*.csv,» & _

            «ASCII Files (*.asc),*.asc,» & _

            «All Files (*.*),*.*»

   Отображает *.* по умолчанию

    FilterIndex = 5

‘   Настройка заголовка диалогового окна

    Title = «Выберите файл для импорта»

   Получение имени файла

    FileName = Application.GetOpenFilename _

        (FileFilter:=Filt, _

         FilterIndex:=FilterIndex, _

         Title:=Title, _

         MultiSelect:=True)

‘   Выход в случае отмены работы с диалоговым окном

    If Not IsArray(FileName) Then

        MsgBox «Файл не выбран.»

        Exit Sub

    End If

   Отображение полного пути и имени файлов

    For i = LBound(FileName) To UBound(FileName)

        Msg = Msg & FileName(i) & vbCrLf

    Next i

    MsgBox «Было выбрано:» & vbCrLf & Msg

End Sub

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

Метод Excel GetSaveAsFilename

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

Application.GetSaveAsFilename(начальное_имя, фильтр_файла, индекс_фильтра, заголовок, текст_кнопки)

  • Начальное_имя. Указывает предполагаемое имя файла.
  • Фильтр_файла. Содержит критерий фильтрации отображаемых в окне файлов.
  • Индекс_фильтра. Код критерия фильтрации файлов, который используется по умолчанию.
  • Заголовок. Определяет текст заголовка диалогового окна.

Получение имени папки

Для того чтобы получить имя файла, проще всего воспользоваться описанным выше методом GetOpenFileName. Но если нужно получить лишь имя папки (без названия файла), лучше воспользоваться методом объекта Excel FileDialog. Следующая процедура отображает диалоговое окно, в котором можно выбрать папку (см. также файл get directory.xlsm). С помощью функции MsgBox отображается имя выбранной папки (или сообщение Отменено).

Sub GetAFolder()

    With Application.FileDialog(msoFileDialogFolderPicker)

        .InitialFileName = Application.DefaultFilePath & «»

        .Title = «Выберите местоположение резервной копии.«

        .Show

        If .SelectedItems.Count = 0 Then

            MsgBox «Отменено»

        Else

            MsgBox .SelectedItems(1)

        End If

    End With

End Sub

Объект FileDialog позволяет определить начальную папку путем указания значения свойства InitialFileName. В примере в качестве начальной папки применяется путь к файлам Excel, заданный по умолчанию.

Отображение диалоговых окон Excel

Создаваемый вами код VBA может вызывать на выполнение многие команды Excel, находящиеся на ленте. И если в результате выполнения команды открывается диалоговое окно, ваш код может делать выбор в диалоговом окне (даже если само диалоговое окно не отображается). Например, следующая инструкция VBA эквивалентна выбору команды Главная –> Редактирование –> Найти и выделить –> Перейти и указанию диапазона ячеек А1:СЗ с последующим щелчком на кнопке ОК. Но само диалоговое окно Переход при этом не отображается (именно это и нужно).

Application.Goto Reference:=Range("А1:СЗ")

Иногда же приходится отображать встроенные окна Excel, чтобы пользователь мог сделать свой выбор. Для этого используется коллекция Dialogs объекта Application. Учтите, что в настоящее время компания Microsoft прекратила поддержу этого свойства. В предыдущих версиях Excel пользовательские меню и панели инструментов создавались с помощью объекта CommandBar. В версиях Excel 2007 и Excel 2010 этот объект по-прежнему доступен, хотя и работает не так, как раньше. Начиная с версии Excel 2007 возможности объекта CommandBar были существенно расширены. В частности, объект CommandBar можно использовать для вызова команд ленты с помощью VBA. Многие из команд, доступ к которым открывается с помощью ленты, отображают диалоговое окно. Например, следующая инструкция отображает диалоговое окно Вывод на экран скрытого листа (рис. 12; см. также файл ribbon control names.xlsm):

Application.CommandBars.ExecuteMso("SheetUnhide")

Рис. 12. Диалоговое окно, отображаемое в результате выполнения указанного выше оператора

Метод ExecuteMso принимает лишь один аргумент, idMso, который представляет элемент управления ленты. К сожалению, сведения о многих параметрах в справочной системе отсутствуют.

В файле ribbon control names.xlsm описаны все названия параметров команд ленты Excel. Поэкспериментируйте с параметрами, перечисленными в этой рабочей книге. Многие из них вызывают команды немедленно (без промежуточных диалоговых окон). Но большинство из них генерирует ошибку при использовании в неправильном контексте. Например, Excel отображает сообщение об ошибке, если команда Functionwizard вызывается в случае выбора диаграммы.

В результате выполнения следующего оператора отображается вкладка Шрифт диалогового окна Формат ячеек:

Application.CommandBars.ExecuteMso("FormatCellsFontDialog")

На самом деле пользоваться объектами CommandBar не стоит, поскольку вряд ли они будут поддерживаться в будущих версиях Excel.

Отображение формы ввода данных

Многие пользователи применяют Excel для управления списками, информация в которых ранжирована по строкам. В Excel поддерживается простой способ работы с подобными типами данных с помощью встроенных форм ввода данных, которые могут создаваться автоматически. Подобная форма предназначена для работы как с обычным диапазоном, так и с диапазоном, оформленным в виде таблицы (с помощью команды Вставка –> Таблицы –> Таблица). Пример формы ввода данных показан на рис. 13 (см. также файл data form example.xlsm).

Рис. 13. Некоторые пользователи предпочитают применять встроенные формы ввода данных Excel для ввода сведений; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

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

  1. Щелкните правой кнопкой мыши на панели быстрого доступа и в контекстном меню выберите параметр Настройка панели быстрого доступа.
  2. На экране появится вкладка Панель быстрого доступа диалогового окна Параметры Excel.
  3. В раскрывающемся списке Выбрать команды из выберите параметр Команды не на ленте.
  4. В появившемся списке выберите параметр Форма.
  5. Щелкните на кнопке Добавить для добавления выбранной команды на панель быстрого доступа.
  6. Щелкните на кнопке ОК для закрытия диалогового окна Параметры Excel.

После выполнения перечисленных выше действий на панели быстрого доступа появится новый значок.

Для работы с формой ввода данных следует структурировать данные таким образом, чтобы Excel распознавал их в виде таблицы. Начните с указания заголовков столбцов в первой строке диапазона вводимых данных. Выделите любую ячейку в таблице и щелкните на кнопке Форма панели быстрого доступа. Excel отображает диалоговое окно, в котором будут вводиться данные. Для перемещения между текстовыми полями в целях ввода информации используйте клавишу <Tab>. Если ячейка содержит формулу, результат вычислений отображается в виде текста (а не в формате поля ввода данных). Другими словами, невозможно изменить формулы с помощью формы ввода данных.

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

Используйте метод ShowDataForm для отображения формы ввода данных Excel. Единственное требование заключается в том, что активная ячейка должна находиться в диапазоне. Следующий код активизирует ячейку А1 (в таблице), а затем отображает форму ввода данных.

Sub DisplayDataForm()

    Range(«A1»).Select

    ActiveSheet.ShowDataForm

End Sub

[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 387–403.

 

diman27

Пользователь

Сообщений: 42
Регистрация: 16.10.2014

Привет всем. Есть Excel документ в который в разное время вносят изменения разные операторы, после изменений они нажимают кнопку «запись», запускается макрос и производятся дальнейшие вычисления, но есть здесь проблема в виде человеческого фактора, торопятся, тупят и бывает не то внесут, или не полностью данные забьют. Хотелось бы сделать так что-бы по нажатию «запись» появлялось окно с текстом, что-то типа » уверен?» и кнопки «да» «нет». «Да» запускаем макрос, «нет» зарываем окно и ничего не делаем.
Спасибо.

 

Сергей

Пользователь

Сообщений: 11251
Регистрация: 01.01.1970

Не факт что поможет хоть десять вопросов уверены они или нет

Лень двигатель прогресса, доказано!!!

 

diman27

Пользователь

Сообщений: 42
Регистрация: 16.10.2014

Но так хоть сниму с себя часть ответственности, а то: -Ой, меня отвлекли, -Ой, не доглядела и т.д., а я сиди потом и правь пол дня. :)

 

В начале макроса пропишите MsgBox С кнопками.  Если да, то макрос продолжать, если нет то выход из макроса. Как написать MsgBox информации полно, как на этом сайте так и в инете. Думаю разберетесь.

http://www.programm-school.ru/primer_raboty_s_msgbox.html

здесь подробно все описано.

Изменено: alexthegreat04.03.2015 08:32:18

 

Сергей

Пользователь

Сообщений: 11251
Регистрация: 01.01.1970

Как то так наверное

Лень двигатель прогресса, доказано!!!

 

diman27

Пользователь

Сообщений: 42
Регистрация: 16.10.2014

Все получилось! Спасибо за подсказку!

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#7

04.03.2015 10:30:51

Цитата
diman27 написал: что-то типа » уверен?» и кнопки «да» «нет»

перед выполнением макроса человеческий фактор нужно сводить к минимуму проверкой введенных этим «фактором» данных (на их корректность, на их наличие и т.п.), а то он вместо Нет нажмет Да (хотя хотел ответить Нет) и опять «..ой..!»
Для примера

Код
Sub Макрос1()
On Error GoTo 0
With ActiveCell
    If .Offset(, -2) = "" Or .Offset(, -1) = "" Then
        MsgBox "Отсутствуют исходные данные!"
        Exit Sub
    End If
    .FormulaR1C1 = "=RC[-2]+RC[-1]"
End With
End Sub

Изменено: Sanja04.03.2015 10:37:16

Согласие есть продукт при полном непротивлении сторон.

 

diman27

Пользователь

Сообщений: 42
Регистрация: 16.10.2014

Документ достаточно сложный и многостраничный, к тому же некоторые данные пересылаются с контроллера. Я думал о проверке, но проверять надо достаточно много ячеек и находятся они на разных листах. А так я их предупредил:  одна ошибка+ одно окно :).

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#9

04.03.2015 12:11:12

Цитата
diman27 написал: А так я их предупредил..

ну а дальше-то что? все равно же Вам

Цитата
сиди потом и правь пол дня

Согласие есть продукт при полном непротивлении сторон.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#10

04.03.2015 12:12:43

Цитата
diman27 написал:
но проверять надо достаточно много ячеек и находятся они на разных листах

Ну проверьте их все — иначе вся затея теряет смысл.

 

diman27

Пользователь

Сообщений: 42
Регистрация: 16.10.2014

Вот пример одной страницы этого документа. В желтые ячейки вносятся изменения. И дело здесь не только в цифрах, хотя и в них тоже, а дело в простоях которые могут быть, а она их не запишет, а могут и не быть- тога и писать нечего. Как это отследить?

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

#12

04.03.2015 13:04:30

Как вариант — все ячейки должны быть заполнены (можно заставить сперва нажатием кнопки их все очистить, ну или при открытии файла очищать).
Если нет простоя — пусть так и пишет «нет», за это и ответит.

Реализация на VBA.

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

Private Sub Workbook_Open()
    ' сообщение, если от сегодняшней даты до указанной <= 3 дня'
    If Worksheets("Лист1").Range("A2").Value - Date <= 3 Then
        MsgBox "Осталось не больше 3 дней!", 64, "ОТЧЕТ ГОРИТ!!!"
    End If
End Sub

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

Private Sub Workbook_Open()
Dim ar()
Dim sStr As String
Dim dFinish As Date
Dim lRw As Long, i As Long
    With Worksheets("Лист1")
        lRw = .Cells(.Rows.Count, 1).End(xlUp).Row ' последняя строка с датой'
        If lRw < 2 Then Exit Sub ' дат нет, выходим'
        ar = .Range("A1:C" & lRw).Value ' диапазон в переменную'
        dFinish = .Range("D2").Value ' количество дней'
    End With

    For i = 2 To lRw ' циклом по строкам'
        If ar(i, 1) - Date <= dFinish Then ' если подходит срок'
            If ar(i, 3) <> "выполнено" Then ' если нет отметки о выполнении'
                ' записываем текст в строковую переменную'
                sStr = sStr & Chr$(10) & Format(ar(i, 1), "dd/mm/yy") & "_" & ar(i, 2)
            End If
        End If
    Next i

    ' если текст есть, показываем сообщение'
    If sStr <> "" Then MsgBox "Осталось не больше 3 дней!" & _
                        Chr$(10) & sStr, 64, "СРОКИ"
End Sub

Понравилась статья? Поделить с друзьями:
  • Excel макрос вес прописью
  • Excel макрос ввода даты
  • Excel макрос ввод данных в ячейку
  • Excel макрос ввести в ячейку
  • Excel макрос в модуль листа