Пример создания пользовательской формы в редакторе 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».
Visual Basic is an excellent language for automating repetitive tasks in Excel. Imagine taking your automation up a notch by creating highly functional user forms that also look tidy to the end-users.
User forms in VBA present you with a blank canvas; you can design and organize the forms to fit your needs at any given time.
In this guide, you will learn to create a student-based data entry form that captures relevant information in linked Excel sheets.
Creating a User Form With Excel VBA
Open a new Excel workbook and perform a few preliminary steps before you start creating your data-entry form.
Save your workbook with the desired name; don’t forget to change the file’s type to an Excel Macro-Enabled Workbook.
Add two sheets to this workbook, with the following names:
- Sheet1: Home
- Sheet2: Student Database
Feel free to change these names as per your requirements.
In the Home sheet, add a button to control the user form macro. Go to the Developer tab and click on the Button option from the Insert drop-down list. Place the button anywhere on the sheet.
Once you’ve placed the button, rename it. Right-click on it, and click on New to assign a new macro to show the form.
Enter the following code in the editor window:
Sub Button1_Click()UserForm.ShowEnd Sub
Once the Home and Student Database sheets are ready, it’s time to design the user form. Navigate to the Developer tab, and click on Visual Basic to open the Editor. Alternatively, you can press ALT+F11 to open the editor window.
Click on the Insert tab and select UserForm.
A blank user form is ready for use; an accompanying toolbox opens along with the form, which has all the essential tools to design the layout.
From the toolbox, select the Frame option. Drag this to the user form and resize it.
In the (name) option, you can change the name of the frame. To showcase the name on the front-end, you can change the name in the Caption column.
Next, select the Label option from the toolbox and insert two labels within this frame. Rename the first one as Application Number and the second as Student ID.
The same renaming logic applies; change the names via the Caption option within the Properties window. Make sure you select the respective label before changing its name.
Next, insert two text boxes next to the label boxes. These will be used to capture the user’s inputs. Change the names of two text boxes via the (Name) column within the Properties window. The names are as follows:
- Textbox1: txtApplicationNo
- Textbox2: txtStudentID
Designing the Student Details Frame
Insert a vertical frame and add 10 labels and 10 text boxes. Rename each of them in the following manner:
- Label3: Name
- Label4: Age
- Label5: Address
- Label6: Phone
- Label7: City
- Label8: Country
- Label9: Date of Birth
- Label10: Zip Code
- Label11: Nationality
- Label12: Gender
Insert corresponding text boxes next to these labels; insert two (or more) optionbutton boxes from the user form toolbox next to the gender label. Rename them Male and Female (along with Custom), respectively.
Designing the Course Details Frame
Add another vertical frame and insert six labels and six text boxes corresponding to each label. Rename the labels as follows:
- Label13: Course Name
- Label14: Course ID
- Label15: Enrollment Start Date
- Label16: Enrollment End Date
- Label17: Course duration
- Label18: Department
Designing the Payment Details Frame
Insert a new frame; add a new label and rename it «Do you wish to update the Payment details?» Insert two optionbuttons; rename them Yes and No.
Similarly, add a new frame containing two additional labels and two combo boxes. Rename the labels as follows:
- Label19: Payment Received
- Label20: Mode of Payment
Designing the Navigation Pane
In the final frame, add three buttons from the toolbox, which will contain code for the execution of the forms.
Rename the buttons in the following manner:
- Button1: Save Details
- Button2: Clear Form
- Button3: Exit
Writing the Automated Form Code: Save Details Button
Double-click on the Save Details button. In the ensuing module, insert the following code:
Private Sub CommandButton2_Click()‘declare the variables used throughout the codesDim sht As Worksheet, sht1 As Worksheet, lastrow As Long'Add validations to check if character values are being entered in numeric fields.If VBA.IsNumeric(txtApplicationNo.Value) = False ThenMsgBox "Only numeric values are accepted in the Application Number", vbCriticalExit SubEnd IfIf VBA.IsNumeric(txtStudentID.Value) = False ThenMsgBox "Only numeric values are accepted in the Student ID", vbCriticalExit SubEnd IfIf VBA.IsNumeric(txtAge.Value) = False ThenMsgBox "Only numeric values are accepted in Age", vbCriticalExit SubEnd IfIf VBA.IsNumeric(txtPhone.Value) = False ThenMsgBox "Only numeric values are accepted in Phone Number", vbCriticalExit SubEnd IfIf VBA.IsNumeric(Me.txtCourseID.Value) = False ThenMsgBox "Only numeric values are accepted in Course ID", vbCriticalExit SubEnd If'link the text box fields with the underlying sheets to create a rolling databaseSet sht = ThisWorkbook.Sheets("Student Database")'calculate last populated row in both sheetslastrow = sht.Range("a" & Rows.Count).End(xlUp).Row + 1'paste the values of each textbox into their respective sheet cellsWith sht.Range("a" & lastrow).Value = txtApplicationNo.Value.Range("b" & lastrow).Value = txtStudentID.Value.Range("c" & lastrow).Value = txtName.Value.Range("d" & lastrow).Value = txtAge.Value.Range("e" & lastrow).Value = txtDOB.Value.Range("g" & lastrow).Value = txtAddress.Value.Range("h" & lastrow).Value = txtPhone.Value.Range("i" & lastrow).Value = txtCity.Value.Range("j" & lastrow).Value = txtCountry.Value.Range("k" & lastrow).Value = txtZip.Value.Range("l" & lastrow).Value = txtNationality.Value.Range("m" & lastrow).Value = txtCourse.Value.Range("n" & lastrow).Value = txtCourseID.Value.Range("o" & lastrow).Value = txtenrollmentstart.Value.Range("p" & lastrow).Value = txtenrollmentend.Value.Range("q" & lastrow).Value = txtcourseduration.Value.Range("r" & lastrow).Value = txtDept.ValueEnd Withsht.Activate'determine gender as per user's inputIf optMale.Value = True Then sht.Range("g" & lastrow).Value = "Male"If optFemale.Value = True Then sht.Range("g" & lastrow).Value = "Female"'Display a message box, in case the user selects the Yes radio buttonIf optYes.Value = True ThenMsgBox "Please select the payment details below"Else:Exit SubEnd IfEnd Sub
If you’re not sure what parts or any of the code means, don’t worry. We’ll explain it thoroughly in the next section.
Automated Form Code Explained
The textboxes will contain a mix of text and numeric values, so it’s essential to restrict the user’s input. The Application Number, Student ID, Age, Phone, Course ID, and Course Duration should contain only numbers, while the rest will contain text.
Using an IF statement, the code triggers error pop-ups if the user enters a character or text value in any of the numeric fields.
Since the error validations are in place, you need to link the text boxes with the sheet cells.
The lastrow variables will calculate the last populated row, and store the values in them for dynamic use.
Finally, the values are pasted from the text boxes into the linked Excel sheet.
Clear Form and Exit Button Codes
In the clear button, you need to write the code to clear the existing values from the user form. This can be done in the following manner:
With Me.txtApplicationNo.Value = "".txtStudentID.Value = ""..txtName.Value = "".txtAge.Value = "".txtAddress.Value = "".txtPhone.Value = "".txtCity.Value = "".txtCountry.Value = "".txtDOB.Value = "".txtZip.Value = "".txtNationality.Value = "".txtCourse.Value = "".txtCourseID.Value = "".txtenrollmentstart.Value = "".txtenrollmentend.Value = "".txtcourseduration.Value = "".txtDept.Value = "".cmbPaymentMode.Value = "".cmbPayment.Value = "".optFemale.Value = False.optMale.Value = False.optYes.Value = False.optNo.Value = FalseEnd With
In the exit button, enter the following code to close the user form.
Private Sub CommandButton5_Click()Unload MeEnd Sub
As a last step, you need to input a few final pieces of code to create the drop-down values for the combo boxes (within the payment frames).
Private Sub UserForm_Activate()With cmbPayment.Clear.AddItem "".AddItem "Yes".AddItem "No"End WithWith cmbPaymentMode.Clear.AddItem "".AddItem "Cash".AddItem "Card".AddItem "Check"End WithEnd Sub
VBA Automation Makes Work Easier
VBA is a multi-faceted language that serves many purposes. User forms are only one aspect within VBA—there are many other uses like consolidating workbooks and worksheets, merging multiple Excel sheets, and other handy automation uses.
No matter the automation goal, VBA is up to the task. If you keep learning and getting practice in, there’s no aspect of your workflow you can’t improve.
В этой заметке описываются методы создания пользовательских диалоговых окон, которые существенно расширяют стандартные возможности 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 отсутствует команда, обеспечивающая доступ к форме ввода данных. Подобную команду можно добавить на панель быстрого доступа. Для этого выполните следующие действия.
- Щелкните правой кнопкой мыши на панели быстрого доступа и в контекстном меню выберите параметр Настройка панели быстрого доступа.
- На экране появится вкладка Панель быстрого доступа диалогового окна Параметры Excel.
- В раскрывающемся списке Выбрать команды из выберите параметр Команды не на ленте.
- В появившемся списке выберите параметр Форма.
- Щелкните на кнопке Добавить для добавления выбранной команды на панель быстрого доступа.
- Щелкните на кнопке ОК для закрытия диалогового окна Параметры Excel.
После выполнения перечисленных выше действий на панели быстрого доступа появится новый значок.
Для работы с формой ввода данных следует структурировать данные таким образом, чтобы Excel распознавал их в виде таблицы. Начните с указания заголовков столбцов в первой строке диапазона вводимых данных. Выделите любую ячейку в таблице и щелкните на кнопке Форма панели быстрого доступа. Excel отображает диалоговое окно, в котором будут вводиться данные. Для перемещения между текстовыми полями в целях ввода информации используйте клавишу <Tab>. Если ячейка содержит формулу, результат вычислений отображается в виде текста (а не в формате поля ввода данных). Другими словами, невозможно изменить формулы с помощью формы ввода данных.
По завершении ввода данных в форму щелкните на кнопке Создать. После этого Excel вводит данные в строку рабочего листа, а также очищает диалоговое окно для ввода следующей строки данных.
Используйте метод ShowDataForm для отображения формы ввода данных Excel. Единственное требование заключается в том, что активная ячейка должна находиться в диапазоне. Следующий код активизирует ячейку А1 (в таблице), а затем отображает форму ввода данных.
Sub DisplayDataForm() Range(«A1»).Select ActiveSheet.ShowDataForm End Sub |
[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 387–403.
При упоминании баз данных (БД) первым делом, конечно, в голову приходят всякие умные слова типа SQL, Oracle, 1С или хотя бы Access. Безусловно, это очень мощные (и недешевые в большинстве своем) программы, способные автоматизировать работу большой и сложной компании с кучей данных. Беда в том, что иногда такая мощь просто не нужна. Ваш бизнес может быть небольшим и с относительно несложными бизнес-процессами, но автоматизировать его тоже хочется. Причем именно для маленьких компаний это, зачастую, вопрос выживания.
Для начала давайте сформулируем ТЗ. В большинстве случаев база данных для учета, например, классических продаж должна уметь:
- хранить в таблицах информацию по товарам (прайс), совершенным сделкам и клиентам и связывать эти таблицы между собой
- иметь удобные формы ввода данных (с выпадающими списками и т.п.)
- автоматически заполнять этими данными какие-то печатные бланки (платежки, счета и т.д.)
- выдавать необходимые вам отчеты для контроля всего бизнес-процесса с точки зрения руководителя
Со всем этим вполне может справиться Microsoft Excel, если приложить немного усилий. Давайте попробуем это реализовать.
Шаг 1. Исходные данные в виде таблиц
Информацию о товарах, продажах и клиентах будем хранить в трех таблицах (на одном листе или на разных — все равно). Принципиально важно, превратить их в «умные таблицы» с автоподстройкой размеров, чтобы не думать об этом в будущем. Это делается с помощью команды Форматировать как таблицу на вкладке Главная (Home — Format as Table). На появившейся затем вкладке Конструктор (Design) присвоим таблицам наглядные имена в поле Имя таблицы для последующего использования:
Итого у нас должны получиться три «умных таблицы»:
Обратите внимание, что таблицы могут содержать дополнительные уточняющие данные. Так, например, наш Прайс содержит дополнительно информацию о категории (товарной группе, упаковке, весу и т.п.) каждого товара, а таблица Клиенты — город и регион (адрес, ИНН, банковские реквизиты и т.п.) каждого из них.
Таблица Продажи будет использоваться нами впоследствии для занесения в нее совершенных сделок.
Шаг 2. Создаем форму для ввода данных
Само-собой, можно вводить данные о продажах непосредственно в зеленую таблицу Продажи, но это не всегда удобно и влечет за собой появление ошибок и опечаток из-за «человеческого фактора». Поэтому лучше будет на отдельном листе сделать специальную форму для ввода данных примерно такого вида:
В ячейке B3 для получения обновляемой текущей даты-времени используем функцию ТДАТА (NOW). Если время не нужно, то вместо ТДАТА можно применить функцию СЕГОДНЯ (TODAY).
В ячейке B11 найдем цену выбранного товара в третьем столбце умной таблицы Прайс с помощью функции ВПР (VLOOKUP). Если раньше с ней не сталкивались, то сначала почитайте и посмотрите видео тут.
В ячейке B7 нам нужен выпадающий список с товарами из прайс-листа. Для этого можно использовать команду Данные — Проверка данных (Data — Validation), указать в качестве ограничения Список (List) и ввести затем в поле Источник (Source) ссылку на столбец Наименование из нашей умной таблицы Прайс:
Аналогичным образом создается выпадающий список с клиентами, но источник будет уже:
=ДВССЫЛ(«Клиенты[Клиент]»)
Функция ДВССЫЛ (INDIRECT) нужна, в данном случае, потому что Excel, к сожалению, не понимает прямых ссылок на умные таблицы в поле Источник. Но та же ссылка «завернутая» в функцию ДВССЫЛ работает при этом «на ура» (подробнее об этом было в статье про создание выпадающих списков с наполнением).
Шаг 3. Добавляем макрос ввода продаж
После заполнения формы нужно введенные в нее данные добавить в конец таблицы Продажи. Сформируем при помощи простых ссылок строку для добавления прямо под формой:
Т.е. в ячейке A20 будет ссылка =B3, в ячейке B20 ссылка на =B7 и т.д.
Теперь добавим элементарный макрос в 2 строчки, который копирует созданную строку и добавляет ее к таблице Продажи. Для этого жмем сочетание Alt+F11 или кнопку Visual Basic на вкладке Разработчик (Developer). Если эту вкладку не видно, то включите ее сначала в настройках Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon). В открывшемся окне редактора Visual Basic вставляем новый пустой модуль через меню Insert — Module и вводим туда код нашего макроса:
Sub Add_Sell() Worksheets("Форма ввода").Range("A20:E20").Copy 'копируем строчку с данными из формы n = Worksheets("Продажи").Range("A100000").End(xlUp).Row 'определяем номер последней строки в табл. Продажи Worksheets("Продажи").Cells(n + 1, 1).PasteSpecial Paste:=xlPasteValues 'вставляем в следующую пустую строку Worksheets("Форма ввода").Range("B5,B7,B9").ClearContents 'очищаем форму End Sub
Теперь можно добавить к нашей форме кнопку для запуска созданного макроса, используя выпадающий список Вставить на вкладке Разработчик (Developer — Insert — Button):
После того, как вы ее нарисуете, удерживая нажатой левую кнопку мыши, Excel сам спросит вас — какой именно макрос нужно на нее назначить — выбираем наш макрос Add_Sell. Текст на кнопке можно поменять, щелкнув по ней правой кнопкой мыши и выбрав команду Изменить текст.
Теперь после заполнения формы можно просто жать на нашу кнопку, и введенные данные будут автоматически добавляться к таблице Продажи, а затем форма очищается для ввода новой сделки.
Шаг 4. Связываем таблицы
Перед построением отчета свяжем наши таблицы между собой, чтобы потом можно было оперативно вычислять продажи по регионам, клиентам или категориям. В старых версиях Excel для этого потребовалось бы использовать несколько функций ВПР (VLOOKUP) для подстановки цен, категорий, клиентов, городов и т.д. в таблицу Продажи. Это требует времени и сил от нас, а также «кушает» немало ресурсов Excel. Начиная с Excel 2013 все можно реализовать существенно проще, просто настроив связи между таблицами.
Для этого на вкладке Данные (Data) нажмите кнопку Отношения (Relations). В появившемся окне нажмите кнопку Создать (New) и выберите из выпадающих списков таблицы и названия столбцов, по которым они должны быть связаны:
Важный момент: таблицы нужно задавать именно в таком порядке, т.е. связанная таблица (Прайс) не должна содержать в ключевом столбце (Наименование) повторяющихся товаров, как это происходит в таблице Продажи. Другими словами, связанная таблица должна быть той, в которой вы искали бы данные с помощью ВПР, если бы ее использовали.
Само-собой, аналогичным образом связываются и таблица Продажи с таблицей Клиенты по общему столбцу Клиент:
После настройки связей окно управления связями можно закрыть, повторять эту процедуру уже не придется.
Шаг 5. Строим отчеты с помощью сводной
Теперь для анализа продаж и отслеживания динамики процесса, сформируем для примера какой-нибудь отчет с помощью сводной таблицы. Установите активную ячейку в таблицу Продажи и выберите на ленте вкладку Вставка — Сводная таблица (Insert — Pivot Table). В открывшемся окне Excel спросит нас про источник данных (т.е. таблицу Продажи) и место для выгрузки отчета (лучше на новый лист):
Жизненно важный момент состоит в том, что нужно обязательно включить флажок Добавить эти данные в модель данных (Add data to Data Model) в нижней части окна, чтобы Excel понял, что мы хотим строить отчет не только по текущей таблице, но и задействовать все связи.
После нажатия на ОК в правой половине окна появится панель Поля сводной таблицы, где нужно щелкнуть по ссылке Все, чтобы увидеть не только текущую, а сразу все «умные таблицы», которые есть в книге.А затем можно, как и в классической сводной таблице, просто перетащить мышью нужные нам поля из любых связанных таблиц в области Фильтра, Строк, Столбцов или Значений — и Excel моментально построит любой нужный нам отчет на листе:
Не забудьте, что сводную таблицу нужно периодически (при изменении исходных данных) обновлять, щелкнув по ней правой кнопкой мыши и выбрав команду Обновить (Refresh), т.к. автоматически она этого делать не умеет.
Также, выделив любую ячейку в сводной и нажав кнопку Сводная диаграмма (Pivot Chart) на вкладке Анализ (Analysis) или Параметры (Options) можно быстро визуализировать посчитанные в ней результаты.
Шаг 6. Заполняем печатные формы
Еще одной типовой задачей любой БД является автоматическое заполнение различных печатных бланков и форм (накладные, счета, акты и т.п.). Про один из способов это сделать, я уже как-то писал. Здесь же реализуем, для примера, заполнение формы по номеру счета:
Предполагается, что в ячейку C2 пользователь будет вводить число (номер строки в таблице Продажи, по сути), а затем нужные нам данные подтягиваются с помощью уже знакомой функции ВПР (VLOOKUP) и функции ИНДЕКС (INDEX).
Ссылки по теме
- Как использовать функцию ВПР (VLOOKUP) для поиска и подстановки значений
- Как заменить ВПР функциями ИНДЕКС и ПОИСКПОЗ
- Автоматическое заполнение форм и бланков данными из таблицы
- Создание отчетов с помощью сводных таблиц
Упрощение ввода данных с помощью формы данных
Смотрите такжеСколько может стоить на одном) и те же с датой (А:А) день захотите подправить макроса закрепить в в том, чтоУ меня идеяВалера «нет — добавить» чтобы появляющееся окно: Павел, что-то неФорма строку, которую требуется
Нажмите кнопку.Форма данных представляет собой подобная работа?2. Не могу или меняются по просто реализовывалась функция (забыли заполнить) предыдущий?
верхней закреплённой части через какое-то время
наподобие. В таблице: В развитие задачи еще одну «отмена» формы не блокировало
срабатывает форма -нет на ленте, удалить, с помощьюСоздать
Нажмите кнопку удобный способ ввода
Тринадцать реализовать поиск в
-
прихоти пользователя? Если ТДАТА?Bachata листа.
-
позиций в файле я ее в Kegrus-а. Надо чтобыспасибо Вам за просмотр остальных книг
-
выдает ошибку но в Excel кнопок
-
.Создать
или просмотра одной: Зато поддерживают ZIP-формат. комбобоксе в принципе
-
одинаковые , тоwild_pig: Ну, например, предыдущийwild_pig становится очень много,
-
целом воплотил. Только в ComboBox отображались помощь! и листов excel?Pavel55 2010 кнопкуНазадВ форме данных найдите.
строки данных вyutrans
-
3. Не могу можно сделать форму: Вот день закончился так:: Вариант с формой
-
и каждый раз вот созданием форм 2 столбца: №ппPavel55и что нужно
-
: какую?
-
Формаи строку, которую требуетсяВведите данные для новой
-
диапазон или таблице.: Сделала кнопку вызова сделать вывод данных ввода, а базуfoxmeyson
-
31.01.2014 такос 200Bachata листать в конец
-
никогда в Excel ответа и сам: Посмотрите пример дописать в код,Petrможно добавить наНайти далее изменить, с помощью
-
строки.
В форме данных формы и заархивировала в соответствующие ячейки на Excel. Делаем: Друзья, подскажите, как 226: Спасибо большое, то листа, чтобы ввести
-
не занимался. Посему ответ. Например:Petr
чтобы данные копировались: Уважаемый Pavel55!
панель быстрого доступа.или полосы прокрутки. кнопокНажимайте клавишу TAB для отображаются все столбцы, )
— все время
-
подключение через стандартный вы это делаете?На следующий день, что нужно!
-
очередное блюдо ну интересуюсь.1 заявка: Pavel55, еще раз в строго определенный
-
немного изменил ВашЩелкните стрелку рядом сНажмите кнопку
-
Назад перехода к следующему и поэтому одновременноПоиск в комбобоксе вылазят разные ошибки импорт данных MSПросто мне необходимо 1 февраля, я
-
Скажите, а можно очень неудобно!!Расскажите (или скажите
2 договор спасибо! лист, а не пример под себя.панелью быстрого доступаУдалить
и полю в форме.
См. также
можно просмотреть все посмотрите по этой
4. Не получается Query. Ну или
support.office.com
Что произошло с формой данных?
самому написать нечто нажимаю на кнопочку добавить в формуНе могли бы где взять) инфо3 реализацияKegrus в тот вподскажите как сделатьи выберите пункт.Найти далееЗакончив ввод данных в данные в строке. ссылке: отрегулировать ширину нужного что-то посложнее, но подобное, только чтобы «добавить», и все поле для даты? вы подсказать решение по поводу -
4 снижение: Как сделать в котором форма активна чтоб если данныеДругие командыВнимание: или полосы прокрутки. строку, нажмите клавишу
Добавление кнопки «Форма» на панель быстрого доступа
-
Это особенно полезно,http://www.planetaexcel.ru/forum/ind…obox-s-poiskom столбца и скрыть уже на Аccess форма ввода была
-
поля формы, кроме Т.е. чтобы ее моей проблемы? Как как рисовать саму5 увеличение
-
форме ввода данных в данный момент. из поля 1. В Excel будет выведен
Измените данные в строке. RETURN , чтобы если в диапазонеlesha1111 остальные в комбобоксе или так как
support.office.com
форма ввода данных
доступна по сети поля «дата» (в
можно было вводить я понимаю, самым форму и как6 расторжение раскрывающийся список:
Pavel55 уже есть вВ поле запрос на подтверждениеСовет:
добавить строку в или таблице больше
: Здравствуйте! Подскажите пожалуйста (почему-то разделитель «;»
Матраскин предложил. и заносила данные нем уже стоит вручную?
удобным вариантом было прикручивать на элементы
А в соответствующиеПримеру: 20 объектов
: Посмотрите пример. списке то выводилось
Выбрать команды из: операции. После подтверждения Чтобы перейти к следующему конец списка. столбцов данных, чем как сделать что не принимает программа…)Тринадцать без открытия документа+
дата предыдущего дняНе знаю, реализуемо
бы создание форм? управления «источник информации» ячейки Excel заносился с собственными названиями
P.S. У меня
бы предупреждение свыберите пункт
удаление строки нельзя
полю формы, нажмитеПо завершении добавления строк помещается на экране. бы ввод данных
Понравилось как реализован
: Добрый день!
данные будут связаны
— 31.01.2014), пустые. ли это ,
Спасибо! (Файлик прикладываю) и ячейку-получатель.
только №пп… и номерами(чтобы постоянно
такое чувство, что предложением заменить старые
Все команды отменить. клавишу TAB , нажмите кнопкуПеред созданием формы данных занесенных через форму
поиск у mc-blackПо работе столкнулась в разных книгах. Я вручную изменяю но было быwild_pigБуду рад комментариям.Юрий М
не писать навание вы удаляете записи
или добавить новые.Все строки, следующие за к предыдущему полюЗакрыть необходимо добавить подписи записывались каждый раз здесь Выпадающий список, с необходимостью заполнятьВ какую сторону запись в поле удобно, если бы
: Меньше еды -Юрий М: Вот так.
объектов в полях, из таблицы каким-то данные.В списке выберите кнопку
удаленной, перемещаются вверх. — сочетание клавиш, чтобы добавить последнюю вверху каждого столбца в новую строку. отфильтрованный по введенным
большие таблицы, в копать? Опыта нет))) даты с 31.01.2014
в поле даты меньше файлик :): Список доступной дляВалера а выбирать из
странным способом. Например,ZVI
ФормаВвод ряда чисел, дат
SHIFT + TAB новую строку и в диапазоне или
TimSha буквам которых сложно найтиЗаранее огромное спасибо.
на 01.02.2014, заполняю (которое по-прежнему остаетсяwild_pig скачивания литературы и: Ээээ, Юрий. Прикреплен списка). нажав пробел на
: —и нажмите кнопку или других элементов .
закрыть форму данных. таблице. В Excel: А как выно не смогла нужную строку. Решила
wild_pig остальные поля и
редактируемым) по дефолту: А что надо ссылки на ресурсы
файл с 2P/S И как ячейке, если этоВ Excel естьДобавитьАвтоматическое заполнение списков вЗакончив изменение данных, нажмите
Для последней строки эти подписи используются делали/делаете — форму, переписать под свою
сделать форму, но
: Может мы вражины, делаю запись. И стояло значение (т.е. то? можно найти в столбцами на листе. добавить новый объект
так, то таким
встроенная форма для
.
Excel
клавишу RETURN ,
не требуется нажимать
для создания полей таблицу и пр.? таблицу
т.к. мои знания но маскируемся?
во всех последующих дата) предыдущей ячейки.Bachata «Копилке». Загляните в Никакими ComboBox-ами там в список формы образом удалять информацию
редактирования данных, изСовет:Примечание: чтобы обновить строку. клавишу RETURN . в форме.От вас -
Помогите, пожалуйста, реализовать VBA скудны, промучаласьЦитата записях текущего дня Например, в день
: Ну, как. Хочу Правила — там и не пахнет данных нельзя! Информация из VBA вызывается так: Дополнительные сведения об использовании
Мы стараемся какВ Excel будет автоматически
Примечания:Подписи столбцов становятся файл-пример со своими эту задачу. несколько недель почти200?’200px’:»+(this.scrollHeight+5)+’px’);»>В какую сторону копать вручную прописывать дату нужно ввести 10-20
сделать форму ввода всё есть. :)Петр ячеек надо удалятьSub ФормаВводаДанных() формы данных: Добавление, можно оперативнее обеспечивать
выбрана следующая строка.
именами полей. попытками и пояснениями.Файл прикрепляю. Данные безрезультатно… Копайте в сторону не придется наименований блюд. Ты
planetaexcel.ru
Простая форма ввода данных (Макросы Sub)
— т.е. чтобыBachataЮрий М
: Подскажите, а где так:On Error Resume изменение, поиск и вас актуальными справочнымиСовет:В Excel строка автоматически
Данные, вводимые вlesha1111 в таблице могутЧто надо: создания своих тем,(дело в том, вместе с первым можно данные было: Всем доброго времени: Я не знал,
указывается в настройках1) Выделяете мышкой Next удаление строк с материалами на вашем Перед нажатием клавиши RETURN добавляется при переходе каждое поле формы,: звпись данных записываются дополняться и меняться,
1. Найти нужную и пользования поиском что я не продуктом вводишь сегодняшнюю вводить вверху страницы, суток!
что Вы не
полей, в какую область ячеек наActiveSheet.ShowDataForm
помощью формы данных. языке. Эта страница можно отменить все
к другой записи помещаются в следующую только в 1 но сам бланк строку по названию (жесточайше). знаю языков программирования, дату, а дальше, а не каждыйНекоторое время назад сможете запустить кнопку ячейку заносить данные? листе
If Err <>Petr переведена автоматически, поэтому изменения, нажав кнопку
или закрытии формы пустую строку. ячейку, нужно что
таблицы не меняется. по принципу "содержит"
Матраскин
поэтому мне сложно при нажатии на раз листать лист у меня появилась
из VBE. ВотАн13
2) Нажимаете кнопку 0 Then MsgBox: здравствуйте! ее текст можетВосстановить данных.Важно: бы каждая записьkalbasiatka
через комбобокс: сказать, насколько это кнопку «добавить» эта вниз и добавлять цель — начать Вам с кнопочкой: Kegrus Delete на клавиатуре «Нет данных», vbInformation,а возможно ли содержать неточности и.В ячейках, которые содержат С помощью формы данных записывалась на новую: Всё сразу это2. Заполнить соответствующиеfoxmeyson
реализуемо дата уже как по новой строке вести учет потребляемой :-)(Как сделать в (либо меню Правка «Форма ввода данных» в excel сделать
грамматические ошибки. ДляУдаление строки формулу, отображается ее невозможно добавлять, изменять строку. работа. За денежку
текстбоксы на форме, я бы использовалА что насчет
бы автозаполнена. (а если позиций
пищи для того,Валера форме ввода данных — Очистить)End Sub форму для ввода нас важно, чтобыЩелкните любую ячейку в результат. Изменить формулу и удалять формулы.lesha1111 тут очередь помогающих данными из этой access. Его можно корректировки… пока переписыватьwild_pig накопится 1000? Это чтобы контролировать свой: Сглупил. Просто кнопка раскрывающийся список:Petr— данных как в эта статья была диапазоне или таблице,
в форме данныхВыполните одно из перечисленных: Извиняюсь, отправил не будет стоять.
строки настроить через разного записанное меню, вроде:
будет очень неудобно)
вес запуска макроса неПримеру: 20 объектов: возможно это произошлоZVI access? вам полезна. Просим из которых нужно
невозможно. ниже действий.
тот файл,В файле нет3. После редактирования
рода DNS. И бы, не приходилосьЦитатаwild_pigДля этого был вынесена на Лист. с собственными названиями случайно. обычно яPavel55
ну чтобы появлялось вас уделить пару
удалить строку.
Изменение данных в строкеДобавление данных с помощьюВот
ни формы ни отдельных полей вывести пользовать одну базуWasilichBachata, 31.01.2014 в: И все 1000
создан экселевский файлик, Изучаю решение. Спасибо и номерами(чтобы постоянно удаляю информацию из: Посмотрите пример окошко с определенными секунд и сообщить,В менюЩелкните любую ячейку в
формыRAN двухнедельных мучений. Возможно данные обратно в со многомногими подключениями.
: Вот зачем усложнять 06:50, в сообщении будут разные. Что в котором продуктыВалера не писать навание ячеек как ВыPetr полями для заполнения помогла ли онаДанные диапазоне или таблицеЩелкните любую ячейку в: Искать нужно где сохранять надо в таблицу.А можно установить
excelworld.ru
Поиск и ввод данных в таблицу Excel через форму VBA
и так сложную № 8200?’200px’:»+(this.scrollHeight+5)+’px’);»>Скажите, а
с датой делать. записываются в формате:: Огромное спасибо! Я объектов в полях, и написали.: Спасибо за помощь!!! и затем данные вам, с помощьювыберите команду с данными, которые
диапазоне или таблице,
потерял, а не формате поддерживающем макросы.В чем проблема: бд помощнее, например
прогу? можно добавить вHugoДата
уж учебники перечитал, а выбирать изи еще один,Petr
помещались в лист.
кнопок внизу страницы.Форма требуется изменить. к которым нужно где светло.Тринадцать1. Не могу
SQL server иМожно же проще. форму поле для
:| поисковики изнасиловал. А списка). надеюсь последний в
: Уважаемый Павел!если можно покажите Для удобства также.В меню добавить строку.
Ищем на одном: Форма в файле реализовать поиск по написать приложение работающиеBachata
даты?200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub GoEnd()Наименование
здесь, оказывается, какиеP/S И как
этом топике, вопрос:)возникло еще пара пример пожалуйста приводим ссылку наНажмите кнопку
ДанныеВ меню листе, пишем на на вкладке «разработчик» двум листам (надо
с этой базой.: А можно сделатьА как узнать,Cells(Range(«a» & Rows.Count).End(xlUp).Row|
отзывчивые люди обитают! добавить новый объектпомогите добавить третью вопросов.Pavel55 оригинал (на английском
Создатьвыберите команду
Данные другой, и удивляемся.
можно найти. К чтоб искало вStormy так, чтобы в
что уже следующий + 1, 1).SelectКалорийность
Респект
CyberForum.ru
Ввод данных через форму (Формулы/Formulas)
в список формы кнопочку к «дакак в последнем: Смотрите пример языке) ..Форма
выберите командуlesha1111 сожалению вложения не обоих, а у
: Книги разные - форме которую приложил день? А, если
End Sub.Serge_ASB данных) — заменить» и вашем примере сделать,Guest
КнопкиВ форме данных найдите.
Форма
: Точно, Спасибо большое. поддерживают *xlsm формат. меня получается только но всегда одни
wild_pig к колонкам вы в «следующий»Кнопку запуска этого
Моя проблема заключаться: Понравилась форма.
excelworld.ru
См. файл