Я использую пользовательскую форму с несколькими флажками в ней. Моя цель состоит в том, чтобы все флажки возвращали свои значения (уникальные двухкратные аббревиатуры) в одну ячейку. Я не уверен, как это сделать. У меня нет опыта VBA до сегодняшнего дня.VBA multiple checkbox userform для одной ячейки
ответ
Вы можете записать макрос, чтобы получить ваш другой соответствующий код VBA, но это должно помочь:
Range("A" & LastRow).Value = CheckBox1.Value & CheckBox2.Value & CheckBox3.Value 'etc.
'Concatenate CheckBox values with "&" (the values will be True or False though)
Набора linkcell каждого флажка на другую ячейку -.e.g. checkbox1 в ячейку A1, checkbox2 в ячейку A2 и т. д. Для каждой ячейки соты используйте формулу If в своей смежной ячейке, чтобы проверить содержимое ячейки ссылки и вернуть строку или пробел, , например. если (A1 = True, «AA», «») в ячейке B1, если (A2 = True, «BB», «») в ячейке B2 и т. д. Наконец, объедините результаты «if» формул в другой ячейке: например, B1 & «» & B2 & «» & B3, используя запятую в качестве separaters
Чтобы сделать это, вы можете сделать коллекцию всех флажков в форме. Heres мой код:
Private mcolCHK As Collection 'This creates a modular level collection, which will keep track of all of the checkboxes
Private Sub cmdOK_Click()
Dim objA As Object, strResults As String, i As Integer
i = 1
For Each objA In mcolCHK
strResults = strResults & i & Left(objA.Value, 1)
i = 1 + i
Next
Unload frmTestForm 'rename this the name of your form
MsgBox strResults
'instead of using a message box, you can say "strResults = Sheets(sheet1).range("A1").value
'This part may be customized as needed
End Sub
Private Sub UserForm_Initialize()
Set mcolCHK = New Collection
mcolCHK.Add chkAtt1 'you will have to add one of these for each checkbox (simply replace "chkAtt1" with the name of your first checkbox
mcolCHK.Add chkAtt2 'and repeat for each checkbox
End Sub
Флажки всегда дают значение True или False. с помощью этого метода вы получите номер флажка (в порядке добавления их в коллекцию в подмножестве UserForm_Initialize()) и первой буквы результата (T или F). Когда я запустил это, у меня было два флажка и каждый раз проверял, когда эта форма запускается. Это дало мне результат «1T2T». Это может быть изменено по мере необходимости. Все, что вам действительно нужно, это то, как все это работает. просто убедитесь, что вы изменили все имена в соответствии с именами используемых вами переменных.