Я довольно новичок в VBA. Я хочу создать пользовательскую форму, которая позволит пользователю использовать одну и ту же форму несколько раз. Каждый раз, когда форма используется, любые данные, которые вводит пользователь, добавляются к переменной (одной и той же переменной или нескольких разных). Когда пользователь ввел все данные, он может нажать «Отправить», и форма выдаст все данные по порядку.
Пример:
Пользовательская форма с текстовым полем и двумя командными кнопками, Next
и Submit
.
Пользователь вводит 1
, нажимает Next
. Пользователь вводит 2
, нажимает Submit
.
Пользовательская форма распечатывается 1, 2
.
Как мне это сделать? Это вообще возможно?
Я очень новичок в VBA и в написании кода в целом (у меня нет опыта в этом). Что было бы лучшим способом сделать это? Я хочу, чтобы пользователь мог решить, сколько раз он вводит данные. Таким образом, некоторым пользователям может потребоваться использовать форму только один раз. Другим может потребоваться 5 экземпляров. Мне не нужно, чтобы вы писали код для меня, но если бы вы могли указать правильное направление, я был бы очень признателен!
Может быть трудно начать заниматься такими вещами. Я был здесь. Я привел пример в качестве ответа, используя самую простую пользовательскую форму в новой книге. Здесь я использую массив с именем Submissions
для хранения значений, отправленных пользователем в TextBox1
. Чтобы запустить это после создания пользовательской формы и вставки этого кода, вы можете перейти на панель Immediate
(Просмотр >> Немедленно), ввести userForm1.Show
и нажать клавишу ввода.
Вот быстрый POC. Рассмотрим простую пользовательскую форму с текстовым полем и двумя командными кнопками. Я вообще не менял имена по умолчанию. Только что добавил пользовательскую форму с textbox1, commandbutton1 и commandbutton2:
CommandButton1
отправляет и CommandButton2
выходит из пользовательской формы (например, нажимается, когда пользователь завершает отправку).
Код, чтобы заставить эту работу работать, как вы описали. Это входит в кодовую страницу для пользовательской формы.
'declare a string array to hold the submissions from textbox1
Private submissions() As String
'Code to run when the form activates
Private Sub UserForm_Activate()
'When this userform is first initialized set up the array
'as a one dimensional array with a single element
ReDim submissions(0 To 0)
End Sub
'Code to run when the commandbutton1 is clicked
Private Sub CommandButton1_Click()
'call the addSubmission sub
addSubmission
End Sub
'Code to run when the commandButton2 is clicked
Private Sub CommandButton2_Click()
'add submission one more time
addSubmission
'Now Loop through the array and send the values out
'to the worksheet
Dim rowCounter As Long
rowCounter = 1
For Each submission In submissions
Sheet1.Cells(rowCounter, 1).Value = submission
rowCounter = rowCounter + 1
Next submission
'Now close the form
Me.Hide
'And activate sheet1 for the user to see their submissions
Sheet1.Activate
End Sub
'addSubmission will add textBox1 value to
' the submissions array declared at the
' top of this userform code.
Sub addSubmission()
'First we have to redim the array to hold the new
' submission.
'But only redim it if this isn't the first submission
If UBound(submissions) > 0 Or submissions(0) <> "" Then ReDim Preserve submissions(0 To UBound(submissions) + 1)
submissions(UBound(submissions)) = Me.TextBox1.Value
'Clear the textbox so the user doesn't have to backspace
Me.TextBox1.Value = ""
End Sub
Большое спасибо! Это именно то, что мне было нужно!
Вполне возможно. Вам решать, как и где вы хотите хранить представленные данные (в коллекции, словаре, массиве, на листе...). Затем вы просто извлекаете и отображаете эти значения.