Заполнение textbox в excel

Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.

UserForm.TextBox – это элемент управления пользовательской формы, предназначенный для ввода, редактирования и вывода информации в текстовом формате.

Текстовое поле на пользовательской форме

Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.

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

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

Иногда, если на пользовательской форме используется только одно текстовое поле и кнопка «OK» (или кнопки «OK» и «Отмена»), для ввода информации такую форму можно заменить функцией InputBox, а для вывода информации, когда не требуется редактирование отображаемого текста, – функцией MsgBox.

Свойства текстового поля

Свойство Описание
AutoSize* Автоподбор размера текстового поля. True – размер автоматически подстраивается под длину размещаемой строки. False – размер элемента управления определяется свойствами Width и Height.
AutoTab Включение автоматической табуляции – передачи фокуса следующему элементу управления при достижении максимального числа символов при значениях свойства MaxLenght > 0. True – автоматическая табуляция включена, False – выключена.
ControlSource Ссылка на источник данных для поля TextBox.
ControlTipText Текст всплывающей подсказки при наведении курсора на TextBox.
Enabled Возможность ввода, редактирования, копирования, вставки, удаления текста. True – все перечисленные опции включены, False – выключены (цвет текста в поле становится серым).
Font Шрифт, начертание и размер текста в поле.
Height Высота текстового поля.
Left Расстояние от левого края внутренней границы пользовательской формы до левого края текстового поля.
Locked Запрет ввода, редактирования, удаления текста. True – перечисленные опции запрещены (разрешено выделение и копирование текста), False – перечисленные опции разрешены.
MaxLenght Максимальная длина строки. По умолчанию – 0, что означает – ограничений нет.
Multiline Устанавливает многострочный (True) или однострочный (False) режим ввода-вывода текста.
PasswordChar Задает символ, который будет отображаться при вводе знаков пароля.
TabIndex Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0.
Text** Текстовое содержимое (значение) поля (=Value).
TextAlign Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю.
Top Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края текстового поля.
Value** Текстовое содержимое (значение) поля (=Text).
Visible Видимость текстового поля. True – TextBox отображается на пользовательской форме, False – TextBox скрыт.
Width Ширина текстового поля.
WordWrap Актуально при Multiline = True. Переход на новую строку при достижении границы текстового поля. True – переход включен, False – переход выключен.

* При использовании свойства AutoSize в значении True следует учитывать, что автоматическое изменение размеров поля при вводе текста может нарушить дизайн пользовательской формы.
** Text и Value — это два обозначения одного и того же свойства. Если в окне Properties элемента управления TextBox в поле свойства Text начать ввод строки, в поле Value ввод будет дублироваться. И наоборот, при вводе текста в поле свойства Value, дублирование произойдет в поле Text.

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

Свойства BackColor, BackStyle, BorderColor, BorderStyle отвечают за внешнее оформление текстового поля и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления TextBox на проекте пользовательской формы.

Привязка текстового поля к ячейке

Привязать элемент управления TextBox к ячейке на рабочем листе можно двумя способами.

1. В окне Properties элемента управления TextBox в поле свойства ControlSource необходимо указать адрес ячейки:

Окно Properties-TextBox

2. Присвоить свойству ControlSource адрес ячейки в коде VBA Excel:

UserForm1.TextBox1.ControlSource = «C5»

Теперь ячейка C5 активного листа будет привязана к элементу управления TextBox1. При открытии формы текстовое поле будет заполнено значением ячейки C5.

Чтобы наглядно ознакомиться с взаимозависимостью значения ячейки C5 и содержимого текстового поля, разместите на пользовательской форме еще какой-нибудь элемент управления и откройте ее в немодальном* окне:

Sub Test()

UserForm1.TextBox1.ControlSource = «C5»

UserForm1.Show 0

End Sub

Измените значение ячейки C5 и нажмите клавишу «Tab» или «Enter» – изменения будут продублированы в текстовом поле на форме. Измените содержимое поля TextBox1, нажмите клавишу «Tab» или «Enter», передав фокус другому элементу управления, – изменения продублируются в ячейке C5.

Чтобы привязать текстовое поле к ячейке неактивного листа, необходимо в адресе указать имя листа по ярлыку с разделителем «!»:

UserForm1.TextBox1.ControlSource = «Лист2!A3»

Если имя листа содержит пробел, заключите его в одинарные кавычки:

UserForm1.TextBox1.ControlSource = «‘Мой лист’!B6»

Точно также адрес ячейки конкретного листа можно указать непосредственно в окне Properties элемента управления TextBox в поле свойства ControlSource (без парных кавычек).

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

Примеры использования TextBox

Пример 1
Обмен содержимым между текстовым полем, переменной и ячейкой на рабочем листе:

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

‘ячейки A2 и переменной a1

UserForm1.TextBox1.Text = Range(«A2»)

UserForm1.TextBox1.Text = a1

‘Присвоение ячейке B3 и переменной a2

‘значения текстового поля

Cells(3, 2) = UserForm1.TextBox1.Text

a2 = UserForm1.TextBox1.Value

‘Свойства Text и Value элемента

‘управления TextBox равнозначны

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

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

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

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

Private Sub UserForm_Initialize()

Dim myTextBox As Control

‘Создаем новый TextBox и присваиваем его переменной

Set myTextBox = Me.Controls.Add(«Forms.TextBox.1»)

‘Задаем размеры и заголовок пользовательской формы

With Me

  .Height = 100

  .Width = 220

  .Caption = «Форма №2»

End With

‘Присваиваем значения свойствам текстового поля

With myTextBox

  .Width = 100

  .Height = 20

  ‘Left и Top рассчитаны для Excel 2016*

  .Left = 60 5

  .Top = 40 15

  ‘Добавляем всплывающую подсказку

  .ControlTipText = «Введите дату подписания договора»

  ‘Вставляем в поле текущую дату

  .Text = Format(Now, «DD.MM.YYYY»)

  ‘Выравниваем текст по центру

  .TextAlign = 2

End With

End Sub

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

TextBox с всплывающей подсказкой

* Значения свойств Left и Top рассчитаны для Excel 2016. Вычитаемые числа зависят от толщины границ пользовательской формы, которые в других версиях Excel могут отличаться.

Содержание

  1. VBA TextBox — Примеры для создания TextBox в Excel VBA (шаблон Excel)
  2. Что такое VBA TextBox в Excel?
  3. Примеры Excel VBA TextBox
  4. Пример № 1 — Как вставить TextBox в VBA?
  5. Пример №2 — Установка значения в VBA TextBox
  6. Пример # 3 — Ограничить ввод TextBox, чтобы принимать только числовые значения
  7. То, что нужно запомнить
  8. Рекомендуемые статьи
  9. VBA TextBox
  10. Excel VBA TextBox
  11. How to Insert TextBox in VBA UserForm?
  12. TextBox Properties
  13. Example of using TextBox in Userform
  14. Recommended Articles

VBA TextBox — Примеры для создания TextBox в Excel VBA (шаблон Excel)

Что такое VBA TextBox в Excel?

VBA TextBox является одним из многих элементов управления из элементов управления UserForm в Excel. VBA TextBox может пригодиться, если вы хотите, чтобы пользователь вводил данные, такие как его имя, возраст, адрес, зарплата и т. Д. Используя элемент управления TextBox, вы можете позволить пользователям вводить такую ​​информацию и сэкономить много времени, а также опечатки., VBA TextBox может состоять из статических или динамических данных.

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

В этой статье вы получите практический опыт работы с Excel VBA TextBox.

Примеры Excel VBA TextBox

Ниже приведены различные примеры VBA TextBox в Excel.

Вы можете скачать этот шаблон Excel для VBA TextBox здесь — Шаблон Excel для VBA TextBox

Пример № 1 — Как вставить TextBox в VBA?

Ниже приведены шаги для вставки TextBox в Excel VBA.

Шаг 1: Откройте файл Excel и нажмите Alt + F11, чтобы перейти на панель VBA.

Шаг 2: Как мы уже обсуждали, TextBox — это опция, доступная в пользовательской форме. Поэтому нам нужно вставить UserForm в VBE. Перейдите в меню «Вставка» > нажмите «Пользовательская форма» .

Шаг 3: Как только вы вставляете пользовательскую форму в VBA, вы можете видеть параметр Toolbox, связанный с ним, и иметь различные параметры, связанные с UserForm.

Шаг 4: В этом наборе инструментов выберите TextBox .

Шаг 5: Перетащите этот TextBox на форму пользователя.

Шаг 6: Нажмите F4, чтобы увидеть свойства пользовательской формы (в качестве альтернативы вы можете сделать это, щелкнув правой кнопкой мыши на вставленной пользовательской форме). Эти свойства позволяют вам внести некоторые необходимые изменения, такие как изменение имени пользовательской формы, чтобы иметь возможность легко получить к нему доступ.

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

Шаг 7: Введите текст « Добро пожаловать в VBA TextBox! В TextBox под UserForm.

Вот как вы можете создать VBA TextBox.

Пример №2 — Установка значения в VBA TextBox

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

Шаг 1: Вставьте новую пользовательскую форму в VBE. Перейдите в меню « Вставка» > нажмите «Пользовательская форма».

Шаг 2: Из UserForm Tools выберите TextBox и перетащите его в UserForm.

Шаг 3: Вставьте CommandButton под UserForm так же, как вы добавили TextBox.

Шаг 4: Измените заголовок командной кнопки на « Отправить » в свойствах. Вы можете перейти к свойствам командной кнопки, щелкнув правой кнопкой мыши Command Button> Click Properties .

Шаг 5: Дважды щелкните по кнопке отправки или щелкните правой кнопкой мыши и выберите « Просмотреть код» .

Шаг 6: В коде вставьте строку нового кода в подпроцедуру, как показано ниже.

Код:

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

Шаг 7: Нажмите F5 или кнопку Run под VBE, чтобы запустить этот код, вы увидите пользовательскую форму с пустым TextBox. Как только вы нажмете кнопку отправки, там появится текст, назначенный для TextBox.

Пример # 3 — Ограничить ввод TextBox, чтобы принимать только числовые значения

Выполните следующие шаги:

Шаг 1: Вставьте новую пользовательскую форму в VBA и добавьте в нее TextBox.

Шаг 2: Измените имя TextBox в разделе «Свойства» на « My_Age ».

Шаг 3: Дважды щелкните TextBox или щелкните его правой кнопкой мыши и выберите View Code .

Вы сможете увидеть начальную подпроцедуру, как показано ниже:

Код:

Шаг 4: Теперь попробуйте добавить условие If, которое начинается с If Not.

Код:

Шаг 5: Попросите компилятор проверить, является ли значение TextBox «My_Age» числовым или не использует IsNumeric Keyword перед условием «Если не».

Код:

Шаг 6: Когда каждое условие IF запрашивает, добавьте ключевое слово Then для него.

Код:

В этом фрагменте кода вы просите компилятор проверить, является ли значение, введенное пользователем в TextBox, числовым или нет. Если это не цифра, то что делать? Следуйте следующему шагу.

Шаг 7: С помощью MsgBox добавьте комментарий типа «Извините! Разрешены только цифры. », Если значение в TextBox не является числовым.

Код:

Шаг 8: Теперь закройте этот оператор IF, используя ключевое слово End IF.

Код:

Шаг 9: Теперь запустите этот код, нажав кнопку F5 на клавиатуре или кнопку Run из VBE, и просмотрите результат. Вы получите TextBox, как показано ниже:

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

Бинго, это позволяет мне хранить целочисленное значение.

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

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

Что ж! Что ж!! Ну, это, я стреляю в сообщение о том, что разрешены только цифры Это произошло потому, что этот код, изначально написанный с условием IF, не имеет обходного пути, что делать, если число не положительное. Более того, возраст не может быть отрицательным. Правильно? Поэтому я получаю предупреждающее сообщение, как вы можете видеть выше. Однако, если вы нажмете OK в окне сообщения и попытаетесь ввести номер, это позволит вам сделать это. Но я не буду рекомендовать нарушать правила там.

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

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

То, что нужно запомнить

  • VBA TextBox — это специальная опция в пользовательской форме. Который предназначен для ввода данных от самого пользователя.
  • Есть два способа установить значения для TextBox: с помощью TextBox.Text и с помощью TextBox.Value.
  • Иногда необходимо ограничить ввод данных пользователем, чтобы мы получали правильный тип данных.

Рекомендуемые статьи

Это руководство по VBA TextBox. Здесь мы обсудим, как создать TextBox в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Как использовать функцию VBA IsNumeric?
  2. Создание поля со списком в Excel
  3. Вставьте флажок в Excel
  4. Функция VBA UCASE в Excel
  5. Как закрыть UserForm в VBA?

Источник

VBA TextBox

Excel VBA TextBox

A TextBox is simply a box used to get input from a user. Text boxes are a part of UserForms. For example, in the Developer tab in any Excel worksheet, if we want to make text boxes in a UserForm, we can select the textbox option from user form controls in VBA, or in the worksheet, we can select it from the Design tab.

VBA TextBox is one of the many controls of the UserForm. By displaying the text box on the UserForm, we can ask them to enter the data into the text box. Furthermore, it can store the data entered by the user on the worksheet with simple codes.

Userforms are very attractive in VBA coding VBA Coding VBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task. read more . It helps us immensely, especially when we need input from the users. With UserForms, we have many controls. For example, to get the input value from the users, “Text Box” is the ideal option in a UserForm. By putting a text box on the UserForm, we can tell the user to enter the required value in the text box we display. If you have no idea about VBA text boxes, this article will take a tour of VBA text boxes.

Table of contents

You are free to use this image on your website, templates, etc., Please provide us with an attribution link How to Provide Attribution? Article Link to be Hyperlinked
For eg:
Source: VBA TextBox (wallstreetmojo.com)

How to Insert TextBox in VBA UserForm?

To insert a text box first, we need to insert a UserForm. To insert the UserForm, go to Insert > UserForm.

As soon as you click on UserForm, we will use UserForm just like another module.

Click on UserForm to see the controls of the UserForm.

From this “Controls” toolbox, select “TextBox” and drag on the UserForm.

With this, we can see many properties associated with this text box.

TextBox Properties

Press the F4 key to see the properties of the TextBox.

As we can see, the text box has a name, color, and border like this many. Now, give a proper name to refer to this text box while coding easily.

Example of using TextBox in Userform

Step 1: On the UserForm, draw the label.

Step 2: Change the default text of the label to “Employee Name.”

Step 3: In front of the label, draw a text box.

Step 4: Give a proper name to the text box as “EmpNameTextBox.”

Step 5: Draw one more label below the first label and enter the text as “Employee ID.”

Step 6: In front of the second label, draw one more text box and name it “EmpIDTextBox.”

Step 7: Draw one more label and enter the text as “Salary.”

Step 8: Draw one more text box in front of the “Salary” label and name it “SalaryTextBox.”

Step 9: Insert the “Command Button” from the ToolBox.

Step 10: Change the text of the command button to “Submit.”

We have completed the UserForm design part. Next, we need to write the code to store the data entered in this UserForm. As of now, run the UserForm by pressing the F5 key. We should see a UserForm like this.

Step 11: Change the caption of the UserForm in the “Properties” window.

Step 12: Now, double-click on the “Submit” command button. As soon as you double-click, you will see this auto-sub procedure like the one below.

What should happen when you click on the “Submit” button? First, we need to mention the tasks in the VBA code. In this project, we aim to store the data entered in the text box as soon as we click the “Submit” button.

For this, first, create a template like this in the worksheet named “Employees Sheet.”

Code:

Step 14: First, we will store “Employee Name” in the first column. So for this, we need to access the text box named “EmpNameTextBox.”

Code:

Step 15: We need to store the “Employee ID” in the second column. So, we may obtain this by accessing the text box “EmpIDTextBox.”

Code:

Step 16: At last, we need to store the salary part. For this, we need to access a text box named “SalaryTextBox.”

Code:

We have completed the coding part as well. Now, run the code using the F5 key. We should see a UserForm like the one below.

As of now, all the boxes are empty.

Fill in the details first.

Now, click on the “Submit” button. It will store the data on the worksheet.

Like this, you can keep entering the data and press the “Submit” button. It is a simple data entry UserForm with a text box.

Recommended Articles

This article has been a guide to VBA TextBox. Here, we learn how to insert and use textbox control in UserForm through Excel VBA, practical examples, and a downloadable template. Below you can find some useful Excel VBA articles: –

Источник

Хитрости »

5 Май 2011              115244 просмотров


Очень часто при работе с формами(UserForm) приходится заполнять значениями КомбоБоксы(ComboBox) и ТекстБоксы(TextBox). Иногда однотипными данными. Или очистить их все после выполнения какого-либо действия. А может проверить, все ли элементы заполнены, прежде чем продолжать действие. Если КомбоБоксов/ТекстБоксов пару штучек — не проблема

TextBox1 = ""
TextBox2 = ""

и всех делов. А если их порядка двадцати? Или больше? Мало того, что писать это все долго, так еще и код растягивается, как портянка. Но это можно сделать гораздо проще и удобнее. Воспользоваться можно несколькими способами. Этот способ наиболее популярен, если необходимо произвести однотипные действия со всеми ТекстБоксами на форме:

Sub All_TextBoxes()
    Dim oControl As Control
    For Each oControl In UserForm1.Controls
        If TypeOf oControl Is MSForms.TextBox Then
            oControl.Value = ""
        End If
    Next oControl
End Sub

В примере элементы формы очищаются, но в код можно подставить любое действие — добавление нового элемента списка(для ComboBox), поменять представление данных в TextBox, проверить наличие данных в проверяемом элементе и т.д. Тут уж зависит от поставленной задачи. Конечно, подобным способом можно проделать разные действия и с остальными элементами формы. Только надо будет заменить тип для проверки элементов:

ComboBox - MSForms.ComboBox
CheckBox - MSForms.CheckBox
CommandButton - MSForms.CommandButton
Frame - MSForms.Frame
Image - MSForms.Image
Label - MSForms.Label
ListBox - MSForms.ListBox
MultiPage - MSForms.MultiPage
SpinButton - MSForms.SpinButton
TabStrip - MSForms.TabStrip
ToggleButton - MSForms.ToggleButton

Это не единственный способ проделывания однотипных действий с элементами формы. Код ниже использует имена элементов для обращения к ним:

Sub All_TextBoxes()
    Dim li As Long
    For li = 1 To 10
        UserForm1.Controls("TextBox" & li).Value = li
    Next li
End Sub

Недостаток данного метода: имена элементов должны строго соответствовать используемым в коде и лишь нумерация на конце имени должна различаться. За нумерацию отвечает переменная li и, конечно, цикл, в котором задается начальное и конечные значения. В примере ТекстБоксам с именами от «TextBox1» до «TextBox10» будут подставлены значения номеров самих ТекстБоксов. Но такой недостаток может быть очень полезным. Например, если необходимо проделать действия не над всеми ТекстБоксами, а лишь над некоторыми из них. Тогда все, что необходимо дать ТекстБоксам определенные имена с нумерацией(«ToDB1″,»ToDB2» и т.д.) и в зависимости от имени можно проделывать различные действия: стирать значения, менять свойства элементов и т.д.
И есть еще один плюс такого подхода: когда необходимо заполнить значения ТекстБоксов значениями ячеек. Скажем надо заполнить 10 ТекстБоксов(с именами TextBox1, TextBox2, TextBox3 и т.д.) из ячеек диапазона A2:A11 листа с именем «Лист2″(т.е. из 10 ячеек, начиная с ячейки A2). Код будет выглядеть так:

Sub Fill_TextBoxes_FromCells()
    Dim li As Long
    For li = 1 To 10
        UserForm1.Controls("TextBox" & li).Value = Sheets("Лист2").Range("A" & li).Value
        'или применить Cells вместо Range
        'UserForm1.Controls("TextBox" & li).Value = Sheets("Лист2").Cells(li, 1).Value
    Next li
End Sub

Подробнее про обращение к диапазонам из VBA можно узнать из этой статьи: Как обратиться к диапазону из VBA

Скачать пример

  Tips_Macro_WorkWithGroupControls.xls (51,5 KiB, 4 052 скачиваний)

P.S. Небольшое дополнение: нужные элементы можно просто помещать внутрь объекта Frame. Тогда можно будет применять цикл исключительно по элементам внутри этого Frame(предположим, что Frame называется Frame1):

Sub All_TextBoxes_InFrame()
    Dim oControl As Control
    For Each oControl In Frame1.Controls
        If TypeOf oControl Is MSForms.TextBox Then
            oControl.Value = ""
        End If
    Next oControl
End Sub

Кстати говоря, примерно так же можно перебрать элементы ActiveX не на форме, а на листе(вставляются на лист через вкладку Разработчик(Developer)Вставить(Insert)Элементы ActiveX(ActiveX Controls)). Например, снимем флажки со всех CheckBox-ов:

Sub Off_ActiveXCheckBoxes()
    Dim oControl
    'цикл по всем объектам на листе
    For Each oControl In ActiveSheet.DrawingObjects
        'определяем тип объекта - должен быть OLEObject(так определяется ActiveX)
        If TypeName(oControl) = "OLEObject" Then
            'необходимо дополнительно проверить тип элемента
            If TypeOf oControl.Object Is MSForms.CheckBox Then
                oControl.Object.Value = 0
            End If
        End If
    Next oControl
End Sub

Для этих элементов на листе в строке TypeOf oControl.Object Is MSForms.CheckBox для проверки типа(MSForms.CheckBox) используются те же значения, что и для контролов на форме. Перечень приведен выше.
Но помимо ActiveX(к слову устаревших и не рекомендованных к использованию) на листе могут быть и другие, более новые флажки — элементы форм(вставляются на лист через вкладку Разработчик(Developer)Вставить(Insert)Элементы управления формы(Form Controls)). К ним подход уже другой:

Sub Off_ShapeCheckBoxes()
    Dim oControl
    'цикл по всем объектам на листе
    For Each oControl In ActiveSheet.DrawingObjects
        'определяем тип объекта - если это Элемент форм, то будет указание на конкретный тип
        If TypeName(oControl) = "CheckBox" Then
            oControl.Value = 0
        End If
    Next oControl
End Sub

В данном случае для определения конкретного типа контрола используется TypeName. В коде выше нам нужны CheckBox-ы и на них и проверяем. А вот список основных элементов форм, которые доступны по умолчанию для всех версий для вставки на лист:
Button — кнопка
DropDown — поле со списком
CheckBox — флажок
Spinner — счетчик
ListBox — список
OptionButton — радиокнопка
GroupBox — группа(рамка)
Label — надпись
ScrollBar — полоса прокрутки

Если совместить, то можно снять флажки со всех checkBox-ов — и ActiveX и Элементов форм:

Sub Off_AllCheckBoxes()
    Dim oControl
    'цикл по всем объектам на листе
    For Each oControl In ActiveSheet.DrawingObjects
        'определяем тип флажка: ActiveX или Элемент форм
        Select Case TypeName(oControl)
        Case "OLEObject"    'ActiveX - необходимо дополнительно проверить тип элемента
            If TypeOf oControl.Object Is MSForms.CheckBox Then
                oControl.Object.Value = 0
            End If
        Case "CheckBox"     'Элемент форм CheckBox
            oControl.Value = 0
        End Select
    Next oControl
End Sub

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


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Добрый вечер!

ЛистБокс как раз для этого и нужен.. А если лейблом, то типа так….
[vba]

Код

Option Explicit

Dim str as string
Dim cellStart as ange
Dim cellEnd as ange
Dim rng as Range
Dim cell as Range

With ThisWorkbook.Sheet(1)
         Set cellStart = .Cells(1,1)
         Set cellEnd = .Cells(.Rows.Count,1).end(xlup)
         Set rng = .Range(cellStart, CellEnd)
End With

For each cell in rng
         str = str & cell.Value & chr(10)
Next cell

UserForm1.Label1.Caption = str

[/vba]
но это как-то через жжжж
Прокруток в Лэбле и ТекстБоксе я не знаю… хотя, если великие мастера вкурсе… я б с радостью узнал про такой функционал в VBA!
Да и рекомендую почитать сколько в Лейбл можно записать букав…. вот точно не мульйон!
Юзайте ЛистБокс — и прокрутка и в дальнейшем расширить функционал, тем более, что ЛистБоксе есть возможность выбрать RowSource
Файл в студию!

 

Уважаемые, помогите, пожалуйста, решить такую задачу: есть userform, среди элементов присутствуют несколько textbox`ов, которые заполняются через специальную форму ввода (кликаешь на textbox — выскакивает форма ввода, ее заполняешь, жмешь на ОК, значения нужным образом компилируются и попадают в textbox на исходной форме). Форма ввода одна  на несколько textbox`ов, все textbox`ы могут быть заполнены в произвольном порядке.  
Вопрос заключается в следующем: как сделать, чтобы при  вызове формы ввода по клику на textbox компилированной значение формы ввода попадало именно в textbox, по которому кликнули? Ведь форма ввода одна, но с ее помощью разные textbox`ы могут быть заполнены..  
Буду искренне признательна за ответ!

 

прописывать на событие Click по конкретному TextBox вызов формы и передачу заполненного значения в конкретный TextBox

 

nerv

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

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

>>как сделать, чтобы при вызове формы ввода по клику на textbox…значение формы ввода попадало именно в textbox, по которому кликнули?  

  Чаво?) Я так полагаю, у вас одни текст боксы на листе, а другие на форме ввода.  
Чтобы не играть в угадайки, приложите файл.  
Если мое предположение верно,    

  Private Function CommandButton_TextBox1_Click()  
userform1.TextBox1.value=me.TextBox1.value  
end sub  

  как-то так…

 

{quote}{login=}{date=30.08.2011 09:52}{thema=}{post}прописывать на событие Click по конкретному TextBox вызов формы и передачу заполненного значения в конкретный TextBox{/post}{/quote}  

  Вот именно как это сделать меня и интересует. Прикладываю файл.  

  P.S. Да, прошу прощения — запуск формы ввода не по клику на текстбокс, а по клику на соответствующий label.

 

Прошу прошещиния — в предыдущем посте выложила промежуточный файл. Исправляюсь.

 

R Dmitry

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

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

Excel,MSSQL,Oracle,Qlik

#6

30.08.2011 10:33:38

В модуль1  
Public Tbox As Object  

  нужное Вам событие в 1 форме  

  Private Sub TextBox4_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  
Set Tbox = TextBox4  
Vvod.Show  
End Sub  

  и такое событие во второй форме  

  Private Sub CommandButton1_Click()  
r = TextBox1 & » » & TextBox2 & » » & TextBox3  
Unload Vvod  
Tbox.Value = r  
End Sub

Спасибо

 

R Dmitry

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

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

Excel,MSSQL,Oracle,Qlik

#7

30.08.2011 10:49:38

можно конечно использовать  
Set Tbox = Me.ActiveControl  
но один раз взяло не тот контрол, больше не использую :)

Спасибо

 

Black__Hole

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

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

#8

30.08.2011 10:53:38

Спасибо, то что надо!

  • Что такое VBA TextBox в Excel?

Что такое VBA TextBox в Excel?

VBA TextBox является одним из многих элементов управления из элементов управления UserForm в Excel. VBA TextBox может пригодиться, если вы хотите, чтобы пользователь вводил данные, такие как его имя, возраст, адрес, зарплата и т. Д. Используя элемент управления TextBox, вы можете позволить пользователям вводить такую ​​информацию и сэкономить много времени, а также опечатки., VBA TextBox может состоять из статических или динамических данных.

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

В этой статье вы получите практический опыт работы с Excel VBA TextBox.

Примеры Excel VBA TextBox

Ниже приведены различные примеры VBA TextBox в Excel.

Вы можете скачать этот шаблон Excel для VBA TextBox здесь — Шаблон Excel для VBA TextBox

Пример № 1 — Как вставить TextBox в VBA?

Ниже приведены шаги для вставки TextBox в Excel VBA.

Шаг 1: Откройте файл Excel и нажмите Alt + F11, чтобы перейти на панель VBA.

Шаг 2: Как мы уже обсуждали, TextBox — это опция, доступная в пользовательской форме. Поэтому нам нужно вставить UserForm в VBE. Перейдите в меню «Вставка» > нажмите «Пользовательская форма» .

Шаг 3: Как только вы вставляете пользовательскую форму в VBA, вы можете видеть параметр Toolbox, связанный с ним, и иметь различные параметры, связанные с UserForm.

Шаг 4: В этом наборе инструментов выберите TextBox .

Шаг 5: Перетащите этот TextBox на форму пользователя.

Шаг 6: Нажмите F4, чтобы увидеть свойства пользовательской формы (в качестве альтернативы вы можете сделать это, щелкнув правой кнопкой мыши на вставленной пользовательской форме). Эти свойства позволяют вам внести некоторые необходимые изменения, такие как изменение имени пользовательской формы, чтобы иметь возможность легко получить к нему доступ.

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

Шаг 7: Введите текст « Добро пожаловать в VBA TextBox! В TextBox под UserForm.

Вот как вы можете создать VBA TextBox.

Пример №2 — Установка значения в VBA TextBox

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

Шаг 1: Вставьте новую пользовательскую форму в VBE. Перейдите в меню « Вставка» > нажмите «Пользовательская форма».

Шаг 2: Из UserForm Tools выберите TextBox и перетащите его в UserForm.

Шаг 3: Вставьте CommandButton под UserForm так же, как вы добавили TextBox.

Шаг 4: Измените заголовок командной кнопки на « Отправить » в свойствах. Вы можете перейти к свойствам командной кнопки, щелкнув правой кнопкой мыши Command Button> Click Properties .

Шаг 5: Дважды щелкните по кнопке отправки или щелкните правой кнопкой мыши и выберите « Просмотреть код» .

Шаг 6: В коде вставьте строку нового кода в подпроцедуру, как показано ниже.

Код:

 Private Sub CommandButton1_Click () TextBox1.Value = "Меня зовут Лалит!" End Sub 

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

Шаг 7: Нажмите F5 или кнопку Run под VBE, чтобы запустить этот код, вы увидите пользовательскую форму с пустым TextBox. Как только вы нажмете кнопку отправки, там появится текст, назначенный для TextBox.

Пример # 3 — Ограничить ввод TextBox, чтобы принимать только числовые значения

Выполните следующие шаги:

Шаг 1: Вставьте новую пользовательскую форму в VBA и добавьте в нее TextBox.

Шаг 2: Измените имя TextBox в разделе «Свойства» на « My_Age ».

Шаг 3: Дважды щелкните TextBox или щелкните его правой кнопкой мыши и выберите View Code .

Вы сможете увидеть начальную подпроцедуру, как показано ниже:

Код:

 Private Sub My_Age_Change () End Sub 

Шаг 4: Теперь попробуйте добавить условие If, которое начинается с If Not.

Код:

 Private Sub My_Age_Change () Если не End Sub 

Шаг 5: Попросите компилятор проверить, является ли значение TextBox «My_Age» числовым или не использует IsNumeric Keyword перед условием «Если не».

Код:

 Private Sub My_Age_Change () Если не IsNumeric (My_Age.Value) End Sub 

Шаг 6: Когда каждое условие IF запрашивает, добавьте ключевое слово Then для него.

Код:

 Private Sub My_Age_Change () Если не IsNumeric (My_Age.Value), то End Sub 

В этом фрагменте кода вы просите компилятор проверить, является ли значение, введенное пользователем в TextBox, числовым или нет. Если это не цифра, то что делать? Следуйте следующему шагу.

Шаг 7: С помощью MsgBox добавьте комментарий типа «Извините! Разрешены только цифры. », Если значение в TextBox не является числовым.

Код:

 Private Sub My_Age_Change () Если не IsNumeric (My_Age.Value), то MsgBox "Извините! Разрешены только номера." End Sub 

Шаг 8: Теперь закройте этот оператор IF, используя ключевое слово End IF.

Код:

 Private Sub My_Age_Change () Если не IsNumeric (My_Age.Value), то MsgBox "Извините! Разрешены только номера." End If End Sub 

Шаг 9: Теперь запустите этот код, нажав кнопку F5 на клавиатуре или кнопку Run из VBE, и просмотрите результат. Вы получите TextBox, как показано ниже:

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

Бинго, это позволяет мне хранить целочисленное значение.

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

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

Что ж! Что ж!! Ну, это, я стреляю в сообщение о том, что разрешены только цифры Это произошло потому, что этот код, изначально написанный с условием IF, не имеет обходного пути, что делать, если число не положительное. Более того, возраст не может быть отрицательным. Правильно? Поэтому я получаю предупреждающее сообщение, как вы можете видеть выше. Однако, если вы нажмете OK в окне сообщения и попытаетесь ввести номер, это позволит вам сделать это. Но я не буду рекомендовать нарушать правила там.

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

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

То, что нужно запомнить

  • VBA TextBox — это специальная опция в пользовательской форме. Который предназначен для ввода данных от самого пользователя.
  • Есть два способа установить значения для TextBox: с помощью TextBox.Text и с помощью TextBox.Value.
  • Иногда необходимо ограничить ввод данных пользователем, чтобы мы получали правильный тип данных.

Рекомендуемые статьи

Это руководство по VBA TextBox. Здесь мы обсудим, как создать TextBox в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Как использовать функцию VBA IsNumeric?
  2. Создание поля со списком в Excel
  3. Вставьте флажок в Excel
  4. Функция VBA UCASE в Excel
  5. Как закрыть UserForm в VBA?

6 / 6 / 0

Регистрация: 04.06.2008

Сообщений: 29

1

Заполнение данных в листе через форму

28.09.2009, 12:23. Показов 8837. Ответов 14


Студворк — интернет-сервис помощи студентам

Вообщем есть 183 форма, написанная на Excele (может кто то уже сталкивался), ввод информации в ней до ужаса не удобный(…Ввод одного символа через одну ячейку, вообщем сотрудника напрягает вводить именно таким образом(Решил попробывать написать форму ввода через vba только вот в ней определенно летаю(((…может кто нить подскажет, идеи там, буду очень благодарен
(Может как нить через TextBox?)



0



3895 / 898 / 122

Регистрация: 16.04.2009

Сообщений: 1,824

29.09.2009, 23:29

2

А можно для начала увидеть эту форму 183?



0



134 / 79 / 6

Регистрация: 06.04.2009

Сообщений: 192

30.09.2009, 14:45

3

С формами в VBA работать очень просто, опишите конкретно задачу — поможем.



0



6 / 6 / 0

Регистрация: 04.06.2008

Сообщений: 29

30.09.2009, 21:36

 [ТС]

4

Цитата
Сообщение от Toxa33rus
Посмотреть сообщение

А можно для начала увидеть эту форму 183?

Вот и форма…
Хотелось бы какой нить интерфейс на удобность ввода данных…всю голову се сломал, не могу ничего стоющего придумать(



0



paladin

286 / 186 / 7

Регистрация: 25.02.2009

Сообщений: 589

01.10.2009, 14:58

5

Можно примерно так сделать (скорее всего кто-то сможет это сделать изящнее, но принцип примерно тот же). Только для TextBox’ов надо будет ограничение длины указывать + менять стартовую ячейку.



1



paladin

286 / 186 / 7

Регистрация: 25.02.2009

Сообщений: 589

01.10.2009, 15:05

6

Чуть не забыл. Заполнение ячеек происходит при потере фокуса TextBox’ом. Если такое проделывать при каждом изменении, то результат не очень удовлетворительный.



0



134 / 79 / 6

Регистрация: 06.04.2009

Сообщений: 192

01.10.2009, 16:48

7

Это не форма, а обычный лист Excel с обычными ячейками.
В дополнение к решению, предложенному Yurii_74, первое, что приходит в голову — создать простую пользовательскую «настоящую» форму VBA, и заполнение полей производить по нажатию CommandButton. И лишние поля на листе не будут мешаться.



0



6 / 6 / 0

Регистрация: 04.06.2008

Сообщений: 29

01.10.2009, 17:23

 [ТС]

8

Цитата
Сообщение от Yurii_74
Посмотреть сообщение

Можно примерно так сделать (скорее всего кто-то сможет это сделать изящнее, но принцип примерно тот же). Только для TextBox’ов надо будет ограничение длины указывать + менять стартовую ячейку.

Спасиб за идею)…обезательно покапаюсь, это пока единственный вариант, и тем более рабочий

Добавлено через 4 минуты

Цитата
Сообщение от yaser
Посмотреть сообщение

Это не форма, а обычный лист Excel с обычными ячейками.
В дополнение к решению, предложенному Yurii_74, первое, что приходит в голову — создать простую пользовательскую «настоящую» форму VBA, и заполнение полей производить по нажатию CommandButton. И лишние поля на листе не будут мешаться.

Хм…интересно)
А как ты через CommandButton напишешь неподготовленный текст тут же полюбому должно использоваться TextBox…или я тут уже что то путаю?…и как соеденить кноку с выводом в ячейки?Но идея мне нравиться)



0



Toxa33rus

3895 / 898 / 122

Регистрация: 16.04.2009

Сообщений: 1,824

01.10.2009, 22:30

9

Цитата
Сообщение от Yurii_74
Посмотреть сообщение

Можно примерно так сделать…

Фу…
Я изначально хотел сделать форму аналогичную исходной но в окошке с текстбоксами но когда увидел кол-во полей то идея отпала.
И тут ко мне пришла она! Муза.
Открываете тот файл с формой, заходите в редактор макросов, делаете даблклик на «Лист1» (слева в списке листов) и вставляете это:

Visual Basic
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
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C
Dim R
Dim arrWords, currLen, currRow
C = Target.Column
R = Target.Row
 
If R = 15 And C = 2 Then
  If Len(Cells(15, 2).Value) > 1 Then 'если ввели текст
    arrWords = Split(UCase(Cells(15, 2).Value), " ")
    currLen = 0
    currRow = 0
    For i = 0 To UBound(arrWords) 'по всем словам
      If currLen + Len(arrWords(i)) + 1 > 45 Then 'не умещается
        currRow = currRow + 1
        If currRow > 2 Then Exit Sub 'лимит в 3 строки исчерпан
        currLen = 0
        For j = 1 To Len(arrWords(i)) 'по всем буквам слова
          Cells(currRow * 2 + 15, currLen * 2 + 2).Value = Mid(arrWords(i), j, 1)
          currLen = currLen + 1
        Next j
      Else 'умещается
        For j = 1 To Len(arrWords(i)) 'по всем буквам слова
          Cells(currRow * 2 + 15, currLen * 2 + 2).Value = Mid(arrWords(i), j, 1)
          currLen = currLen + 1
        Next j
      End If
      Cells(currRow * 2 + 15, currLen * 2 + 2).Value = ""
      currLen = currLen + 1 'ставим "пробел"
    Next i
End If
End If
End Sub

Как это работатет:
1) щелкаете (или с клавы переходите) на ячейку В15
2) вводите в эту ячейку весь текст (например: «Посадил дед репку, выросла репка большая прибольшая. Стал он ее тянуть»)
3)переходите на любую другую ячейку (можно просто Enter нажать)
Вуаля!

Так можно по каждой сделать и будет красиво как мне видится…

Добавлено через 9 минут
Кстати можно сделать чтоб при нажатии на энтер происходил автоматический переход на следующее поле для заполнение а не тупо вниз.



0



EducatedFool

0 / 0 / 0

Регистрация: 28.09.2009

Сообщений: 88

02.10.2009, 02:10

10

Лучший ответ Сообщение было отмечено как решение

Решение

Сталкивался ранее с подобной задачей

В этот раз всё оказалось намного сложнее — пришлось помучиться с алгоритмом.

Но, тем не менее, теперь всё работает:

[IMG]http://s53.***********/i142/0910/6d/c420dd2a934c.jpg[/IMG]

Достаточно дважды щёлкнуть в любом из квадратиков, как Excel сам определит границы поля (и подсветит поле зелёным цветом), после чего предложит ввести / изменить текст в выбранном поле.

Пример файла с макросом:

[ссылка удалена]

Добавлено через 1 минуту
Вот весь код:

Visual Basic
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Function ЯчейкаСРамкой(ByRef cell As Range) As Boolean
    ЯчейкаСРамкой = cell.Borders(xlEdgeTop).LineStyle <> xlNone And cell.Borders(xlEdgeBottom).LineStyle <> xlNone _
                    And cell.Borders(xlEdgeRight).LineStyle <> xlNone And cell.Borders(xlEdgeLeft).LineStyle <> xlNone
End Function
 
Sub ВводТекста()
    On Error Resume Next: Dim ra As Range
    ActiveSheet.UsedRange.Interior.ColorIndex = 0
    Set ra = ДиапазонДляВвода(ActiveCell)
    ra.Interior.Color = vbGreen
    defTXT = ТекстДиапазона(ra)
    txt = InputBox("Введите текст для выбранного поля", "Заполнение полей", defTXT)
    If txt <> defTXT Then ВводТекстаВДиапазон ra, txt
    ra.Interior.ColorIndex = 0
End Sub
 
Function ТекстДиапазона(ByVal ra As Range) As String
    For Each cell In ra.Cells
        ТекстДиапазона = ТекстДиапазона & IIf(Len(cell.Text), cell.Text, " ")
    Next cell
    ТекстДиапазона = RTrim(ТекстДиапазона)
End Function
 
Sub ВводТекстаВДиапазон(ByVal ra As Range, ByVal txt As String)
    If ra.Cells.Count < Len(txt) Then MsgBox "Текст не влезет", vbCritical, "Введите текст покороче": Exit Sub
    ra.ClearContents: Dim cell As Range: i = 1
    Application.ScreenUpdating = False
    For Each cell In ra.Cells
        cell = Mid(txt, i, 1): i = i + 1
    Next cell
    Application.ScreenUpdating = True
End Sub
 
 
Function ДиапазонДляВвода(ByRef cell As Range) As Range
    If Not ЯчейкаСРамкой(cell) Then Exit Function
    On Error Resume Next
    Dim cell1 As Range, cell2 As Range, rcell As Range: Set cell1 = cell: Set cell2 = cell
 
    While СверхуЕстьСтрока(cell1)
        Set cell1 = cell1(-1, 1)
    Wend
    Set cell1 = ПерваяЯчейкаСтроки(cell1)
 
    While СнизуЕстьСтрока(cell2)
        Set cell2 = cell2(3, 1)
    Wend
    Set cell2 = ПоследняяЯчейкаСтроки(cell2)
 
    For Each rcell In Range(cell1, cell2).Cells
        If ЯчейкаСРамкой(rcell) Then
            If ДиапазонДляВвода Is Nothing Then
                Set ДиапазонДляВвода = rcell
            Else
                Set ДиапазонДляВвода = Union(ДиапазонДляВвода, rcell)
            End If
        End If
    Next rcell
End Function
 
Function ПерваяЯчейкаСтроки(ByVal cell As Range) As Range
    Do While cell.Column > 2
        If ЯчейкаСРамкой(cell) Then Set cell = cell(1, -1) Else Set cell = cell(1, 3): Exit Do
    Loop
    Set ПерваяЯчейкаСтроки = cell
End Function
 
Function ПоследняяЯчейкаСтроки(ByRef cell As Range) As Range
    Do While cell.Column <= cell.SpecialCells(xlCellTypeLastCell).Column
        If ЯчейкаСРамкой(cell) Then Set cell = cell(1, 3) Else Set cell = cell(1, -1): Exit Do
    Loop
    Set ПоследняяЯчейкаСтроки = cell
End Function
 
Function СверхуЕстьСтрока(ByVal cell As Range) As Boolean
    Set cell = ПерваяЯчейкаСтроки(cell)
    If ЯчейкаСРамкой(cell(-1, 1)) And ЯчейкаСРамкой(cell(-1, 3)) Then
        If cell.Column = 2 Then
            СверхуЕстьСтрока = True
        Else
            If Not ЯчейкаСРамкой(cell(-1, -1)) Then СверхуЕстьСтрока = True
        End If
    End If
    If СверхуЕстьСтрока Then    ' слева
        Set cell = ПоследняяЯчейкаСтроки(cell)
 
        If ЯчейкаСРамкой(cell(-1, 1)) And Not ЯчейкаСРамкой(cell(-1, 3)) Then
            If cell.Column = 2 Then СверхуЕстьСтрока = False: Exit Function
            If ЯчейкаСРамкой(cell(-1, -1)) Then СверхуЕстьСтрока = True: Exit Function
        End If
    End If
    СверхуЕстьСтрока = False
End Function
 
Function СнизуЕстьСтрока(ByRef cell As Range) As Boolean
    Set cell = ПоследняяЯчейкаСтроки(cell)
    If ЯчейкаСРамкой(cell(3, 1)) And Not ЯчейкаСРамкой(cell(3, 3)) Then
        If cell.Column = 2 Then
            СнизуЕстьСтрока = False
        Else
            If ЯчейкаСРамкой(cell(3, -1)) Then СнизуЕстьСтрока = True
        End If
    End If
    If СнизуЕстьСтрока Then    ' слева
        Set cell = ПерваяЯчейкаСтроки(cell)
 
        If ЯчейкаСРамкой(cell(3, 1)) And ЯчейкаСРамкой(cell(3, 3)) Then
            If cell.Column = 2 Then СнизуЕстьСтрока = True: Exit Function
            If Not ЯчейкаСРамкой(cell(3, -1)) Then СнизуЕстьСтрока = True: Exit Function
        End If
    End If
    СнизуЕстьСтрока = False
End Function

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



0



0 / 0 / 0

Регистрация: 28.09.2009

Сообщений: 88

02.10.2009, 13:57

11

Пример файла с макросом (см. предыдущее сообщение)



0



134 / 79 / 6

Регистрация: 06.04.2009

Сообщений: 192

02.10.2009, 14:16

12

Цитата
Сообщение от R315K
Посмотреть сообщение

А как ты через CommandButton напишешь неподготовленный текст тут же полюбому должно использоваться TextBox…или я тут уже что то путаю?…и как соеденить кноку с выводом в ячейки?Но идея мне нравиться)

В форме имеется тот-же TextBox и кнопка CommandButtton1 (например, — Заполнить). После заполнения TextBox-а, при нажатии CommandButtton1 (событие CommandButtton1.Click()), текст вносится в нужные ячейки, как уже довольно подробно расписали остальные участники обсуждения темы.



0



6 / 6 / 0

Регистрация: 04.06.2008

Сообщений: 29

04.10.2009, 14:33

 [ТС]

13

Всем спасиб)…очень помогли ваши идеи…)



0



0 / 0 / 0

Регистрация: 26.12.2012

Сообщений: 12

21.11.2019, 14:27

14

Цитата
Сообщение от EducatedFool
Посмотреть сообщение

Пример файла с макросом (см. предыдущее сообщение)

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



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,142

21.11.2019, 14:37

15

Не по теме:

не прошло и полгода…..

GIFK,

вы создайте новую тему…



0



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:

  1. Sheet1: Home
  2. Sheet2: Student Database

Excel sheet

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.

Excel workbook

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.

Excel VBA editor

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.

Userform in Excel VBA

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

Userform in Excel VBA

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()&lsquo;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
  • Заполнение combobox vba с листа excel
  • Заполнение листа excel данными с другого листа excel
  • Заполнение access через excel
  • Заполнение конверта word скачать