НОВОЕ ОБНОВЛЕНИЕ - Использование коллекции для сопоставления назначений элементов управления пользовательской формы
Использование коллекции для ссылки на элементы управления пользовательской формы и местоположение для ввода
Я создал коллекцию, как показано ниже, для ссылки на позицию для печати элементов управления пользовательской формы на лист. Я проверил это на листе «Sheet1» с элементами управления «subTaskID» и «TextBoxsubtask».
Я получаю
" Несоответствие типов аргументов ByRef"
в переменной ctlMap. Я попытался следовать объяснениям PeterT ниже.
'' COLLECTION START DELETE FROM HERE IF WRONG
Sub Userform_Intialize()
Set ctlMap = New Collection
With ctlMap
.Add item = "Sheet1!B1", key:="SubTaskID"
.Add item = "Sheet!B2", key:="TextBoxsubtask"
End With
End Sub
'Macro to populate sheet
Private Sub CommandButton1_Click()
Dim ctl As Variant
For Each ctl In Me.Controls
If ControlExists(ctlMap, ctl.Name) Then
Range(ctlMap(ctl.Name)) = ctl.Value
End If
Next ctl
End Sub
Оригинальный ВОПРОС
У меня есть пользовательская форма для заполнения файла Excel относительно задач проекта.
Я создал код, связывающий каждый элемент управления с правильным столбцом и номером ячейки. Я хотел бы быть более эффективным в своем коде, чтобы ускорить процесс. Я не хочу, чтобы метки и некоторые значения текстового поля вводились, а также, если элемент управления пуст, чтобы перейти к следующему.
Я не могу правильно указать l oop через элементы управления, поскольку он не печатает в нужных ячейках.
Как мне переставить этот порядок? Кроме того, как запретить печать false для пустого значения?
Я создал массив с необходимыми именами элементов управления, однако я получаю сообщение об ошибке
тот же объект, который требуется при запуске.
lastrowST = subtaskws.range("A" & Rows.Count).End(xlUp).row
Dim Ctrl As Control, col As Long, range As range, userformorder As Variant
With AddTask
userformorder = Array(.SubTaskID, .TextBoxsubtask, .ComboBoxDeliverableFormat, .TextBoxcheckedcomplete, .TextBoxformat, .TextBoxacceptancecriteria, .BudgetWorkloadTextBox, .AWLTextBox, .ComboBoxOwner, .TextBoxTDSNumber, .TextBoxMilestone, .TextBoxTargetDeliveryDate, .ComboBoxW, .ComboBoxI, .ComboBoxe, .TextBoxP, .TextBoxLevel, .TextBoxInputQuality, .TextBoxNewInput, .TextBoxDelay, .TextBoxInternalVV, .TextBoxReviewer, .TextBoxDelivered, .ComboBoxNumIterations, .ComboBoxAcceptance, .ComboBoxProgress, .ComboBoxStatus, .ComboBoxFlowChart, .TextBoxActivitySheet, .TextBoxEvidenceofDelivery, .TextBoxComments)
For Each range In subtaskws.range("A" & lastrowST + 1 & ":AE" & lastrowST + 1 & "")
For Each Ctrl.Value In userformorder
If Ctrl.Value <> "" Then
range.Value = Ctrl.Value
Else
End If
Next Ctrl
Next range
End With