Excel вызвать окно vba

В этой заметке описываются методы создания пользовательских диалоговых окон, которые существенно расширяют стандартные возможности 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.

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

Начинаем программировать с нуля
Часть 4. Первая форма
[Часть 1] [Часть 2] [Часть 3] [Часть 4]

Создание пользовательской формы

Создайте или откройте файл Excel с расширением .xlsm (Книга Excel с поддержкой макросов) или с расширением .xls в старых версиях приложения.

Перейдите в редактор VBA, нажав сочетание клавиш «Левая_клавиша_Alt+F11».

В открывшемся окне редактора VBA выберите вкладку «Insert» главного меню и нажмите кнопку «UserForm». То же подменю откроется при нажатии на вторую кнопку (после значка Excel) на панели инструментов.

На экране редактора VBA появится новая пользовательская форма с именем «UserForm1»:

Добавление элементов управления

Обычно вместе с пользовательской формой открывается панель инструментов «Toolbox», как на изображении выше, с набором элементов управления формы. Если панель инструментов «Toolbox» не отобразилась, ее можно вызвать, нажав кнопку «Toolbox» во вкладке «View»:

При наведении курсора на элементы управления появляются подсказки.

Найдите на панели инструментов «Toolbox» элемент управления с подсказкой «TextBox», кликните по нему и, затем, кликните в любом месте рабочего поля формы. Элемент управления «TextBox» (текстовое поле) будет добавлен на форму.

Найдите на панели инструментов «Toolbox» элемент управления с подсказкой «CommandButton», кликните по нему и, затем, кликните в любом месте рабочего поля формы. Элемент управления «CommandButton» (кнопка) будет добавлен на форму.

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

Нажатием клавиши «F4» вызывается окно свойств, с помощью которого можно вручную задавать значения свойств пользовательской формы и элементов управления. В окне свойств отображаются свойства выбранного элемента управления или формы, если выбрана она. Также окно свойств можно вызвать, нажав кнопку «Properties Window» во вкладке «View».

Отображение формы на экране

Чтобы запустить пользовательскую форму для просмотра из редактора VBA, необходимо выбрать ее, кликнув по заголовку или свободному от элементов управления полю, и совершить одно из трех действий:

  • нажать клавишу «F5»;
  • нажать на треугольник на панели инструментов (на изображении выше треугольник находится под вкладкой «Debug»);
  • нажать кнопку «Run Sub/UserForm» во вкладке «Run».

Для запуска пользовательской формы с рабочего листа Excel, можно использовать кнопки, описанные в этой статье. Например, чтобы отобразить форму с помощью «кнопки – элемента ActiveX», используйте в модуле рабочего листа следующий код:

Private Sub CommandButton1_Click()

    UserForm1.Show

End Sub

Для «кнопки – элемента управления формы» можно использовать следующий код, размещенный в стандартном программном модуле:

Sub ShowUserForm()

    UserForm1.Show

End Sub

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

Добавление программного кода

Программный код для пользовательской формы и элементов управления формы записывается в модуль формы. Перейти в модуль формы можно через контекстное меню, кликнув правой кнопкой мыши на поле формы или на ссылке «UserForm1» в проводнике слева и нажав кнопку «View Code».

Переходить между открытыми окнами в редакторе VBA можно через вкладку «Window» главного меню.

Изменить название пользовательской формы и элементов управления, их размеры и другие свойства можно через окно свойств (Properties Window), которое можно отобразить клавишей «F4». Мы же это сделаем с помощью кода VBA Excel, записанного в модуль формы.

Откройте модуль формы, кликнув правой кнопкой мыши по форме и нажав кнопку «View Code» контекстного меню. Скопируйте следующий код VBA, который будет задавать значения свойств формы и элементов управления перед ее отображением на экране:

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

39

40

41

42

43

44

45

Private Sub UserForm_Initialize()

    ‘Me — это обращение к форме в ее модуле

    With Me

        ‘Присваиваем форме заголовок

        .Caption = «Новая форма»

        ‘Задаем ширину формы

        .Width = 300

        ‘Задаем высоту формы

        .Height = 150

    End With

    With TextBox1

        ‘Задаем ширину текстового поля

        .Width = 200

        ‘Задаем высоту текстового поля

        .Height = 20

        ‘Задаем расстояние от внутреннего края

        ‘формы сверху до текстового поля

        .Top = 30

        ‘Задаем расстояние от внутреннего края

        ‘формы слева до текстового поля, чтобы

        ‘текстовое поле оказалось по центру

        .Left = Me.Width / 2 .Width / 2 6

        ‘Задаем размер шрифта

        .Font.Size = 12

        ‘Присваиваем текст по умолчанию

        .Text = «Напишите что-нибудь своё!»

    End With

    With CommandButton1

        ‘Задаем ширину кнопки

        .Width = 70

        ‘Задаем высоту кнопки

        .Height = 25

        ‘Задаем расстояние от внутреннего края

        ‘формы сверху до кнопки

        .Top = 70

        ‘Задаем расстояние от внутреннего края

        ‘формы слева до кнопки, чтобы

        ‘кнопка оказалось по центру

        .Left = Me.Width / 2 .Width / 2 6

        ‘Задаем размер шрифта

        .Font.Size = 12

        ‘Присваиваем кнопке название

        .Caption = «OK»

    End With

End Sub

Вставьте скопированный код в модуль формы:

Познакомьтесь еще с одним способом отображения на экране пользовательской формы в процессе тестирования: установите курсор внутри процедуры UserForm_Initialize() и нажмите клавишу «F5» или треугольник на панели инструментов. Все предыдущие способы (с выбором формы в редакторе и кнопками на рабочем листе) тоже работают.

В результате мы получаем следующую форму:

Теперь перейдите в редактор VBA, откройте проект формы «UserForm1» и дважды кликните по кнопке «CommandButton1». В результате откроется модуль формы и будет создан шаблон процедуры CommandButton1_Click(), которая будет запускаться при нажатии кнопки:

Private Sub CommandButton1_Click()

End Sub

Вставьте внутрь шаблона процедуры CommandButton1_Click() следующую строку кода, которая будет копировать текст из текстового поля в ячейку «A1» активного рабочего листа:

Range(«A1») = TextBox1.Text

Отобразите пользовательскую форму на экране и проверьте работоспособность кнопки «OK».


This post provides an in-depth guide to the VBA Userform starting from scratch.

The table of contents below shows the areas of the VBA UserForm that are covered and the section after this provides a quick guide so you can refer back to the UserForm code easily.

“The system should treat all user input as sacred.” – Jef Raskin

A Quick Guide to the VBA UserForm

The following table provides a quick guide to the most common features of the UserForm

Function Examples
Declare and create Dim form As New userformCars
Declare and create Dim form As userformCars
Set form = New userformCars
Show as modal form.Show
OR
form.Show vbModal
Show as non modal form.Show vbModeless
Unload Private Sub buttonCancel_Click()
  Unload Me
End Sub
Hide Private Sub buttonCancel_Click()
  Hide
End Sub
Getset the title form.Caption = «Car Details»

The Webinar

If you are a member of the website, click on the image below to view the webinar for this post.

(Note: Website members have access to the full webinar archive.)

vba userform1 video

Introduction

The VBA UserForm is a very useful tool. It provides a practical way for your application to get information from the user.

If you are new to UserForms you may be overwhelmed by the amount of information about them. As with most topics in VBA, 90% of the time you will only need 10% of the functionality.

In these two blog posts(part 2 is here) I will show you how to quickly and easily add a UserForm to your application.

This first post covers creating the VBA Userform and using it as modal or modeless. I will also show you how to easily pass the users selection back to the calling procedure.

In the second part of this post I will cover the main controls such as the ListBox, the ComboBox(also called the Dropdown menu), the TextBox and the CheckBox. This post will contain a ton of examples showing how to use each of these controls.

Related Articles

VBA Message Box
VBA UserForm Controls

Download the Code

What is the VBA Userform?

The VBA UserForm is a dialog which allows your application to get input from the user. UserForms are used throughout all Windows applications. Excel itself has a large number of UserForms such as the Format Cells UserForm shown in the screenshot below.

VBA Userform

Excel’s “Format cells” UserForm

UserForms contain different types of controls such as Buttons, ListBoxes, ComboBoxes(Dropdown lists), CheckBoxes and TextBoxes.

In the Format Cells screenshot above you can see examples of these controls:

  • Font, Font style and Size contain a textbox with a ListBox below it
  • Underline and Color use a Combobox
  • Effects uses three CheckBoxes
  • Ok and Cancel are command Buttons

There are other controls but these are the ones you will use most of the time.

The Built-in VBA Userforms

It is important to note that VBA has some useful built-in UserForms. These can be very useful and may save you having to create a custom one. Let’s start by having a look at the MsgBox.

VBA MsgBox

The VBA message box allows you to display a dialog to the user. You can choose from a collection of buttons such as Yes, No, Ok and Cancel.

VBA MsgBox

You can easily find out which of these buttons the user clicked on and use the results in your code.

The following code shows two simple examples of using a message box

' https://excelmacromastery.com/
Sub BasicMessage()

    ' Basic message
    MsgBox "There is no data on this worksheet "
    ' Basic message with "Error" as title
    MsgBox "There is no data on this worksheet ", , "Error"

End Sub

In the next example, we ask the user to click Yes or No and print a message displaying which button was clicked

' https://excelmacromastery.com/
Sub MessagesYesNoWithResponse()

    ' Display Yes/No buttons and get response
    If MsgBox("Do you wish to continue? ", vbYesNo) = vbYes Then
        Debug.Print "The user clicked Yes"
    Else
        Debug.Print "The user clicked No"
    End If

End Sub

In the final example we ask the user to click Yes, No or Cancel

' https://excelmacromastery.com/
Sub MessagesYesNoCancel()

    ' Display Yes/No buttons and get response
    Dim vbResult As VbMsgBoxResult

    vbResult = MsgBox("Do you wish to continue? ", vbYesNoCancel)

    If vbResult = vbYes Then
        Debug.Print "The user clicked Yes"
    ElseIf vbResult = vbNo Then
        Debug.Print "The user clicked No"
    Else
        Debug.Print "The user clicked Cancel"
    End If

End Sub

You can see all the MsgBox options here.

InputBox

If you want to get a single piece of text or value from the user you can use the InputBox. The following code asks the user for a name and writes it to the Immediate Window(Ctrl + G):

' Description: Gets a value from the InputBox
' The result is written to the Immediate Window(Ctrl + G)
' https://excelmacromastery.com/vba-userform/
Sub GetValue()

    Dim sValue As String
    sValue = Application.InputBox("Please enter your name", "Name Entry")
    
    ' Print to the Immediate Window
    Debug.Print sValue

End Sub

You can add validation to the InputBox function using the Type parameter:

' https://excelmacromastery.com/
Public Sub InputBoxTypes()

    With Application
        Debug.Print .InputBox("Formula", Type:=0)
        Debug.Print .InputBox("Number", Type:=1)
        Debug.Print .InputBox("Text", Type:=2)
        Debug.Print .InputBox("Boolean", Type:=4)
        Debug.Print .InputBox("Range", Type:=8)
        Debug.Print .InputBox("Error Value", Type:=16)
        Debug.Print .InputBox("Array", Type:=64)
    End With
    
End Sub

You can download the workbook with all the code examples from the top of this post.

GetOpenFilename

We can use the Windows file dialog to allow the user to select a file or multiple files.

The first example allows the user to select a file

' Print the name of the selected file
sfile = Application.GetOpenFilename("Excel Files (*.xlsx),*.xlsx")
Debug.Print sfile

The following example allows the user to select multiple files

' https://excelmacromastery.com/
Sub GetMultipleFiles()
    
    Dim arr As Variant
    arr = Application.GetOpenFilename("Text Files(*.txt),*.txt" _ 
        , MultiSelect:=True)

    ' Print all the selected filenames to the Immediate window
    Dim filename As Variant
    For Each filename In arr
        Debug.Print filename
    Next
    
End Sub

Note: If you need more flexibility then you can use the File Dialog. This allows you to use the “Save as” file dialog, select folders and so on.

How to Create a VBA UserForm

If the built-in UserForms do not cover your needs then you will need to create your own custom Userform. To use a UserForm in our code we must first create one. We then add the necessary controls to this Userform.

We create a UserForm with the following steps

  1. Open the Visual Basic Editor(Alt + F11 from Excel)
  2. Go to the Project Window which is normally on the left(select View->Project Explorer if it’s not visible)
  3. Right-click on the workbook you wish to use
  4. Select Insert and then UserForm(see screenshot below)

VBA Userform Create

Creating a Userform

A newly created UserForm will appear. Anytime you want to access this Userform you can double click on the UserForm name in the Project window.

The Toolbox dialog should also be visible. If it’s not visible select View->Toolbox from the menu. We use the toolbox too add controls to our UserForm.

VBA Toolbox

The UserForm Toolbox

Designing the VBA UserForm

To view the design of the UserForm, double click on it in the Project window. There are three important windows we use when creating our UserForms.

  1. The UserForm
  2. The properties window – this is where we can change the setting of the Userform and its controls
  3. The toolbox – we use this to add new controls to our UserForm

VBA UserForm

UserForm Windows

A Very Simple VBA UserForm Example

Let’s have a look at a very simple UserForm example.

You can download this and all the code examples from the top of this post.

  1. Create a new UserForm
  2. Rename it to userformTest in the (Name) property in the properties window
  3. Create a new module(Right-click on properties window and select Insert->Module)
  4. Copy the DislayUserForm sub below to the module
  5. Run the sub using Run->Run UserForm Sub from the menu
  6. The UserForm will be displayed – you have created your first UserForm application!
  7. Click on the X in the top right of the UserForm to close
' https://excelmacromastery.com/
Sub DisplayUserForm()
    
    Dim form As New UserFormTest  
    form.Show
    
End Sub

Setting the Properties of the UserForm

We can change the attributes of the UserForm using the properties window. Select View->Properties Window if the window is not visible.

When we click on the UserForm or a control on a UserForm then the Properties window displays the attributes of that item.

VBA Properties Window

VBA Properties Window

Generally speaking, you only use a few of these properties. The important ones for the UserForm are Name and Caption.

To change the name of the UserForm do the following

  1. Click on the UserForm in the Project window or click on the UserForm itself
  2. Click in the name field of the properties window
  3. Type in the new name

The Controls of the VBA UserForm

We add controls to the UserForms to allow the user to make selections, enter text or click a button. To add a control use the steps below

  1. Go to the toolbox dialog – if not visible select View->Toolbox
  2. Click on the control you want to add – the button for this control will appear flat
  3. Put the cursor over the UserForm
  4. Hold down the left mouse button and drag until the size you want

The following table shows a list of the common controls

Control Description
CheckBox Turn item on/off
ComboBox Allows selection from a list of items
CommandButton Click to perform action
Label Displays text
ListBox Allows selection from a list of items
Textbox Allows text entry

Adding Code to the VBA UserForm

To view the code of the UserForm

  1. Right-click on the UserForm in the properties windows(or the UserForm itself) and select “View Code”
  2. You will see a sub called UserForm_Click. You can delete this when you create your first sub

Note: If you double click on a control it will bring you to the click event of that control. This can be a quicker way to get to the UserForm code.

Adding Events to the VBA UserForm

When we use a UserForm we are dealing with events. What this means is that we want to perform actions when events occur. An event occurs when the users clicks a button, changes text, selects an item in a ComboBox, etc. We add a Sub for a particular event and place our code in it. When the event occurs our code will run.

One common event is the Initialize event which occurs when the UserForm is created at run time. We normally use this event to fill our controls with any necessary data. We will look at this event in the section below.

VBA Event combobox

To add an event we use the ComboBoxes over the code window(see screenshot above). The left one is used to select the control and the right one is used to select the event. When we select the event it will automatically add this sub to our UserForm module.

Note: Clicking on any control on the UserForm will create the click event for that control.

The Initialize Event of the VBA UserForm

The first thing we want to do with a UserForm is to fill the controls with values. For example, if we have a list of countries for the user to select from we could use this.

To do this we use the Initialize event. This is a sub that runs when the UserForm is created(see next section for more info).

To create the Initialize event we do the following

  1. Right-click on the UserForm and select View Code from the menu.
  2. In the Dropdown list on the left above the main Window, select UserForm.
  3. This will create the UserForm_Click event. You can ignore this.
  4. In the Dropdown list on the right above the main Window, select Initialize.
  5. Optional: Delete the UserForm_Click sub created in step 2.

VBA Userform Initialize

Adding the Initialize Event

We can also create the Initialize event by copying or typing the following code

Private Sub UserForm_Initialize()

End Sub

Once we have the Initialize event created we can use it to add the starting values to our controls. We will see more about this in the second part of this post.

Initialize versus Activate

The UserForm also has an Activate event. It is important to understand the difference between this and the Initialize event.

The Initialize event occurs when the actual object is created. This means as soon as you use on of the properties or functions of the UserForm. The code example below demonstrates this

Dim frm As New UserForm1

' Initialize will run as UserForm is created 
' the first time we use it
frm.BackColor = rgbBlue

frm.Show

We normally reference the UserForm first by calling Show which makes it seem that displaying the UserForm is triggering the Initialize event. This is why there is often confusion over this event.

In the example below calling Show is the first time we use the UserForm. Therefore it is created at this time and the Initialize event is triggered.

Dim frm As New UserForm1

' Initialize will run here as the Show is the 
' first time we use the UserForm
frm.Show

The Activate event occurs when the UserForm is displayed. This can happen using Show. It also occurs any time the UserForm is displayed. For example, if we switch to a different window and then switch back to the UserForm then the Activate event will be triggered.

We create the Activate event the same way we create the Initialize event or we can just copy or type the following code

Private Sub UserForm_Activate()

End Sub
  1. Initialize occurs when the Userform is created. Activate occurs when the UserForm is displayed.
  2. For each UserForm you use – Initialize occurs only once, Activate occurs one or more times.

Calling the VBA UserForm

We can use the VBA UserForm in two ways

  1. Modal
  2. Modeless

Let’s look at each of these in turn.

Modal Userform

Modal means the user cannot interact with the parent application while this is visible. The excel Format cells dialog we looked at earlier is a modal UserForm. So are the Excel Colors and Name Manager dialogs.

We use modal when we don’t want the user to interact with any other part of the application until they are finished with the UserForm.

Modeless Userform

Modeless means the user can interact with other parts of the application while they are visible. An example of modeless forms in Excel is the Find dialog(Ctrl + F).

You may notice that any Excel dialog that allows the user to select a range has a limited type of Modeless – the user can select a range of cells but cannot do much else.

Modal versus Modeless

The actual code to make a UserForm modal or modeless is very simple. We determine which type we are using when we show the UserForm as the code below demonstrates

Dim frm As New UserFormFruit

' Show as modal - code waits here until UserForm is closed
frm.Show vbModal

' Show as modeless - code does not wait
frm.Show vbModeless

' default is modal
frm.Show 

As the comments above indicate, the code behaves differently for Modal and Modeless. For the former, it waits for the UserForm to close and for the latter, it continues on.

Even though we can display any UserForm as modal or modeless we normally use it in one way only. This is because how we use them is different

Typical use of a Modal form

With a Modal UserForm we normally have an Ok and a Cancel button.

VBA UserForm

The Ok button normally closes the UserForm and performs the main action. This could be saving the user inputs or passing them back to the procedure.

The Cancel button normally closes the UserForm and cancels any action that may have taken place. Any changes the user made on the UserForm are ignored.

Typical use of a Modeless form

With a Modeless UserForm we normally have a close button and an action button e.g. the Find button on the Excel Find Dialog.

When the action button is clicked an action takes place but the dialog remains open.

The Close button is used to close the dialog. It normally doesn’t do anything else.

A VBA UserForm Modal Example

We are going to create a Modal UserForm example. It is very simple so you can see clearly how to use a UserForm.

You can download this and all the code examples from the top of this post.

The following UserForm allows the user to enter the name of a fruit:

VBA Modal dialog example

We use the following code to show this UserForm and to retrieve the contents of the fruit textbox:

' PROCEDURE CODE
' https://excelmacromastery.com/
Sub UseModal()

    ' Create and show form
    Dim frm As New UserFormFruit

    ' Display Userform - The code in this procedure 
    ' will wait here until the form is closed
    frm.Show
    
    ' Display the returned value
    MsgBox "The user has selected " & frm.Fruit
        
    ' Close the form
    Unload frm
    Set frm = Nothing

End Sub

' USERFORM CODE
' Returns the textbox value to the calling procedure
Public Property Get Fruit() As String
    Fruit = textboxFruit.Value
End Property

' Hide the UserForm when the user click Ok
Private Sub buttonOk_Click()
    Hide
End Sub

What you will notice is that we hide the UserForm when the user clicks Ok. We don’t set it to Nothing or unload it until after we are finished retrieving the user input. If we Unload the UserForm when the user clicks Ok then it no longers exists so we cannot access the values we want.

Using UserForm_QueryClose to Cancel the UserForm

We always want to give the user the option to cancel the UserForm. Once it is canceled we want to ignore any selections the user made.

Each form comes with an X in the top right-hand corner which allows the user to cancel it:

VBA Userform X

The X button on the UserForm

This button cancels the UserForm automatically – no code is necessary. When the user clicks X the UserForm is unloaded from memory. That is, it no longer exists so we will get an error if we try to access it. The code below will give an error if the user clicks on the X

' https://excelmacromastery.com/
Sub DisplayFruit()
    
    Dim frm As New UserFormFruit
    frm.Show
        
    ' ERROR HERE - If user clicks the X button
    Debug.Print frm.Fruit
    
End Sub

VBA Automation Error

To avoid this error we want to prevent the UserForm from being Unloaded when the X button is clicked. To do this we use the QueryClose event.

We create a variable first at the top of the UserForm code module. We also add a property so that we can read the variable when we need to retrieve the value:

Private m_Cancelled As Boolean

Public Property Get Cancelled() As Variant
    Cancelled = m_Cancelled
End Property

Then we add the UserForm_QueryClose event to the UserForm module:

' https://excelmacromastery.com/
Private Sub UserForm_QueryClose(Cancel As Integer _
                                       , CloseMode As Integer)
    
    ' Prevent the form being unloaded
    If CloseMode = vbFormControlMenu Then Cancel = True
    
    ' Hide the Userform and set cancelled to true
    Hide
    m_Cancelled = True
    
End Sub

In the first line, we prevent the UserForm from being unloaded. With the next lines, we hide the UserForm and set the m_Cancelled variable to true. We will use this variable later to check if the UserForm was canceled:

We can then update our calling procedure to check if the UserForm was canceled

' PROCEDURE CODE
' https://excelmacromastery.com/
Sub DisplayFruit()
    
    Dim frm As New UserFormFruit
    frm.Show
        
    If frm.Cancelled = False Then
        MsgBox "You entered: " & frm.Fruit
    Else
        MsgBox "The UserForm was cancelled."
    End If
    
End Sub

If we want to add a Cancel button it is simple to do. All we need to do is Hide the form and set the variable m_Cancelled to true. This is the same as we did in the QueryClose Event above:

' https://excelmacromastery.com/vba-userform/
Private Sub buttonCancel_Click()
    ' Hide the Userform and set cancelled to true
    Hide
    m_Cancelled = True
End Sub

VBA Modal dialog example with Cancel

Using the Escape key to cancel

If you want to allow the user to cancel using the Esc it is simple(but not obvious) to do. You set the Cancel property of your ‘Cancel’ button to True. When Esc is pressed the click event of your Cancel button will be used.

VBA Cancel property

Putting All the Modal Code Together

The final code for a Modal form looks like this:

' USERFORM CODE
' https://excelmacromastery.com/
Private m_Cancelled As Boolean

' Returns the cancelled value to the calling procedure
Public Property Get Cancelled() As Boolean
    Cancelled = m_Cancelled
End Property

' Returns the textbox value to the calling procedure
Public Property Get Fruit() As String
    Fruit = textboxFruit.Value
End Property
 
Private Sub buttonCancel_Click()
    ' Hide the Userform and set cancelled to true
    Hide
    m_Cancelled = True
End Sub

' Hide the UserForm when the user click Ok
Private Sub buttonOk_Click()
    Hide
End Sub

' Handle user clicking on the X button
Private Sub UserForm_QueryClose(Cancel As Integer _
                                  , CloseMode As Integer)
    
    ' Prevent the form being unloaded
    If CloseMode = vbFormControlMenu Then Cancel = True
    
    ' Hide the Userform and set cancelled to true
    Hide
    m_Cancelled = True
    
End Sub

' PROCEDURE CODE
' https://excelmacromastery.com/
Sub DisplayFruit()
    
    ' Create the UserForm
    Dim frm As New UserFormFruit
    
    ' Display the UserForm
    frm.Show
    
    ' Check if the user cancelled the UserForm
    If frm.Cancelled = True Then
        MsgBox "The UserForm was cancelled."
    Else
        MsgBox "You entered: " & frm.Fruit
    End If
    
    ' Clean up
    Unload frm
    Set frm = Nothing
    
End Sub

&nbps;
You can use this code as a framework for any Modal UserForm that you create.

VBA Minimize UserForm Error

We are now going to use a simple example to show how to use a Modeless VBA UserForm. In this example, we will add a customer name to a worksheet each time the user clicks on the Add Customer button.

You can download this and all the code examples from the top of this post.

VBA Modeless Userform example

The code below displays the UserForm in Modeless mode. The problem with this code is that if you minimize Excel the UserForm may not be visible when you restore it:

' PROCEDURE CODE
' https://excelmacromastery.com/
Sub UseModeless()

    Dim frm As New UserFormCustomer
    ' Unlike the modal state the code will NOT
    ' wait here until the form is closed
    frm.Show vbModeless
    
End Sub

The code below solves the problem above. When you display a Userform using this code it will remain visible when you minimize and restore Excel:

' https://excelmacromastery.com/
Sub UseModelessCorrect()

    Dim frm As Object
    Set frm = VBA.UserForms.Add("UserFormCustomer")
    
    frm.Show vbModeless
    
End Sub

An important thing to keep in mind here is that after the frm.Show line, the code will continue on. This is different to Modal where the code waits at this line for the UserForm to be closed or hidden.

When the Add button is clicked the action occurs immediately. We add the customer name to a new row in our worksheet. We can add as many names as we like. The UserForm will remain visible until we click on the Close button.

The following is the UserForm code for the customer example:

' USERFORM CODE
' https://excelmacromastery.com/
Private Sub buttonAdd_Click()
    InsertRow
End Sub

Private Sub buttonClose_Click()
    Unload Me
End Sub

Private Sub InsertRow()
    
    With Sheet1
    
        ' Get the current row
        Dim curRow As Long
        If .Range("A1") = "" Then
            curRow = 1
        Else
            curRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
        End If
        
        ' Add item
        .Cells(curRow, 1) = textboxFirstname.Value
        .Cells(curRow, 2) = textboxSurname.Value
        
    End With
    
End Sub

Part 2 of this post

You can find the second part of this post here.

What’s Next?

Free VBA Tutorial If you are new to VBA or you want to sharpen your existing VBA skills then why not try out the The Ultimate VBA Tutorial.

Related Training: Get full access to the Excel VBA training webinars and all the tutorials.

(NOTE: Planning to build or manage a VBA Application? Learn how to build 10 Excel VBA applications from scratch.)

In this Article

  • VBA UserForms
  • Built in VBA UserForms
    • Message Box
    • Input Box
    • Get Open Filename
    • Excel Default Dialogs
    • Inserting a New User Form
    • Using the Toolbox
    • Adding an Exit Button to Your Form
    • Adding a Label Control to a Form
    • Adding a Text Control to the Form
    • Initialize and Activate Events on a Form
    • Saving Your Application and Forms
    • Modal and Non-Modal Forms
    • Closing a Form
    • Enabling and Disabling Controls

This tutorial will discuss VBA UserForms.

VBA UserForms

The Userform is a very important part of programming in VBA.  It allows you to build a professional looking user interface to communicate with the users of your VBA application.  It also allows you to totally control the user in what they are doing to your workbook.

You can, of course, use worksheet cells to accept parameters from the user, but the userform produces a far better user experience.

By expanding the height and width of your userform to the size of the Excel window, you can make your application look like a normal Windows application, with the user being totally unaware that they are using Excel as the host.

All the normal Windows controls, such as drop downs, list boxes, tick boxes are available to you.  You also have a huge range of methods, events and properties to use to enhance the user experience.

An important point is that when you display a userform that is built in or is modal, you cannot edit your code in the VBE nor access any Excel functionality.  Only when the form is closed will the cursor appear in your code.

Built in VBA UserForms

Excel VBA as several built-in forms that can be used to communicate with the user.

Message Box

This is the most commonly used form in VBA.  It simply displays a text message, possibly informing a user that they have entered invalid input or that a VBA process has finished running.  In their simplest form, they display a text string, but you can also add an icon such as a question or exclamation mark, and give the message box a different title.

PIC 01

This is a basic example. There is only one button to click, and the title bar says ‘Microsoft Excel’

The code to produce this is very straightforward:

Sub TestMsgBox()
MsgBox "This process has completed"
End Sub

You can use different parameters to add buttons, icons, and change the title bar

Sub TestMsgBox()
Dim Ret As Variant
Ret = MsgBox("Are you sure?", vbYesNo Or vbQuestion, "My Application")
If Ret = vbYes Then
    'Your process here
Else
    Exit Sub
End If
End Sub

PIC 02

This code adds in a ‘Yes’ and ‘No’ button and a question mark icon, and sets the title bar. Note that you can combine the styles of the message box by using the ‘Or’ operator

Also, when you are returning a value from a message box, the return variable must be defined as a variant or vbMsgBoxResult, and the message box statement must use brackets,

Input Box

There is a very simple input box built into VBA, although it is quite restrictive in what you can do with it.  If you can, it is better to design a custom userform

Sub TestInputBox()
Dim Ret As String
Ret = InputBox("Please enter your name", "Enter Name")
MsgBox Ret
End Sub

PIC 03

You can also add a default value for the input into the parameters.

Get Open Filename

This allows you to utilize the Windows file dialog within your VBA code.  It looks very impressive to the user when it is running, but it is very simple to incorporate and you automatically get all the file dialog functionality with it.

PIC 04

The code restricts the user to only see Excel files. Unfortunately, they could type in a non-Excel filename into the File name box, and click the open button, so you would need some code to ensure that an Excel file has been selected.

Use the ‘ChDir’ command to change the default directory to your own requirements before displaying the file dialog

Note the use of wildcards in the FileFilter parameter. The Excel files to display could be pre 2007, have macros, or be binary so the filter is ‘.xls*’.

Sub TestFileDialog()
Dim MyFile As String
ChDir "C:temp"
MyFile = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", , "Select a file")
MsgBox MyFile
End Sub

If required, you can allow the user to select several files at once by using the MultiSelect parameter.  The default is False (single select only)

Sub TestFileDialog()
Dim MyFile As Variant
ChDir "C:temp"
MyFile = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*", , "Select a file", , True)
For Each f In MyFile
    MsgBox f
Next f
End Sub

The user holds down the Shift key in the file dialog to select multiple files.

The For Each loop displays the full path and name of each file selected

Excel Default Dialogs

Within Excel VBA, there is a Dialogs collection which you can use to display any standard Excel dialog.  The downside is that you cannot access the parameters that the user has chosen or change the appearance of the dialog, but these dialogs can be useful in directing the user to a standard Excel function, and allowing them to choose specific parameters within the dialog.

A good example of this is to display the ‘Print’ dialog from VBA:

Sub TestPrintDialog()
Application.Dialogs(xlDialogPrint).Show
End Sub

When you open the brackets in the Dialogs collection, you will see a list of a huge number of constants for built-in dialogs. It is worth experimenting with some of these options within your code

PIC 05

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Inserting a New User Form

You can design your own custom user forms by inserting a userform into the Visual Basic Editor (VBE)

You do this by selecting Insert | UserForm on the VBE menu bar.

PIC 06

Click on ‘UserForm’ and a new blank form will appear ready for you to develop on

PIC 07

The actual form itself (shown as ‘UserForm1’) looks quite small, but you can use the handles around it to enlarge or make it even smaller by dragging the handles with your cursor.

There is a properties window in the bottom left-hand corner of the screen.  As the focus is directly on the form itself, this contains all the properties for the form specific to that form.

Note that when you start adding controls such as combo boxes and command buttons, these controls all have their own set of properties, and they can be very different in what you can do with each of them.

The properties that you see currently only apply only to the form itself.

The ‘Name’ property is the name used to define your form object within the VBA code.  You may want to use something more meaningful for the object name, so that when you are reviewing your code, it is obvious which form is being used.

The ‘Name’ property will also reflect through to the ‘Project Explorer’ window in the top left-hand corner of the screen

You will want to alter the title bar of your form to something different from ‘UserForm1’, and you can do this by typing in your new text at the ‘Caption’ property

You can make a huge number of changes to how your form is seen by the user.   You can alter colours, add images e.g. a corporate logo, change the position using ‘Left’ and ‘Top’, change the size using ‘Height’ and ‘Width’, change the mouse pointer, and many more

All of these properties can also be changed programmatically for any control that you have added to your form.  For example, a user may select from a list box control, and you may want to disable or hide other controls based on the user’s choice

Using the Toolbox

You will notice that when you click on the form itself, a toolbox pop-up appears.  If you click anywhere else e.g. the properties pane, it will disappear, but re-appear when your click on the form.

The toolbox provides the real mechanics of the form design.  This enables you to add the normal Windows controls that users are familiar with to your form.

PIC 08

You will have notice that on the form, there is a network of dots. This is a ‘snapgrid’ so that when you add a control to the form, it will automatically align the position to the rows and columns of dots.  This helps enormously with aligning your controls so that your do not get a ragged appearance of the controls

Should you click on a control, and then decide not to use it, clicking on the ‘Arrow’ icon in the top-left corner of the toolbox will change your cursor back to normal.

You can add additional controls to the toolbox by using Tools | Additional Controls on the VBE menu.  There are a considerable number of these available, but depending on you Windows and Excel versions, they do not always work so some experimentation is often required.

Also, your users may not have access to some of these additional controls or be running older versions of Windows and Excel, which may cause problems. In large organizations, especially if they are global, there is no such thing as a standard build PC that you can rely on!

PIC 09

Adding an Exit Button to Your Form

A Command button is simple to add to the form.  This looks the same way as buttons that you see in other Windows forms, usually as an ‘OK’ or ‘Cancel’ button.

Click on the Command Button icon in the toolbox. This is the second icon from the left on the bottom row of icons.  See the image above. It has the letters ‘ab’ on it.

You can either hold your mouse button down and drag the control onto your form, or you can move the cursor to the form, where it will change to a ‘cross’ cursor and you can position and size your button

If you drag the control to the form, you will get the default sizing of the button. Moving the cursor to the form allows you to change the size of the button by dragging the ‘cross’ cursor across your form

Your form will now look like this:

PIC 10

The button will have default text as the caption, but you will want to change it to your own requirements.  You can click on the text within the button (‘CommandButton1’) and this will allow you to edit the caption directly.

You can also change it in the properties window (bottom left-hand corner of screen).  You will see a property called ‘Caption’ and you can edit the value for this.  Change this to ‘Exit’

As with the form properties, the ‘Name’ property defines the name that will be used in your VBA code. You may want to use a name that is more meaningful and obvious within your code.  You can enter this against the ‘Name’ property.

You can re-position the button by dragging it about on the form, and you can resize it by clicking on the button handles (white square boxes) and dragging the handles to make it larger or smaller

You can also re-size the button by changing the Height and Width values in the properties window

You can view your form in Excel by clicking on the green triangle in the VBE toolbar, or pressing F5

PIC 11

You can call your form from VBA code within a module by using the ‘Show’ method

Sub ShowForm()
UserForm1.Show
End Sub

Your user form is effectively a global object and can be called from anywhere within your code

Currently, your command button does nothing because there is no VBA code behind it. You have to write this yourself! All that can happen at the moment is that you can click on the ‘Close’ X in the top right-hand corner of your form.

To add VBA code, double click on the button on the form

This will take you to the normal VBA code window, and will show the default event of click.

You use the ‘Hide’ method to close the form, and you can also add in any other code, such as a message box to confirm to the user what has happened.

PIC 12

Note that the code window has two drop downs at the top.  The first one allows you to select your form controls, and the second shows all the events that are available for you to add code.  The obvious one for a button is the ‘Click’ event, but there are others such as ‘Double Click’ or ‘Mouse Move’

When you run your form now, the button actually does something.  The form vanishes and a message box is displayed confirming that the form is closed

You can, of course, enlarge the exit code. You may wish to display another form, or take action on parameters that the user has entered on your form

VBA Programming | Code Generator does work for you!

Adding a Label Control to a Form

Label controls are for prompting the user as to what sort of data they need to input to a control on the form e.g. text box, drop down, etc.  A label has no borders by default, but these can be added through the properties window if required.

As a control, they are read only to the user and are simply a way of putting text on the form, whether it is a bold heading, or an instruction of what to enter or choose.

To add a label, click on the ‘A’ icon in the toolbox (top row, second from left) and either double click on it or move your cursor to the form and select position and size.

PIC 13

Using the ‘Caption’ property in the properties window, or clicking on the label control, you can enter the text for the label control.

Note that the text will wrap according to the size of the label control, and if the string of text is too long, it will not appear completely on the form, so you need to be careful of the sizing of the label control.

Using the properties window, you can change the appearance of the label control, with different colours, fonts, back style e.g. if it overlays an image and you want it to be transparent

No code needs to be created for a label control.  The main purpose is to add text to the form so that the user can see how all the other controls work

Adding a Text Control to the Form

A text control is used to allow the user to input text e.g entering a name or comments

The text control is added from the toolbox by clicking on the text control icon (top row, third from left) and double clicking or dragging the control into position on your form.

The text control is often confused with the label control, but the text control is the one for user input

PIC 14

The ‘Enter your name’ text is a label control, as previously described, and we now have a white text box ready for the user to type something into

Using the properties window, you can change the colours, fonts, special effects, or use password characters for your text box.  Enormous flexibility is available

One very important property for a text box is the ‘MultiLine’ property.  If you want the user to enter a large amount of text into the text control e.g. comments, then the ‘MultiLine’ property must be set to True.

It is a default of False which means that however big you make your text box, the text entered will stay on one continuous line and will scroll out of the text box.  It will not wrap around within the box.

There is no pop-up when you right click on your text box when it is running, but CTRL+V will work for Paste, and CTRL+C will work for Cut, should the user want to cut and paste text to and from other applications

Again, you have to write your own code to deal with text that the user has typed in. You may wish to transfer it to a cell in a worksheet

You can add this code into the ‘Change’ event for the text box

Private Sub TextBox1_Change()
Sheets("Sheet1").Range("A1").Value = TextBox1.Value
End Sub

You may also want to put some validation code in to check that the user is not entering rubbish which will have disastrous effects on your application

The change event is no good for this because it is called every time the user types in a new character. The user could start typing a string of text and instantly find that they have broken your validation rules before they have completed a valid text.

You use the ‘Exit’ event.  This is triggered when the user moves the focus to another control on the form, which means that the user is no longer entering data.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNull(TextBox1.Value) Or Len(TextBox1.Value) < 4 Then
    MsgBox "Name is invalid", vbCritical
    TextBox1.SetFocus
End If
End Sub

When the user clicks on another control on the form, this code tests for either a null value in the text box, or less than 4 characters.  If the test is true, then a message box with a critical icon appears to inform the user that the name is invalid, and the focus is moved back to the offending text box for the user to correct.

Note that even if the user clicks on the Exit button, the text box exit event will be performed first, so this prevents the user exiting without correcting the input

Initialize and Activate Events on a Form

When VBA first creates and builds a form it triggers an ‘Initialize’ event.  However, because the form is also displayed at this point, it also triggers an ‘Activate’ event.  From then onwards, every time the form appears using the ‘Show’ method or it appears as part of a hierarchy of forms, then the ‘Activate’ event is triggered, but not the ‘Initialize’ event

The ‘Initialize’ event only happens once, but the ‘Activate’ event can happen many times

On your form you may want to set up default values from the worksheet in the input controls e.g. text boxes, so that these appear on the first use of the form, but the user can overwrite the defaults and these new values will remain in place so long as the code is running

Private Sub UserForm_Initialize()
TextBox1.Value = Sheets("Sheet1").Range("A1").Value
If TextBox1.Value=”” Then
	TextBox1.Visible=False
Else
	TextBox1.Visible=True
End If
End Sub

You can find the ‘Initialize’ event in the second drop down in the code window, and the userform name in the first drop down.

This code will use the value at cell A1 on ‘Sheet1’ as the default value in the text box created earlier in this article.  When the form appears for the first time, the default value will appear. The user can then overwrite the default value and this will be retained.  If CellA1 is blank the text box will be hidden otherwise is will be visible

The default value could also be hard coded:

TextBox1.Value = “John Smith”

You may also want to make sure that the values that the user has entered re-appear whenever the user fires up that form within that particular Excel session. VBA code can easily write the values back to cells within the workbook using the ‘Exit’ event on a control, and re-instate them using the ‘Activate’ event on the form

Private Sub TextBox1_Exit(ByVal Cancel as MSForms.ReturnBoolean)
Sheets("Sheet1").Range("A10").Value = TextBox1.Value
End Sub
Private Sub UserForm_Activate()
TextBox1.Value = Sheets("Sheet1").Range("A10").Value
End Sub

This code will make the user’s values persistent and also ensure that they are saved off with the rest of the workbook

Saving Your Application and Forms

When you save your Excel workbook containing your forms, all the forms and their VBA code get saved as well. However, any values that the forms hold whilst they are displayed will be lost.

It is important to write code so that when the user exits the workbook, or the form, the values are written back to cells within the workbook and so are preserved.

Modal and Non-Modal Forms

The form itself has a property ‘Show Modal’.  This is set by default to True, but it can be changed to False (non-modal)

PIC 15

If a form is modal, it means that none of the Excel functionality can be accessed while the form is being displayed. This includes your code in the VBE window.  You can view the code, but the cursor and keyboard are disabled.

In a non-modal form, you can access all the Excel functionality, including the VBE window, whilst the form is being displayed.

This is important from the point of view of controlling user behaviour

AutoMacro | Ultimate VBA Add-in | Click for Free Trial!

Closing a Form

However well you write your code to force the user down a certain route, they can easily circumvent it by clicking on the ‘Close’ X in the top right-hand corner of the form

You can prevent this happening by modifying the ‘QueryClose’ event of the form

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
MsgBox "This action is disabled"
End Sub

The ‘QueryClose’ event is triggered when the user clicks the ‘Close’ X of the form.  This code cancels the action, so the user is forced to use your ‘Exit’ button and the code that you have behind it.

Enabling and Disabling Controls

All controls on your form have a property called ‘Enabled’ which is set to True or False.  If it is False, then the control is greyed out. It can be seen but cannot be used.

There is also a property called ‘Visible’ which again is set to True or False.

You can write code to either make a certain control unusable, or to make it totally invisible to the user. Using an ‘If’ statement, you can choose the circumstances when you need to do this

For example, you could disable the ‘Exit’ button initially, until the user has entered a value into the TextBox1 (name)

Private Sub UserForm_Initialize()
CommandButton1.Enabled = False
End Sub
Private Sub TextBox1_Change()
If Len(TextBox1.Value) > 0 Then
    CommandButton1.Enabled = True
Else
    CommandButton1.Enabled = False
End If
End Sub

This code uses the form ‘Initialize’ event to disable the exit button (Command Button 1) when the form first appears and then uses the ‘Change’ event on TextBox1 (name) to enable the Exit button if something has been typed in or disable it if the box is blank.

The ‘Change’ event is triggered every time a new character is typed in or deleted from the text box. If the user tries to enter text to make the button enabled, and then deletes all the text, the button will instantly be disabled

PIC 16

Содержание

  • Что такое редактор Visual Basic в Excel?
  • Открытие редактора VB
  • Анатомия редактора Visual Basic в Excel
  • Куда добавить код в редакторе VB
  • Настройка редактора VB

Первым шагом к работе с VBA в Excel является ознакомление с редактором Visual Basic (также называемым редактором VBA или редактором VB).

В этом руководстве я расскажу все, что нужно знать о редакторе VBA, и некоторые полезные параметры, которые вы должны знать при кодировании в Excel VBA.

Редактор Visual Basic — это отдельное приложение, которое является частью Excel и открывается всякий раз, когда вы открываете книгу Excel. По умолчанию он скрыт, и для доступа к нему необходимо активировать его.

VB Editor — это место, где вы храните код VB.

Получить код в редакторе VB можно несколькими способами:

  1. Когда вы записываете макрос, он автоматически создает новый модуль в редакторе VB и вставляет код в этот модуль.
  2. Вы можете вручную ввести код VB в редакторе VB.
  3. Вы можете скопировать код из другой книги или из Интернета и вставить его в редактор VB.

Открытие редактора VB

Открыть редактор Visual Basic в Excel можно разными способами:

  1. Использование сочетания клавиш (самый простой и быстрый)
  2. Используя вкладку разработчика.
  3. Использование вкладок рабочего листа.

Давайте быстро пройдемся по каждому из них.

Сочетание клавиш для открытия редактора Visual Basic

Самый простой способ открыть редактор Visual Basic — использовать сочетание клавиш — ALT + F11 (удерживая клавишу ALT, нажмите клавишу F11).

Как только вы это сделаете, откроется отдельное окно для редактора Visual Basic.

Этот ярлык работает как переключатель, поэтому при повторном использовании он вернет вас в приложение Excel (без закрытия редактора VB).

Ярлык для версии Mac: Opt + F11 или Fn + Opt + F11

Использование вкладки разработчика

Чтобы открыть редактор Visual Basic с ленты:

  1. Перейдите на вкладку «Разработчик» (если вы не видите вкладку «Разработчик», прочтите, как ее получить).
  2. В группе «Код» щелкните Visual Basic.

Использование вкладки рабочего листа

Это менее используемый метод открытия редактора Vb.

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

Этот метод не просто откроет редактор VB, он также перенесет вас в окно кода для этого объекта рабочего листа.

Это полезно, когда вы хотите написать код, который работает только для определенного рабочего листа. Обычно это происходит с событиями рабочего листа.

Анатомия редактора Visual Basic в Excel

Когда вы открываете редактор VB в первый раз, это может показаться немного подавляющим.

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

Кроме того, он все еще выглядит как старый Excel 97 дней. Хотя дизайн и удобство использования Excel значительно улучшились за последние годы, редактор VB не претерпел каких-либо изменений в своем внешнем виде.

В этом разделе я познакомлю вас с различными частями приложения Visual Basic Editor.

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

Ниже представлены изображения различных компонентов редактора VB. Затем они подробно описаны в следующих разделах этого руководства.

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

Строка меню

Здесь у вас есть все параметры, которые вы можете использовать в редакторе VB. Это похоже на ленту Excel, где у вас есть вкладки и параметры для каждой вкладки.

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

Вы заметите, что рядом с большинством параметров в редакторе VB указаны сочетания клавиш. Как только вы привыкнете к нескольким сочетаниям клавиш, работа с редактором VB станет действительно простой.

Панель инструментов

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

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

В большинстве случаев панель инструментов по умолчанию — это все, что вам нужно при работе с редактором VB.

Вы можете переместить панель инструментов над строкой меню, щелкнув три серые точки (в начале панели инструментов) и перетащив ее над строкой меню.

Примечание. В редакторе VB есть четыре панели инструментов — Стандартная, Отладка, Редактировать и Пользовательская форма. То, что вы видите на изображении выше (которое также используется по умолчанию), является стандартной панелью инструментов. Вы можете получить доступ к другим панелям инструментов, перейдя к параметру «Просмотр» и наведя курсор на параметр «Панели инструментов». Вы можете добавить одну или несколько панелей инструментов в редактор VB, если хотите.

Обозреватель проекта

Обозреватель проекта — это окно слева, в котором отображаются все объекты, открытые в настоящее время в Excel.

Когда вы работаете с Excel, каждая открытая книга или надстройка является проектом. И в каждом из этих проектов может быть набор объектов.

Например, на изображении ниже в Project Explorer показаны две открытые книги (Book1 и Book2) и объекты в каждой книге (рабочие листы, ThisWorkbook и Module в Book1).

Слева от объектов есть значок плюса, который можно использовать, чтобы свернуть список объектов или развернуть и просмотреть полный список объектов.

Следующие объекты могут быть частью Project Explorer:

  1. Все открытые книги — в каждой книге (которая также называется проектом) вы можете иметь следующие объекты:
    • Объект рабочего листа для каждого листа в книге
    • ThisWorkbook объект который представляет собой книгу
    • Таблица объект для каждого листа диаграммы (они не так распространены, как рабочие листы)
    • Модули — Здесь идет код, созданный с помощью средства записи макросов. Вы также можете написать или скопировать код VBA сюда.
  2. Все открытые надстройки

Рассматривайте Project Explorer как место, где отображаются все объекты, открытые в Excel в данный момент.

Сочетание клавиш для открытия Project Explorer: Ctrl + R (удерживайте контрольную клавишу, а затем нажмите R). Чтобы закрыть его, просто щелкните значок закрытия в правом верхнем углу окна Project Explorer.

Примечание. Для каждого объекта в Project Explorer есть окно кода, в котором вы можете написать код (или скопировать и вставить его откуда-нибудь). Окно кода появляется при двойном щелчке по объекту.

Окно свойств

Окно свойств — это то место, где вы можете увидеть свойства выбранного объекта. Если у вас еще нет окна «Свойства», вы можете получить его с помощью сочетания клавиш F4 (или перейдите на вкладку «Просмотр» и нажмите «Окно свойств»).

Окно свойств — это плавающее окно, которое можно закрепить в редакторе VB. В приведенном ниже примере я закрепил его чуть ниже Project Explorer.

Окно свойств позволяет нам изменять свойства выбранного объекта. Например, если я хочу сделать рабочий лист скрытым (или очень скрытым), я могу сделать это, изменив свойство Visible для выбранного объекта рабочего листа.

Связанный: Скрытие рабочего листа в Excel (который не может быть легко отсканирован)

Окно кода

Для каждого объекта, перечисленного в Project Explorer, есть окно кода. Вы можете открыть окно кода для объекта, дважды щелкнув его в области Project Explorer.

Окно кода — это то место, где вы будете писать свой код или копировать и вставлять код из другого места.

Когда вы записываете макрос, его код попадает в окно кода модуля. Excel автоматически вставляет модуль для размещения в нем кода при записи макроса.

Связанный: Как запустить макрос (код VBA) в Excel.

Немедленное окно

Окно Immediate в основном используется при отладке кода. Один из способов использования окна Immediate — использование оператора Print.Debug в коде с последующим запуском кода.

Это помогает мне отлаживать код и определять, где мой код застревает. Если я получаю результат Print.Debug в непосредственном окне, я знаю, что код работал, по крайней мере, до этой строки.

Если вы новичок в кодировании VBA, вам может потребоваться некоторое время, чтобы использовать немедленное окно для отладки.

По умолчанию непосредственное окно не отображается в редакторе VB. Вы можете получить его, используя сочетание клавиш Control + G (или можете перейти на вкладку «Просмотр» и нажать «Немедленное окно»).

Куда добавить код в редакторе VB

Я надеюсь, что теперь у вас есть общее представление о том, что такое VB Editor и какие в нем части.

В этом разделе этого руководства я покажу вам, где добавить код VBA в редактор Visual Basic.

Есть два места, где вы можете добавить код VBA в Excel:

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

Окно кода модуля против окна кода объекта

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

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

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

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

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

Связанный: Узнайте больше о событиях в VBA.

Напротив, код в модуле должен выполняться вручную (или его также можно вызывать из других подпрограмм).

Когда вы записываете макрос, Excel автоматически создает модуль и вставляет в него записанный код макроса. Теперь, если вам нужно запустить этот код, вам нужно вручную выполнить макрос.

Добавление кода VBA в модуль

При записи макроса автоматически создается модуль и вставляется в него код, однако при использовании средства записи макросов существуют некоторые ограничения. Например, он не может использовать циклы или условия If Then Else.

В таких случаях лучше либо скопировать и вставить код вручную, либо написать код самостоятельно.

Модуль может использоваться для хранения следующих типов кодов VBA:

  1. Декларации: Вы можете объявлять переменные в модуле. Объявление переменных позволяет указать, какой тип данных может содержать переменная. Вы можете объявить переменную только для подпрограммы или для всех подпрограмм в модуле (или всех модулях)
  2. Подпрограммы (процедуры): Это код, в котором есть шаги, которые вы хотите выполнить с помощью VBA.
  3. Функциональные процедуры: Это код, который возвращает одно значение, и вы можете использовать его для создания пользовательских функций (также называемых пользовательскими функциями или UDF в VBA).

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

Добавление модуля в редактор VB

Ниже приведены шаги по добавлению модуля:

  1. Щелкните правой кнопкой мыши любой объект книги (в котором вы хотите установить модуль).
  2. Наведите курсор на опцию Вставить.
  3. Щелкните по модулю.

Это мгновенно создаст папку с именем Module и вставит объект с именем Module 1. Если у вас уже есть вставленный модуль, вышеупомянутые шаги будут вставлять другой модуль.

После того, как модуль вставлен, вы можете дважды щелкнуть объект модуля в Project Explorer, и он откроет для него окно кода.

Теперь вы можете скопировать и вставить код или написать его самостоятельно.

Удаление модуля

Ниже приведены шаги по удалению модуля в Excel VBA:

  1. Щелкните правой кнопкой мыши модуль, который хотите удалить.
  2. Нажмите на опцию «Удалить модуль».
  3. В открывшемся диалоговом окне нажмите Нет.

Примечание. Вы можете экспортировать модуль перед его удалением. Он сохраняется как файл .bas, и вы можете импортировать его в другой проект. Чтобы экспортировать модуль, щелкните модуль правой кнопкой мыши и выберите «Экспорт файла».

Добавление кода в окно объектного кода

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

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

Обратите внимание, что некоторые объекты позволяют выбрать событие, для которого вы хотите написать код.

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

Примечание: эти события относятся к объекту. Когда вы откроете окно кода для книги, вы увидите события, связанные с объектом книги. Когда вы откроете окно кода для рабочего листа, вы увидите события, связанные с объектом рабочего листа.

Настройка редактора VB

Хотя настройки редактора Visual Basic по умолчанию достаточно хороши для большинства пользователей, они позволяют дополнительно настраивать интерфейс и некоторые функции.

В этом разделе руководства я покажу вам все параметры, которые у вас есть при настройке редактора VB.

Чтобы настроить среду редактора VB, нажмите «Инструменты» в строке меню, а затем нажмите «Параметры».

Это откроет диалоговое окно Параметры, которое предоставит вам все параметры настройки в редакторе VB. В диалоговом окне «Параметры» есть четыре вкладки (как показано ниже), на которых можно настроить различные параметры редактора Visual Basic.

Давайте быстро рассмотрим каждую из этих вкладок и важные параметры на каждой из них.

Вкладка «Редактор»

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

По мере того, как вы станете более опытным в работе с VBA в Excel, вы можете настроить редактор VB, используя некоторые из этих параметров.

Автоматическая проверка синтаксиса

При работе с VBA в Excel, как только вы сделаете синтаксическую ошибку, вас встретит всплывающее диалоговое окно (с некоторым описанием ошибки). Что-то вроде того, что показано ниже:

Если вы отключите эту опцию, это всплывающее окно не появится, даже если вы допустили синтаксическую ошибку. Однако цвет текста кода изменится, что укажет на наличие ошибки.

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

Требовать объявление переменной

Это один из вариантов, который я рекомендую включить.

Когда вы работаете с VBA, вы будете использовать переменные для хранения различных типов данных и объектов.

Когда вы включаете этот параметр, он автоматически вставляет оператор «Option Explicit» в верхнюю часть окна кода. Это заставляет вас объявить все переменные, которые вы используете в своем коде. Если вы не объявите переменную и попытаетесь выполнить код, отобразится ошибка (как показано ниже).

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

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

Примечание. Когда вы включаете этот параметр, он не влияет на существующие модули.

Автоматический член списка

Эта опция весьма полезна, поскольку помогает получить список свойств методов для объекта.

Например, если я хочу удалить лист (Sheet1), мне нужно использовать строку Sheet1.Delete.

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

Функция автоматического списка хороша тем, что позволяет:

  • Быстро выберите свойство и метод из списка и сэкономьте время
  • Показывает все свойства и методы, о которых вы, возможно, не знали.
  • Избегайте орфографических ошибок

Эта опция включена по умолчанию, и я рекомендую оставить ее в таком состоянии.

Параметры автоматической быстрой информации

Когда вы вводите функцию на листе Excel, она показывает вам некоторую информацию о функции, например, аргументы, которые она принимает.

Точно так же, когда вы вводите функцию в VBA, она показывает вам некоторую информацию (как показано ниже). Но для этого вам нужно убедиться, что опция Auto Quick Info включена (что по умолчанию).

Параметры советов по автоматическим данным

Когда вы просматриваете свой код построчно и помещаете курсор над именем переменной, он покажет вам значение переменной.

Я считаю это весьма полезным при отладке кода или при просмотре кода построчно, в котором есть циклы.

В приведенном выше примере, как только я наведу курсор на переменную (var), отобразится значение, которое она содержит.

Этот параметр включен по умолчанию, и я рекомендую вам оставить его в таком же состоянии.

Автоматический отступ

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

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

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

В приведенном выше примере после того, как я напишу строку Debug.Print и нажму Enter, она начнется прямо под ней (с тем же уровнем отступа).

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

При желании вы можете изменить значение отступа. Я сохраняю значение по умолчанию.

Редактирование текста перетаскиванием

Когда этот параметр включен, он позволяет выбрать блок кода и перетащить его.

Это экономит время, так как вам не нужно сначала вырезать, а потом вставлять. Вы можете просто выбрать и перетащить его.

Этот параметр включен по умолчанию, и я рекомендую вам оставить его в таком же состоянии.

По умолчанию — полный вид модуля

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

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

Этот параметр включен по умолчанию, и я рекомендую оставить его в таком же состоянии.

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

Разделитель процедур

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

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

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

Вкладка «Формат редактора»

С помощью параметров на вкладке «Формат редактора» вы можете настроить внешний вид кода в окне кода.

Лично я сохраняю все параметры по умолчанию, так как меня это устраивает. Если вы хотите, вы можете настроить это в зависимости от ваших предпочтений.

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

На этой вкладке также можно установить тип и размер шрифта. Рекомендуется использовать шрифт фиксированной ширины, например Courier New, так как он делает код более читабельным.

Обратите внимание, что настройки типа и размера шрифта останутся одинаковыми для всех типов кода (т. Е. Для всех типов кода, показанных в поле цвета кода).

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

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

По умолчанию полоса индикатора маржи включена, и я рекомендую оставить ее в таком состоянии.

Одна из моих студенток курса VBA нашла эти параметры настройки полезными, и она была дальтоник. Используя параметры здесь, она смогла установить цвет и форматы, которые упростили ей работу с VBA.

Вкладка Общие

На вкладке «Общие» есть много параметров, но изменять их не нужно.

Я рекомендую вам оставить все параметры как есть.

Одна из важных опций, о которых следует знать на этой вкладке, — это обработка ошибок.

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

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

Вкладка стыковки

На этой вкладке вы можете указать, какие окна вы хотите закрепить.

Закрепление означает, что вы можете зафиксировать положение окна (например, проводника проекта или окна свойств), чтобы оно не перемещалось, и вы могли просматривать все различные окна одновременно.

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

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

Как в Excel 2010 или 2013 вставить и запустить код VBA – руководство для начинающих

​Смотрите также​ _ «C:UsersCDesktopFOLDER» Workbooks.Open​IvanOK​Юрий М​Хоть Жераром Депардье​ все твои сообщения​ этом. Как только​ файл с несовпадающим​зы. кстати, везде,​’ Returns collection​ Ned_Poriv() exl =​а это читали:​

​ по его использованию​Окно​(Sheet);​ Basic, как показано​Application.ScreenUpdating = False​Это краткое пошаговое руководство​ Filename:= _ «C:UsersÍDesktopFOLDERFILENew.xls»​:​: Кирилл, а рекордер​ или психом в​ выискивая в них​ Михаилу потребуется изменить​ именем — нужный​ где возможно, я​ files of folder​

​ CreateObject(«excel.application») exl.Workbooks.Open(Filename:=»C:Documents and​’111 это пароль​ (в приложении) :​Watches​Код более общего характера​ на картинке ниже.​Application.Calculation = xlCalculationManual​ предназначено для начинающих​ on error goto​IvanOK​ упорно пишет ChDir​ белой рубашке с​ «перлы» а ля​ что-то в коде,​

  • ​повторюсь: моя функция​ тоже предпочитаю однострочный​
  • ​’​ SettingsСемРабочий столExcel.xls») exl.Sheets(«Період2»).Select()​

Вставляем код VBA в книгу Excel

​ на открытие файла,​[ссылка заблокирована по​также очень помогает​ должен быть введён​ Имейте ввиду, что​В самый конец кода,​

    1. ​ пользователей и рассказывает​ 0 дальше код​
    2. ​, На горе программист:​​ ))​​ пеной у рта​ nerv? Хочешь быть​Вставляем и запускаем макрос в Excel
    3. ​ ему придется ковырять​​ абстрагируется от (свой,​​ If.​’ @param {String}​ exl.visible = True​ 11 это пароль​ решению администрации проекта]​ при отладке кода​ в​​ окно Excel остается​​ перед​​ о том, как​​ работы с открытым​Вставляем и запускаем макрос в Excel
    4. ​ThisWorkbook.Windows.Application.Visible = False​KL​ (в ваших глазах).​ нарциссом — ради​ всю логику, в​ чужой и т.п.).​​Vitalts​​ Path The path​Вставляем и запускаем макрос в Excel​ exl.Sheets(«71010000»).Select() exl.Cells.Select() exl.Selection.Delete(Shift:=xlUp)​​ на изменеие​S_e_m​

      ​ VBA, так как​Module​ открытым и находится​

      ​End Sub​
      ​ вставлять код VBA​

      ​ файломно очевидно, что,​ UserForm1.Show​: Юр, ну мало​ Моя точка зрения​ Бога. Растеряешь друзей.​ т.ч. логику получения​

      • ​ Она просто возвращает​:​ to folder​​ exl.Sheets(«Період1»).Select() exl.Cells.Select() exl.Selection.Copy()​​Вы что тоже​: Ребята, подскажите как​​ в нём можно​​;​ позади окна редактора.​​:​​ (Visual Basic for​

        ​ если ошибки при​
        ​eagl69​

      • ​ ли что на​ останется при мне​​RAN​​ имени файла из​

        ​ список файлов папки.​
        ​Michael_S​

      ​’ @param {String}​ exl.Sheets(«71010000»).Select() exl.Cells.Select() exl.ActiveSheet.Paste()​ создали файл с​ открывается книга Excel​ увидеть значение, тип​Код для нового объекта​В процессе работы в​Application.ScreenUpdating = True​ Applications) в книгу​ обращении по 1​:​ заборах пишут. Рекордер​Цитата​: Саш, это, конечно​ папки. В моем​ При желании может​, что значит не​ [Filter] The file​

    5. ​ exl.Rows(«1:1»).Select() exl.Range(Selection, Selection.End(xlDown)).Select()​ такими паролями?? плагиат​ 2003 c указанного​ и контекст любого​​ должен быть введён​​ редакторе Visual Basic​Application.Calculation = xlCalculationAutomatic​​ Excel, и как​ пути нет, то​inv.DS​​ еще и Select​(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты откатись чуть​ правильно​ случае это не​​ делать это рекурсивно.​​ хочет? Без кода​Вставляем и запускаем макрос в Excel​ filter​​ exl.Application.CutCopyMode = False​​ какой-то, деньги автору​ места.​​ отслеживаемого выражения, которое​​ в​ в Excel могут​​Эти строки, как можно​ запускать вставленный макрос​​ как избежать обращения​,​​ обожает​​ назад, и взгляни​

Вставляем и запускаем макрос в Excel

  1. ​но вся проблема​​ требуется, т.к. вынесено​​Функцию можно подключить​ я не могу​’ @return {Collection}​ exl.Selection.Sort(Key1:=Range(«E1»), Order1:=xlAscending, Header:=xlGuess,​

Запускаем макрос VBA в Excel

​ пароля??? ))​Наперед СПАСИБО!!!​​ задаст пользователь. Чтобы​​Class Module​​ быть открыты различные​​ понять из их​​ для выполнения различных​​ ко второму пути?​inv.DS​Юрий М​​ на свои коды.​​ в том -​

Вставляем и запускаем макрос в Excel

​ в функцию. Если​ и не вносить​
​ сказать где у​
​ FileList​

​ _ OrderCustom:=1, MatchCase:=False,​

office-guru.ru

Редактор Visual Basic в Excel

​S_e_m​Ципихович Эндрю​ открыть окно​;​ окна. Управление окнами​ содержания, отключают обновление​ задач на этом​спасибо за советы.​, неа ефекто тот​: ))​И переменные из​ что она одна,​

Запуск редактора Visual Basic

​ ему потребуется проверять​ существенных изменений в​ вас ошибка, ибо​’ —————————————-​​ Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal)​​: Так открывается с​: в ВБА так:​​Watches​​Если нужно создать диалоговое​ осуществляется в меню​​ экрана и пересчёт​​ листе.​МатросНаЗебре​ же….​Assassinys​ одной буквы, и​ но для всех​ вложенные каталоги, ему​ основную программу (добавляется​

Редактор Visual Basic в Excel

Окна редактора Visual Basic

​ код замечательно работает.​Private Function GetFileList(ByVal​ ‘oExcel.Workbooks.Add() ‘oExcel.Sheets.Add.Name =​ этими паролями и​Set oExcel =​, нажмите​ окно для взаимодействия​ View, которое находится​ формул рабочей книги​Большинство пользователей не являются​:​

Окно проекта (Project)

​нужно сделать до​​: Собственно меня интересует​​ Iif сплошь и​ разная!​ придется писать новый​ одна строка вызова​ Ни один год​ Path As String,​ ComboBox1.Text End Sub​ без них. Загвоздка​ CreateObject(«Excel.Application») ‘создать объект​Watch Window​ с пользователем, то​ в верхней части​ перед выполнением макроса.​ гуру Microsoft Office.​

  • ​If Err <> 0​​ sub workbook_open() иначе​​ как возможно открыть​ рядом, и еще​
  • ​Ты откатись чуть​​ алгоритм (перебирать всю​​ функции).​ пользуюсь подобными методами.​ _​Редактор Visual Basic в Excel

​ End ModuleПосле запуска​ в том, что​​ Microsoft Excel oExcel.Workbooks.Open​​в меню​​ можно использовать​​ окна редактора VBA.​​ После выполнения кода​​ Они могут не​ Then​ ефект полюбому останется….​ форму в документе​ куча всего, что​​ назад, и взгляни​​ логику, вносить изменения,​​Цитата​​Попробуйте вывести название​​Optional ByVal Filter​​ в конце строки​

​ я дальше хочу​ «D:Рабочая папка» &​​View​​Userform​​ Ниже дано описание​​ эти параметры снова​​ знать всех тонкостей​​all L​

  • ​ потому что сначала​​ эксель но так​​ ты сейчас критикуешь!​ на свои коды.​ отлаживать и т.п.​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Я уж не​ файла, который пытаетесь​
  • ​ As String =​​ 27 выдаёт ошибку​​ выделить какой-то диапазон​ Имя_файла, , ,​​редактора Visual Basic.​​.​​ отдельных окон.​​ включаются. Данный приём​​ работы той или​​: Попробуем. спасибо!​

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

  • ​ «*») As Collection​ —-​ ячеек и копировать​ , «111», «11»​​ Также окно​​Двойной щелчок мышью по​
  • ​Окно​ приводит к ускорению​ иной функции, и​Sanja​​ потом он выполняет​​ видна только форма​
  • ​ и дело. Я​ одной буквы, и​ не отдельную функцию).​​ кода.​​ исчерпан, и идет​
  • ​Static List As​Object variable or With​ их, а мне​​ ‘111 это пароль​​Watches​
  • ​ любому объекту в​Project​ выполнения макроса от​ не смогут ответить​​: :?:​​ макрос​

Окно кода (Code)

​ при открытии документа​ сам делал так​ Iif сплошь и​​Если вы предпочитаете​​Качество кода не​​ попытка открыть файл​​ New Collection​ block variable not​ выдает ошибку на:​ на открытие файла,​будет открыто автоматически,​ окне​​открывается в левой​​ 10% до 500%​

​ на вопрос, как​If Err <>​​IvanOK​​ а сам документ​ (писал ужасный, говеный​ рядом, и еще​ закладывать фундамент дома​ измеряется его размером.​ с пустым названием.​

Окно свойств (Properties)

​Static FSO As​​ set.​​Range​ 11 это пароль​ если задать отслеживаемое​Project​ части редактора VBA​ (да, макрос может​ отличается скорость выполнения​ 0 Then PathName​, Вы бредите! Все​ был скрыт или​ код) и не​

Редактор Visual Basic в Excel

Окно отладчика (Immediate)

​ куча всего, что​​ из спичек, я​​ Вообще, не понимаю,​ Не совершенство кода,​ Object​​—​​(«A8:C7»).Select Ощущение, что​​ на изменеие ‘oExcel.Workbooks.Open​​ выражение.​открывает соответствующее окно​​ (показано на картинке​​ работать в 5​ макроса VBA в​ = ChDir(«Y:PublicFolder1») Else​ работает у меня​ свернут?​ хочу, чтобы кто-нибудь​ ты сейчас критикуешь!​ не против, но​ почему форумчан беспокоит​

​ написанного на скорую​​Static Deep As​​Также в 29​​ книга «AIC_SIP» активна​​ «D:Рабочая папка» &​Чтобы задать отслеживаемое выражение,​Code​​ выше). В этом​​ раз быстрее, если​

Редактор Visual Basic в Excel

Окно переменных (Locals)

​ Excel 2010 и​​ PathName = ChDir(«C:UsersCDesktopFOLDER»)​​ остается только 1​​аналитика​​ еще наступал на​​Мне Вася уронил​​ сам стараюсь этого​ размер (не только​ руку :(​ Integer​ строке​ (потому что окрыта),​ Имя_файла, , ,​ нужно:​, предназначенное для ввода​ окне для каждой​ манипуляции над ячейками​ 2013. Многие просто​​ End If Workbooks.Open​​ форма активная, сам​: в модуль «ЭтаКнига»:​

Редактор Visual Basic в Excel

Окно отслеживания (Watches)

​ эти грабли. Это​​ молоток на голову!​​ не делать​ этого) кода, если​Судя по скрину,​Dim SubFolder As​Range​ а Лист1 не​ ,111, 11 ‘111​Выделить выражение в редактируемом​ кода VBA с​​ открытой рабочей книги​​ происходят без лишних​​ используют Excel, как​​ Filename:=PathName & «FILENew.xls»​​ Excel прячется.​​sub workbook_open() application.visible=false​ ж очевидно )​​И что вы​​Цитата​ код написан должным​ так и есть.​

Редактор Visual Basic в Excel

​ Object​Ошибка 1 «System.Data.Range»​

  1. ​ активный и не​ это пароль на​
  2. ​ коде VBA.​​ клавиатуры. На одном​​ создаётся проект VBA​​ остановок).​​ инструмент для обработки​
  3. ​Kuzmich​​inv.DS​​ yourform.show end sub​

​deathogre​ ему сказали?​(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати и скорость​ образом? Подключили, забыли.​ Приведите код​Dim Folder As​ в этом контексте​ хочет с ним​

​ открытие файла, 11​В меню​
​ из приведённых выше​
​ (VBA Project). Проект​

​Сохраняем рабочую книгу, как​

office-guru.ru

Как открыть visual basic через excel в office 2007?

​ данных.​​: Используйте диалоговое окно​

​, ето вы просто​​Assassinys​
​: Здрасьте. Как программно​Ты…, Вася…, неправ!!!!!!!!!​ тоже от длинны​

​ Если хотите по​​Michael_S​ Object​
​ недоступен, так как​ контачить.​
​ это пароль на​Debug​ рисунков показано окно​
​ VBA – это​ книгу Excel с​Предположим, нужно изменить данные​ выбора файла​
​ не замечаете не​: не работает(​ открыть книгу эксель​nerv​
​ не всегда зависит​ прежнему заниматься ручной​: Vitalts, Все, разобрался.​

​Dim File As​​ является «Friend».​Спасибо что отозвались​ изменеие oExcel.Visible =​редактора VBA нажать​

Как в excel открыть visual basic???

​ кода для​​ набор всех объектов​ поддержкой макросов. Для​ на листе Excel​
​Set FD = Application.FileDialog(msoFileDialogFilePicker)​ мощном ПК, а​

​Assassinys​​ и сохранить эту​: об единственной опечатке​зависит от алгоритма,​ обсфукацией, экономить на​ Не туда​ Object​dzug​ (ещё раз)​ True ‘FalseНеужели в​Quick Watch​Module1​ и модулей VBA,​ этого нажмите​
​ определённым образом. Мы​all L​ я говорю делоВ​

​:​​ книгу (объект) в​ я предупредил сразу.​ а не от​
​ каждой букве, пожалуйста.​Set wb = Workbooks.Open(ActiveWorkbook.Path​

Открытие Excel и активация нужного листа

​If FSO Is​​: Посмотрите это:​Ципихович Эндрю​ ВБ не так??​.​
​.​

​ привязанных к текущей​​Ctrl+S​
​ немало погуглили и​: Kuzmich, Sanja, спасибо​ продолжение темы:​Assassinys​ глобальной переменной?​ Это раз. Два,​ кол-ва букв )​Я пишу универсальные​ & «» &​ Nothing Then​Обработка активной книги​: Это решено???????? и​ проверьте, отпишитесь, ОК??​Нажать​По мере ввода кода​ книге. Изначально в​и в окне​ нашли макрос VBA,​ за советы. Начну​Private Sub CommandButton8_Click()​

​, работает.​​Юрий М​ кто-то не знает,​Цитата​ функции, кот. таскаю​ fn)​Set FSO =​ Excel​ ладно …​S_e_m​Add​ VBA в окно​ него входят:​ с предупреждением​ который решает эту​ с предложения Sanja​ Application.Visible = False​Код надо поместить​
​: 1. Открытие нужной​ что от него​(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Мы все тут​
​ (использую) из проекта​впихивал.​ CreateObject(«Scripting.FileSystemObject»)​S_e_m​здесь​: Всё так. Только​.​Code​Объект​Следующие компоненты невозможно сохранить​ задачу. Однако, наше​ (для сохранения «молчаливой»​ End Sub Private​ куда и сказано​ книги запишите макрорекордером​ хочет компилятор при​ хотим размер покороче​ в проект. Мне​Еще раз спасибо.​End If​: Ничего не помогает.​Windows(«AIC_SIP.xls»).Activate ‘активация моего​ я, пока, чайник​Кроме рассмотренных, в меню​, редактор Visual Basic​ЭтаКнига​ в книге без​ знание VBA оставляет​ работы процедуры), если​ Sub CommandButton9_Click() Application.Visible​ -​ — получите готовый​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Expicit​​ и даже соревнуемся​ это не мешает​nerv​If FSO.FolderExists(Path) Then​ Не получается у​ файла Range(«A1:C3»).Select ‘выбираю​ и совсем недавно​ редактора Visual Basic​ следит за правильностью​(ThisWorkbook), привязанный к​
​ поддержки макросов​ желать лучшего. Вот​

​ не подойдет, то​​ = True End​
​в модуль «Эта книга»​ код.​
​я тут не​
​ в этом постоянно​
​ ) Если вам​: просто вы не​Set Folder =​ меня сортировка. Уже​
​ диапазон ячеек Selection.Copy​ начал изучать язык​ в Excel существует​ ввода, ищет ошибки​ книге Excel;​

​(The following features​​ тут-то и придёт​ окно выбора файла​ SubЛист скрывается а​yourform​2. Dim Wb​ при чем )​ в специально созданном​ нравиться каждый раз​ писали МНОГО кода​​ FSO.GetFolder(Path)​​ кучу сайтов перелазил​ ‘копируюв переди пробуйте​ программирования, а тут​ ещё множество параметров​ в коде и​Объекты​ cannot be saved​
​ на помощь пошаговая​ уж точно поможет.​

​ вот при открытии​​заменить на свое,​ As Workbook Set​
​Цитата​
​ для этого разделе​ переписывать весь код,​Когда перед тобой​For Each File​ — не могу​
​ добавлять oExcel.​ ещё по работе​
​ и команд, используемых​ выделяет код, который​

​Лист​​ in macro-free workbook)​ инструкция, с помощью​
​ вопрос, думаю, закрыт.​ появляется еще какой​
​ например, у меня​ Wb = ActiveWorkbook​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты упорно пытаешься​за рекламу 5​ я не против​ 1000+ строк в​ In Folder.Files​ разобраться.​то есть как​ нужно было… Короче​ при создании, выполнении​ требует исправления.​(Sheet), привязанные к​ нажмите​ которой мы сможем​ Спасибо.​ то лист пустой​Userform1​Hugo​
​ доказать всем участникам​Michael_S​Serge_007​ одном только модуле,​If File.Name Like​Michael_S​ Вы здесь обращались:​
​ получилось, но открывает​
​ и отладке кода​В окне​ каждому листу текущей​Нет​ использовать найденный код.​

​Александр Моторин​​all L​Aleksey1404​: Set wb =​ темы​

​: У каждого свои​​: Точно так же​ нет желания разбирать​ Filter Then​: Все, что об​oExcel.Visible = True​ не из всех​
​ VBA.​Properties​ рабочей книги Excel.​(No).​Вставляем код VBA в​: А где находится​: Добрый день,​: Да заработало ,​ Workbooks.Open(filename)​я отстаиваю свою​ понятия «правильности»​ как и формул.​ и додумывать. Хочется​List.Add File​ этом файле известно​ ‘False​ папок. С некоторых​Урок подготовлен для Вас​перечислены свойства объекта,​Самостоятельно в проект можно​Откроется диалоговое окно​ книгу Excel​ сам файл?​Подскажите, можно ли​ я просто имя​deathogre​ точку зрения​Саш, мы уже​ Кстати и скорость​​ просто читать. Максимально​End If​ — он находится​​S_e_m​
​ папок выдаёт ошибку,​ командой сайта office-guru.ru​​ который в момент​​ добавить объекты​Сохранение документа​Запускаем макрос VBA в​Если рядом с​

​ решить такую задачу:​​ формы некорректное выбирал​
​: Мне нужно открыть​Цитата​

​ как-то говорили на​​ тоже от длинны​ быстро читать понятный​Next​ в той же​: Я уже на​ что нету доступа.​

CyberForum.ru

Открыть файл excel. (VBA) (Задача вроде простая, но…)

​Источник: http://www.excelfunctions.net/Visual-Basic-Editor.html​​ создания (не в​Userform​(Save as). В​ Excel​ нужным файлом, то​Работаю с файлом,​Апострофф​ книгу из другой​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>и правда думаешь,​ эту тему; твои​ не всегда зависит​ не двусмысленный код.​For Each SubFolder​ папке, где и​
​ пике восторга​ Если знаете в​

​Перевел: Антон Андронов​​ процессе выполнения программы)​,​

​ выпадающем списке​​В этом примере мы​ ActiveWorkbook.Path поможет​ в котором прописана​: А как обратно​
​ книги​
​ что кому-то интересно​ доводы отчасти верны,​
​Однако ты прав,​
​ "С недавних пор"​ In Folder.SubFolders​
​ основной, и других​Получилось, как Вы​
​ чем проблема, отпишите​Автор: Антон Андронов​
​ выделен в окне​
​Module​
​Тип файла​
​ будем использовать VBA​

​all L​ VBA-процедура, на работе​ открыть файл для​Юрий М​
​ искать все твои​ но не для​ форумчан это очень​
​ однострочный If я​
​Deep = Deep​ файлов в этой​ сказали. Вот так​ пожалуйста. А пока,​

​Виталик александровский​​ проекта. Эти свойства​и​(Save as type)​
​ макрос, который удаляет​: Нет, Александр, не​ и дома.​
​ редактирования (((​
​: И что?​ сообщения выискивая в​
​ всех случаев.​
​ беспокоит​
​ не использую вообще​ + 1​
​ папке нет. И​
​Set oExcel =​ очень благодарен за​: Alt плюс F11​
​ могут быть различными​Class Module​ выбираем​
​ переносы строк из​ с нужным. Спасибо.​
​Процедура эта в​
​Aleksey1404​deathogre​ них "перлы" а​
​Michael_S​Мы все тут​ )​
​GetFileList SubFolder.Path, Mask​ что он -​
​ CreateObject("Excel.Application") 'создать объект​ помощь!!!​
​Gkp090​ в зависимости от​
​. Если Вы посмотрите​Книга Excel с поддержкой​
​ ячеек текущего листа​RAN​
​ процессе работы обращается​: Разве не очевидно?​
​: Объявил глобальную переменную​ ля nerv?​
​: То же не​ хотим размер покороче​
​Цитата​
​Next​
​ эксель. Ни имя​ Microsoft Excel oExcel.Workbooks.Open​
​В принципе разобрался​: VBA​
​ типа выделенного объекта​ на картинку выше,​
​ макросов​
​ Excel.​
​: Не тестировал, но​
​ к еще одному​ Application.Visible = True​
​ в модуле ЭтаКнига​если мне говорят,​
​ работает​
​ и даже соревнуемся​
​(Michael_S)200?'200px':''+(this.scrollHeight+5)+'px');">жалуется на Mask​Deep = Deep​
​ и расширение файла,​
​ "C:Documents and SettingsS_e_mРабочий​ с открытием, но​
​в настройках выставить​ (лист, книга, модуль​
​ то увидите, что​(Excel macro-enabled workbook)​
​Открываем рабочую книгу в​ на правду похоже​
​ файлу (открывает его,​
​Апострофф​
​ Public Главнейшая As​

​ что я не​nerv​smile​ в этом постоянно​Это та самая​

​ — 1​​ а также имя​​ столAC_SIP222″ & xls​​ тут проблема дальше​ «Показывать вкладку Разработчик​ и другие).​smile​ в проект VBA​ и нажимаем кнопку​
​ Excel.​Sub Мяу() Dim​ производит определенные действия),​: Может есть какое-то​ Workbookоткрыл книгу в​ прав, я спрашиваю​: Захотелось кнопку «Ok»​ в специально созданном​
​ ошибка, о кот.​End If​ и расположение папки​ ‘открываю книгу 222​

​Private Sub Command1_Click()​​ на ленте»​Окно​ для книги​
​Сохранить​Нажатием​ wb As Workbook​​ который на работе​​ сочетание клавиш, позволяющее​ модуле АктивХ формы​ в чем, а​ нажать​ для этого разделе​
​ я говорил. Замените​
​If Deep =​ не известны.​ oExcel.Visible = True​ Set oExcel =​

​Александр к​​Immediate​​Book1.xlsm​​(Save).​Alt+F11​ Dim pName(), fName$,​ лежит на диске​ открыть файл без​ChDir «\Margo123Тест» Workbooks.Open​ не заведомо соглашаюсь​Там же написано​
​KuklP​ Mask на Filter.​ -1 Then​Возможно? Если возможно​ ‘False oExcel.Range(«B5:E13»).Select ‘выбираю​ CreateObject(«Excel.Application») ‘ñîçäГ*ГІГј îáúåêò​: На вкладке Разработчик​можно отобразить в​добавлен объект​
​Нажимаем​вызываем окно редактора​ i& pName =​

​ Y, дома на​​ отработки макроса(shift не​ Filename:=»\Margo123Тест6.02.2016.xlsm» Set ЭтаКнига.Главнейшая​​Цитата​ «Переменная не определена»​: Еще как измеряется.​​Цитата​
​Set GetFileList =​

​ — как?​​ диапазон ячеек oExcel.Selection.Copy​ Microsoft Excel oExcel.Workbooks.Open​smile​ щелкните Visual Basic.​ редакторе Visual Basic​Module​Alt+Q​ Visual Basic​ Array(«Y:PublicFolder1», «C:UsersCDesktopFOLDER» fName​ диске С. Имя​ помогает), т.к. у​ = Workbooks(«\Margo123Тест6.02.2016.xlsm»)выдает ошибку​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Растеряешь друзей.​ и даже выделено​ Можно написать на​
​(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>В данном случае,​​ List​
​nerv​ ‘копирую oExcel.Workbooks.Open «C:Documents​ «C:111AIC_SIP» & AIC_SIP,​Если Вкладка Разработчик​
​ через меню​​с названием​, чтобы закрыть окно​На панели​ = «хи-хи.xls» On​ файла одинаковое, пути​ меня отображается форма,​
​ на 3 строке,​т.е. если наши​ какая. Что мешает​
​ 10 страниц «правильного»​​ мне караз таки​Set List =​: Получить список файлов​ and SettingsS_e_mРабочий столAC_SIP111″​
​ , , ,​ не отображена:​View​Module1​ редактора VBA и​Project-VBAProject​ Error Resume Next​ к нему разные.​ но я не​

​ Run-time error 9​​ мнения не совпадают,​ объявить? Это же​ кода, а можно​
​ было удобнее воспользоваться​ Nothing​ папки​ & xls ‘открываю​ 111, 11 ‘111​Нажмите кнопку Microsoft​>​.​ вернуться к книге​кликаем правой кнопкой​

​ Do While wb​​Сейчас обращение к​ могу добавить код​ Subscript out of​smile​ то я уже​ пример )​ то же действие​
​ однострочным if, дабы​​Set FSO =​Vitalts​ другую книгу 111​
​ ГЅГІГ® ГЇГ*ðîëü Г*Г*​ Office, а затем​Immediate Window​Вот как можно создать​ Excel.​ мыши по имени​ = Nothing Set​
​ этому файлу выглядит​ по причине отсутствия​ range​ автоматически не друг,​Цитата​ описать одной строкой.​
​ не закрывать, а​​ Nothing​: Все названия Excel​ oExcel.Visible = True​
​ îòêðûòèå ГґГ*éëГ*, 11​ — Параметры Excel.​или нажатием комбинации​ новый объект​Чтобы запустить только что​ рабочей книги (в​ wb = Workbooks.Open(Filename:=pName(i)​ следующим образом:​ окна екселя… код​Юрий М​ потому, что «мнения​(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>У каждого свои​
​ Что легче можно​ перенос для наглядности.​Deep = 0​ файлов в папке​ ‘False oExcel.Range(«A1»).Select ‘Выделил​ ГЅГІГ® ГЇГ*ðîëü Г*Г*​Щелкните Популярное и​ клавиш​Userform​smile

​ добавленный макрос, нажмите​​ левой верхней части​ & fName) i​1ый путь:​ не большой написан,​: Глобальную переменную в​
​ друзей должны совпадать​ понятия «правильности»​ будет понять и​
​для наглядности многострочный​End If​ активной книги, исключая​ стартовую ячейку oExcel.ActiveSheet.Paste​ èçìåГ*ГҐГЁГҐ oExcel.Visible =​ затем установите флажок​biggrin

​Ctrl+G​​,​Alt+F8​ окна редактора) и​ = i +​Sub MyCode ()​ просто стало интересно)​ стандартный модуль -​ всегда»? (это следует​вообще-то нет​ отредактировать? Ведро картошки​ If. В вашем​End Function​ ее:​ ‘ВставилЭто для примера,​​ True ‘False Windows(«AIC_SIP.xls»).Activate​​ Показывать вкладку «Разработчик»​. Это окно помогает​biggrin

​Module​​. Откроется диалоговое окно​ в контекстном меню​smile
​ 1 Loop End​​ ChDir _ «C:UsersCDesktopFOLDER»​Aleksey1404​ будет доступна всюду.​ из твоих слов)​Правильность она «одна​
​ можно отвезти на​ случае это неочевидность.​впрочем, уже вижу​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​​ может комуто и​ ‘Г*ГЄГІГЁГўГ*öèÿ ìîåãî ГґГ*éëГ*​ на ленте.​
​ при отладке кода.​или​Макрос​ выбираем​ Sub​
​ Workbooks.Open Filename:= _​​:​ И модуль не​Цитата​ на всех мы​
​ мопеде, не нужен​Цитата​ косяк​Dim fn As​ понадобится.​ Range(«A1:C3»).Select ‘âûáèðГ*Гѕ äèГ*ГЇГ*çîГ*​Примечание. Лента является​ Оно выполняет роль​Class Module​(Macro). В списке​Insert​Doober​ «C:UsersÍDesktopFOLDERFILENew.xls» дальше код​Aleksey1404​ нужно указывать.​(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>но вся проблема​ за ценой не​ для этого БелАз.​(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати, проверки названий​но не критичный​ String​Но всегда есть​ ГїГ·ГҐГҐГЄ Selection.Copy ‘êîïèðóþ​
​ частью интерфейса «Пользовательский​ области вывода для​:​Имя макроса​>​: Проверил,работает​smile
​ работы с открытым​​, Вы наверно не​Если книга уже​ в том -​
​ постоим», только это​ Но если тебе​ файлов на самого​
​ )​​With ActiveWorkbook​ но… Дальше у​ End SubВыдаёт ошибку​ интерфейс Microsoft Office​ отладки выражений и​В окне​
​(Macro name) выберите​smile

​Module​​Sub Гав_Гав() PathForFile$​ файломДальше работа с​
​ с того конца​ открыта — зачем​ что она одна,​ не все понимают​ так​ себя у вас​

​Vitalts​​fn = Dir(.Path​ меня куча строк​sad

​ и что хочешь​​ Fluent».​ позволяет вычислять отдельные​smile​Project​ нужный макрос и​.​ = Get_Folder &​ открытым файлом.​ начали программу писать​
​ указывать путь?​​ но для всех​ )​
​нравитЬся​smile​ нет.​:​ & «*.xls*»)​ с заданием (макрос​ делай. Подскажите пожалуйста​В меню Справка​
​ выражения или выполнять​​выберите рабочую книгу,​ нажмите кнопку​Копируем код VBA (с​ «FILENew.xls» End Sub​И когда мне​Сначала следовало забить​
​deathogre​ разная!​Цитата​

​, я тоже не​​функция, представленная мной​nerv​Do Until fn​ короче написан). Мне​ как активизировать тот​ выберите пункт Справка:​ строки кода по​ в которую нужно​Выполнить​
​ веб-страницы или из​ Public Function Get_Folder()​ надо поменять путь​ в форму код,​: Мне нужно в​Не поверишь, есть​​(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Саш, мы уже​​ против​ возвращает список файлов​, эээ, и вы​ = «»​ что, перед каждой​ лист и работать​ Microsoft Visual Basic.​ одной.​ добавить объект, и​(Run).​ другого источника) и​

​ As String Set​​ к этому файлу,​а потом в​
​ открытую книгу писать​ нюансы, но в​ как-то говорили на​nerv​ заданной папки. Понятия​
​ утверждаете что у​If fn <>​ командой ставить oExcel?​
​ в нём (я​Роман царьков​Например, введите выражение «​ кликните по ней​Урок подготовлен для Вас​ вставляем его в​
​ FSO = CreateObject(«Scripting.FileSystemObject»)​ я его просто​
​ прятки с​ изменения, через глобальную​
​ целом правильность одинаковая​

​ эту тему; твои​​: чуть меньше неверно,​ «самого себя» здесь​ меня извороты?​ .Name Then: _​Всё!!! Получилось. Строка​ так понимаю, нужно​
​: кнопка Visual Basic​
​?j​ правой кнопкой мыши.​
​ командой сайта office-guru.ru​​ правую область редактора​ If FSO.FolderExists(«C:UsersCDesktopFOLDER») Then​ переписываю руками:​
​Excel​ переменную хочу обращаться​
​Я общаюсь не​​ доводы отчасти верны,​ чем полностью​ нет, т.к. функции​Чем вам Dir​Debug.Print fn​oExcel.Application.Run «‘111.xls’!ГЊГ*êðîñ1″сделала свою​
​ WorkSheets сделать активным,​ подсвечена серым и​» и нажмите​В появившемся меню кликните​Источник: https://www.ablebits.com/office-addins-blog/2013/12/06/add-run-vba-macro-excel/​
​ VBA (окно​​ Get_Folder = «C:UsersCDesktopFOLDER»​
​2 путь:​`ем играть.​ к этой книге​ только (и уже​ но не для​Цитата​ все равно, откуда​ не угодил?​
​fn = Dir​​ работу. А Вам,​ а не всю​ не работает как​Enter​Insert​
​Перевел: Антон Андронов​Module1​ Else ‘ Get_Folder​smile​Sub MyCode ()​Странно, у меня​Юрий М​ не столько) на​ всех случаев​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Можно написать на​ она вызывается. Думаю,​Похоже, изначально не​Loop​ Ципихович Эндрю, очень​ книгу) . Или​ быть?​– в результате​и в раскрывшемся​Автор: Антон Андронов​).​ = «Y:PublicFolder1» End​ ChDir _ «Y:PublicFolder1″​shift​: Обращайтесь — кто​ форумах по эксель,​для каких случаев​ 10 страниц «правильного»​ несложно удалить из​ правильно понял вас.​
​End With​​ БОЛЬШОЕ СПАСИБО за​ ещё попроще, может​
​Юрик​ будет выведено текущее​ меню выберите​В этой главе даётся​Подсказка:​ If Set FSO​ Workbooks.Open Filename:= _​smile
​позволяет открыть файл​​ мешает? ) Public​ и почему то​ мои доводы не​
​ кода, а можно​ коллекции лишний Item.​ В данном случае,​Ну и собственно,​ помощь!!!​ после открытия книги,​
​: Меню: Сервис -​ значение переменной​Userform​ очень краткий обзор​Как увеличить скорость​ = Nothing End​ «Y:PublicFolder1FILENew.xls» дальше код​ в​ Wb As Workbook​

excelworld.ru

Как открыть книгу Excel в VBA

​ везде (кроме известных​​ верны?​ то же действие​KuklP​ мне караз таки​ открытие книги по​

​Ципихович Эндрю​​ можно как то​ Макрос — Редактор​j​,​
​ редактора Visual Basic​ выполнения макроса?​ Function​

​ работы с открытым​​Excel​ Sub Макрос1() Workbooks.Open​

​ мне форумов по​​KuklP​ описать одной строкой.​: Саша, ты из​

​ было удобнее воспользоваться​​ названию файла и​

​: если обращаетесь к​​ запустить макрос написанный​ Visual Basic.​.​Module​ в Excel. Если​
​В самом начале кода​В принципе я почти​ файлом​без автозапуска макросов​ Filename:=»D:ОтчетыСостояние ТС.xlsm» Set​ эксель) правильность одна.​: Саш, ты посмотри​

​опиши одной строкой​​ пушки по воробьям​ однострочным if, дабы​ папки активной:​ этому обекту тогда​ уже в Excel,​
​Или просто Alt​Чтобы открыть окно​или​

​ Вы любознательный читатель​​ Вашего макроса VBA​ во всём разобрался,​Вопрос: можно ли​IvanOK​ Wb = ActiveWorkbook​

​ Я никому не​​ на себя со​ алгоритм сортировки (без​ стреляешь. Миша пишет:​ не закрывать, а​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Set wb =​ КОНЕЧНО перед каждой​ а там уже​ — F11.​

​Locals​​Class Module​
​ и хотите узнать​ должны содержаться строки:​ осталось только понять,​ каким-то образом прописать​: открылось когда жал​ MsgBox Wb.Name End​

​ навязывал, даже не​​ стороны. Ты упорно​ выгрузки на лист)​Т.е. первый же​ перенос для наглядности.​ Workbooks.Open(ActiveWorkbook.Path & «»​ командой ставить oExcel!!!!!​ на много проще?​Саня​, нажмите​:)

​.​​ еще больше информации​Application.ScreenUpdating = False​ как не стирать​

​ оба пути, чтобы​​ шифт в самом​ Sub​ обсуждал этот вопрос​ пытаешься доказать всем​Цитата​:)

​ файл с несовпадающим​​Кстати, проверки названий​

planetaexcel.ru

Как открыть форму, а Excel скрыть или вовсе не открывать

​ & fn)​​S_e_m​S_e_m​: Хм… Вообще, если​Locals Window​Для каждого из описанных​ о редакторе, то​Application.Calculation = xlCalculationManual​ содержимое файла, при​ при обращении по​ экселе Файл-открыть, а​

​KL​​ (с совершенно посторонними​
​ участникам темы, что​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Что легче можно​

​ именем — нужный.​​ файлов на самого​

​—​​: С ВБ 6.0​​: Я очень прошу,​​ я не ошибаюсь,​
​в меню​ выше объектов предусмотрено​ при желании без​​Если таких строк нет,​
​ повторном запуске программы.​​ первому пути (через​ не щелкая по​​: Или даже так:​

​ людьми), но исходя​​ твой громоздкий, глючный​ будет понять и​ Вариант Vitalts гораздо​

​ себя у вас​​PS: что-то код​ закончил. Перекинулся на​ помогите с задачкой:​

​ то в MS​​View​ специальное окно, в​

​ проблем найдете ресурсы​​ то обязательно добавьте​ Практически уверен, что​ диск С), если​ самому файлу)))​Public Wb As​ из их сообщений,​ в таком виде​ отредактировать?​ лучше подходит для​ нет.​ при каждом релоаде​ ВБ .Нет 2010​

​ 1) та что​​ Office есть такая​​редактора Visual Basic.​​ котором будет создаваться​ с более подробным​ следующие строки в​
​ всё дело вот​ файл найден, продолжалась​
​IvanOK​ Workbook Sub Макрос1()​​ очевидно, что правильность​​ код лучше, чем​
​подозреваю, что эту​​ этого случая и​​Michael_S​ по разному кажет,​​ (по работе надо).​​ нужно, книга открылась.​

​ фишка — макросы.​​ В этом окне​ и храниться новый​ описанием.​ свой макрос, чтобы​ в этой строке:​

​ работа, а, если​​: при етом коде​ Set Wb =​ одна. Это видно​ пятистрочный код Vitalts.​ длинную строку будет​ не привлекает внешних​: Vitalts, в вашем​ пофиксил форматирование​ Никак не получается​ 2) Нужно скопировать​
​ Вот эти макросы​ отображаются все переменные,​ код VBA. Порядок​Простейший способ запустить редактор​

​ он работал быстрее​​oExcel = CreateObject(«Excel.Application»)​​ не найден, обращение​​ появляется ексель, потом​
​ Workbooks.Open (Filename:=»D:ОтчетыСостояние ТС.xlsm»)​ по коду, по​

​Я понимаю, если​​ сложнее понять и​​ библиотек. Я уж​​ варианте не хочет​
​nerv​​ с таким кодом->​ с этой книги​
​ пишутся на VB.​ объявленные в текущей​ при этом такой:​ Visual Basic в​ (см. рисунок выше):​Ведь тут явно​ происходило по второму​

​ исчезает, потом появляется​​ MsgBox Wb.Name End​ его стилю. Т.е.​ бы ты девушке,​ отредактировать, чем много​ не говорю о​​ открывать файл (error)​​: Зачем же такие​Dim exl As​ диапазон ячеек 3)​ Но что бы​ процедуре. Окно делится​
​Код, который относится к​ Excel – нажать​В самое начало кода​ создаётся новый файл.​ пути и далее,​ сама форма, а​ Sub​ все хорошие прогеры​ далекой от Экса,​

CyberForum.ru

2 возможных пути открытия файла в VBA

​ правильных/правильно_отформатированных строк​​ размере кода.​
​nerv, Саш, в​ извороты? не проще​
​ Object Dim xlUp​ вставить в другой​ Exel’ем открыть проект…​ на столбцы, в​
​ рабочей книге, должен​ комбинацию клавиш​ после всех строк,​ На что её​ опять же, продолжалась​ есель исчезает как​KL​ видя код говорят,​ это доказывал. Или​Цитата​nerv​
​ вашем варианте жалуется​ воспользоватся многострочным If?​ As Object Dim​
​ файл ексель этот​
​ ну тока если​ которых содержатся имя,​ быть введён в​Alt+F11​ начинающихся с​ нужно заменить, чтобы​ работа.​
​ ето избежать тоесть​: Кстати, ChDir для​ «что такое хорошо,​ ты всех нас​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ведро картошки можно​
​: Я ни в​
​ на​мой велосипед. Особо​ Selection As Object​ диапазон.​ скопировать исходник, создать​ значение и тип​
​ соответствующий объект​(то есть нажать​Dim​ вместо этого открывать​Думалось сделать через​ нужно что бы​ открытия книги таким​ а что такое​ дураками считаешь?​ отвезти на мопеде,​ кого не стреляю,​Mask​ не тестировал, но​
​ Dim xlDown As​Ну честно, очень​ макрос и туда​
​ каждой переменной, и​ЭтаКнига​ клавишу​(если строк, начинающихся​ существующий?​ on error resume​ просто появилась форма​ способом не нужен.​ плохо». Почему надо​Цитата​ не нужен для​ я животных люблю​и что он​ должен работать )​ Object Dim xlAscending​ нужно!!!​
​ код вставить)​

​ эта информация обновляется​​(ThisWorkbook);​​Alt​ с​

​Ev​​ next так:​

​ в невидемом екселепоявилась​​ Он нужен для​
​ делать так, а​(nerv)200?’200px’:»+(this.scrollHeight+5)+’px’);»>для каких случаев​ этого БелАз​Я привел написанный​ должен делать мне​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Example()​

​ As Object Dim​​Ципихович Эндрю​Тока придётся ещё​
​ автоматически в ходе​

​Код, который относится к​​и, удерживая её,​Dim​: Избыточно объявлять три​Sub MyCode ()​ просто форма​ функции GetOpenFileName, которая,​ не иначе.​ мои доводы не​его можно донести​ мной ранее код​

​ не понятно. У​​Set Folder =​ xlGuess As Object​
​: вижу что файл​ и форму там​ выполнения программы. Окно​

​ рабочему листу, должен​​ нажать клавишу​нет, то вставляем​

​ объектных переменных (oExcel,​​ On error resume​есть ли у​
​ кстати, тоже уже​Цитата​ верны? — и​ в руках, если​ (под свои нужды)​ меня задача -​ GetFileList(«d:Contacts»)​ Dim xlTopToBottom As​в то же​ чертить новую :)​Locals​ быть введён в​F11​ сразу после строки​

​ oBook, oSheet).​​ next ChDir _​
​ кого каки ето​ не нужна, т.к.​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Хочешь быть нарциссом​ правда думаешь, что​ на то пошло.​Цитата​ открыть файл.​End Sub​ Object Dim xlSortNormal​ время вижу​Олег филатов​очень полезно при​ соответствующий объект​

planetaexcel.ru

Visual Basic работа с файлами Excel (открытие на дозапись)

​). После этого откроется​Sub​Вполне достаточно одной…​ «Y:PublicFolder1» Workbooks.Open Filename:=​ варианты решения етой​ уже давно есть​ — ради Бога​ кому-то интересно искать​ Речь не об​
​(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Т.е. первый же​
​За помощь спасибо.​’ —————————————-​ As Object Sub​нестыковка​: Вот Вам руководство​ отладке кода VBA.​

​Лист​​ окно редактора Visual​):​.​
​ _ «Y:PublicFolder1FILENew.xls» ChDir​
​ проблемы​

​ Application.FileDialog(msoFileDialogOpen)​

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

Содержание

  1. Запуск редактора Visual Basic
  2. Окна редактора Visual Basic
  3. Окно проекта (Project)
  4. Окно кода (Code)
  5. Окно свойств (Properties)
  6. Окно отладчика (Immediate)
  7. Окно переменных (Locals)
  8. Окно отслеживания (Watches)

Запуск редактора Visual Basic

Простейший способ запустить редактор Visual Basic в Excel – нажать комбинацию клавиш Alt+F11 (то есть нажать клавишу Alt и, удерживая её, нажать клавишу F11). После этого откроется окно редактора Visual Basic, как показано на картинке ниже. Имейте ввиду, что окно Excel остается открытым и находится позади окна редактора.

Редактор Visual Basic в Excel

Окна редактора Visual Basic

В процессе работы в редакторе Visual Basic в Excel могут быть открыты различные окна. Управление окнами осуществляется в меню View, которое находится в верхней части окна редактора VBA. Ниже дано описание отдельных окон.

Окно проекта (Project)

Окно Project открывается в левой части редактора VBA (показано на картинке выше). В этом окне для каждой открытой рабочей книги создаётся проект VBA (VBA Project). Проект VBA – это набор всех объектов и модулей VBA, привязанных к текущей книге. Изначально в него входят:

  • Объект ЭтаКнига (ThisWorkbook), привязанный к книге Excel;
  • Объекты Лист (Sheet), привязанные к каждому листу текущей рабочей книги Excel.Редактор Visual Basic в Excel

Самостоятельно в проект можно добавить объекты Userform, Module и Class Module. Если Вы посмотрите на картинку выше, то увидите, что в проект VBA для книги Book1.xlsm добавлен объект Module с названием Module1.

Вот как можно создать новый объект Userform, Module или Class Module:

  • В окне Project выберите рабочую книгу, в которую нужно добавить объект, и кликните по ней правой кнопкой мыши.
  • В появившемся меню кликните Insert и в раскрывшемся меню выберите Userform, Module или Class Module.

Для каждого из описанных выше объектов предусмотрено специальное окно, в котором будет создаваться и храниться новый код VBA. Порядок при этом такой:

  • Код, который относится к рабочей книге, должен быть введён в соответствующий объект ЭтаКнига (ThisWorkbook);
  • Код, который относится к рабочему листу, должен быть введён в соответствующий объект Лист (Sheet);
  • Код более общего характера должен быть введён в Module;
  • Код для нового объекта должен быть введён в Class Module;
  • Если нужно создать диалоговое окно для взаимодействия с пользователем, то можно использовать Userform.

Окно кода (Code)

Двойной щелчок мышью по любому объекту в окне Project открывает соответствующее окно Code, предназначенное для ввода кода VBA с клавиатуры. На одном из приведённых выше рисунков показано окно кода для Module1.

По мере ввода кода VBA в окно Code, редактор Visual Basic следит за правильностью ввода, ищет ошибки в коде и выделяет код, который требует исправления.

Окно свойств (Properties)

В окне Properties перечислены свойства объекта, который в момент создания (не в процессе выполнения программы) выделен в окне проекта. Эти свойства могут быть различными в зависимости от типа выделенного объекта (лист, книга, модуль и другие).

Редактор Visual Basic в Excel

Окно отладчика (Immediate)

Окно Immediate можно отобразить в редакторе Visual Basic через меню View > Immediate Window или нажатием комбинации клавиш Ctrl+G. Это окно помогает при отладке кода. Оно выполняет роль области вывода для отладки выражений и позволяет вычислять отдельные выражения или выполнять строки кода по одной.

Например, введите выражение «?j» и нажмите Enter – в результате будет выведено текущее значение переменной j.

Редактор Visual Basic в Excel

Окно переменных (Locals)

Чтобы открыть окно Locals, нажмите Locals Window в меню View редактора Visual Basic. В этом окне отображаются все переменные, объявленные в текущей процедуре. Окно делится на столбцы, в которых содержатся имя, значение и тип каждой переменной, и эта информация обновляется автоматически в ходе выполнения программы. Окно Locals очень полезно при отладке кода VBA.

Редактор Visual Basic в Excel

Окно отслеживания (Watches)

Окно Watches также очень помогает при отладке кода VBA, так как в нём можно увидеть значение, тип и контекст любого отслеживаемого выражения, которое задаст пользователь. Чтобы открыть окно Watches, нажмите Watch Window в меню View редактора Visual Basic. Также окно Watches будет открыто автоматически, если задать отслеживаемое выражение.

Редактор Visual Basic в Excel

Чтобы задать отслеживаемое выражение, нужно:

  1. Выделить выражение в редактируемом коде VBA.
  2. В меню Debug редактора VBA нажать Quick Watch.
  3. Нажать Add.

Кроме рассмотренных, в меню редактора Visual Basic в Excel существует ещё множество параметров и команд, используемых при создании, выполнении и отладке кода VBA.

Оцените качество статьи. Нам важно ваше мнение:

excel vba userform

The Excel VBA UserForm allows you to create a new Excel custom Window with select Form or ActiveX controls such a Button, ListBox, CheckBox and other controls. You can Show or Hide the UserForm and customize it as needed.

Below you will find a complete tutorial on how to create and customize your own Excel VBA UserForm.

Create VBA UserForm

User Forms fill the gap where a Message Box won’t do. UserForms allow you to create custom forms with Buttons, Combo-boxes, Scrollbars and many more controls.

Open the VBA Project to add a new UserForm

Excel VBA Tutorial: Inserting a new UserForm

Inserting a new UserForm

A new UserForm will be inserted into your VBA Project under a new branch called Forms.

Open the new UserForm and the Toolbox to view controls

Let’s create a simple form. First we need to see what form controls can we add to it. To view the Toolbox go to the View menu and select Toolbox:

Excel VBA Tutorial: Open the UserForm Toolbox

Open the UserForm Toolbox

Add Button to UserForm

Now let’s add a simple button to our new form. To do that we simply need to drag it from the Toolbox. Hit the Button icon and drag it to the new form:

Add a Button to your UserForm

Add a Button to your UserForm

To add code to your Button – double-click the button on the UserForm. This will navigate you to the code section of the UserForm. You can also go to the View code section as shown below:

Excel VBA Tutorial: View code on the UserForm

View code on the UserForm

This should create the following code stub:

Private Sub CommandButton1_Click()

End Sub

Let’s just add a simple MessageBox to the new form to see that the button works:

Private Sub CommandButton1_Click()
 MsgBox "Hello this is CommandButton1!"
End Sub

Show / Hide User Form

Now as we have created our new UserForm let’s put it to the test. Below a simple example of how to execute your UserForm:

Sub TestUserForm()
 Dim uf as UserForm1
 Set uf = New UserForm1
 uf.Show 'Will make the UserForm Visible
End Sub

Try clicking on the button to see that it works!
If you want to close the VBA UserForm use the Hide procedure. I replaced the contents of the Button Click procedure above as per below:

Private Sub CommandButton1_Click()
 uf.Hide 'Will close / hide the UserForm
End Sub

UserForm Events

VBA Events are procedures that run automatically when something happens. VBA UserForm events are similar to VBA Worksheet or VBA Workbook events. The following is a list of available VBA UserForm events for Excel:

UserForm Event Description
Activate VBA UserForm is activated (is front facing application against other forms or Excel windows)
AddControl A Control is added to the VBA UserForm at run time
BeforeDragOver A Mouse Drag and Drop operation is in progress (before drop)
BeforeDropOrPaste Left click is released and data is dropped and pasted
Click Left click on the VBA UserForm (not a control)
DblClick Double left click on the VBA UserForm (not on a control)
Deactivate UserForm loses focus
Initialize Runs when the UserForm is created (to initialize the form e.g. add items to lists etc.)
KeyDown Any keyboard button is pressed while the VBA UserForm is Active
KeyPress An ANSI key is pressed when VBA UserForm is Active
KeyUp Any keyboard button key is released while VBA Userform is active
Layout Size of the UserForm was changed at run time
MouseDown Any mouse button is pressed on the VBA UserForm (not a control)
MouseMove Mouse is moved over the VBA UserForm
MouseUp Mouse is released over the VBA UserForm
QueryClose VBA UserForm is closed or memory released
RemoveControl A control is removed from VBA UserForm at run time
Resize VBA UserForm is resized
Scroll VBA UserForm is scrolled
Terminate VBA UserForm is removed from memory
Zoom Occurs when VBA UserForm is zoomed

Adding UserForm Events

To add Events to your UserForm use the drop-downs in the VBA Module of the Form:
vba userform events
Below are examples UserForm events:

Private Sub UserForm_Click()
  Debug.Print "User Form was clicked!"
End Sub

Private Sub UserForm_Initialize()
  Debug.Print "User Form was created!"
End Sub

Like this post? Please share to your friends:
  • Excel вызвать все имена
  • Excel вызвать visual basic
  • Excel выделять ячейки при нажатии
  • Excel выделять цифру цветом если
  • Excel выделять разные совпадения разным цветом