Я пытаюсь избежать жесткого кодирования имени пользовательской формы в подпрограммы, которые заполняют, а затем извлекают данные из указанной пользовательской формы. Подраздел, который я включил здесь, - это тот, который должен поместить значения из пользовательской формы в ячейки на листе.
(я все еще довольно новичок в этом)
I 'Мы пробовали несколько подходов от других решений к подобным проблемам на стеке потока, но безрезультатно. Самым близким, к которому я пришел, был Screen.ActiveForm, но, к сожалению, это для Access, а не Excel.
Я также пытался создать переменную публичного объекта, но также не смог заставить ее работать.
Единственное, что сработало, это жесткое кодирование Userform1 в подпрограммы, но это кажется неэффективнымспособ пойти об этом. Я не понимаю, почему кто-то должен был бы писать новый модуль каждый раз, когда он настраивает другую пользовательскую форму.
''''''''''''''''' Userform '''''''''''''''''''
Private Sub CommandButton1_Click() ' Ok
' Set CurrentForm = Me.Caption
Interactive_Userforms.EditAdd
End Sub
''''''''''''''''' Module '''''''''''''''''''
Public StartRow, StartColumn, n_TextBoxes As Integer
Public sheet As String
' public CurrentForm as object
Sub EditAdd()
Dim i, j, k As Integer
i = StartRow
j = StartColumn
k = 1
Do While screen.activeform.Controls("TextBox" & k).Value <> ""
Worksheets(sheet).Cells(i, j).Value = screen.activeform.Controls("TextBox" & k).Value
Debug.Print (Worksheets(sheet).Cells(i + StartRow, j + StartColumn).Value)
i = i + 1
k = k + 1
Loop
End Sub
То, что я ожидал бы сделать, это в конечном итоге позволить любой пользовательской форме вызывать этоsub, чтобы получить значения из своих элементов управления textbox и поместить их в рабочий лист.