Пользовательская форма Excel VBA — использование той же формы для создания непрерывных данных

Я довольно новичок в VBA. Я хочу создать пользовательскую форму, которая позволит пользователю использовать одну и ту же форму несколько раз. Каждый раз, когда форма используется, любые данные, которые вводит пользователь, добавляются к переменной (одной и той же переменной или нескольких разных). Когда пользователь ввел все данные, он может нажать «Отправить», и форма выдаст все данные по порядку.

Пример: Пользовательская форма с текстовым полем и двумя командными кнопками, Next и Submit. Пользователь вводит 1, нажимает Next. Пользователь вводит 2, нажимает Submit. Пользовательская форма распечатывается 1, 2.

Как мне это сделать? Это вообще возможно?

Вполне возможно. Вам решать, как и где вы хотите хранить представленные данные (в коллекции, словаре, массиве, на листе...). Затем вы просто извлекаете и отображаете эти значения.

JNevill 10.04.2019 16:33

Я очень новичок в VBA и в написании кода в целом (у меня нет опыта в этом). Что было бы лучшим способом сделать это? Я хочу, чтобы пользователь мог решить, сколько раз он вводит данные. Таким образом, некоторым пользователям может потребоваться использовать форму только один раз. Другим может потребоваться 5 экземпляров. Мне не нужно, чтобы вы писали код для меня, но если бы вы могли указать правильное направление, я был бы очень признателен!

xbauks 10.04.2019 16:37

Может быть трудно начать заниматься такими вещами. Я был здесь. Я привел пример в качестве ответа, используя самую простую пользовательскую форму в новой книге. Здесь я использую массив с именем Submissions для хранения значений, отправленных пользователем в TextBox1. Чтобы запустить это после создания пользовательской формы и вставки этого кода, вы можете перейти на панель Immediate (Просмотр >> Немедленно), ввести userForm1.Show и нажать клавишу ввода.

JNevill 10.04.2019 17:00
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
3
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот быстрый 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

Большое спасибо! Это именно то, что мне было нужно!

xbauks 10.04.2019 18:03

Другие вопросы по теме