У меня есть следующий код поиска:
Private Sub Search_Click()
Dim Name As String
Dim f As Range
Dim r As Long
Dim ws As Worksheet
Dim s As Integer
Dim FirstAddress As String
Name = surname.Value
With ws
Set f = Range("A:A").Find(what:=Name, LookIn:=xlValues)
If Not f Is Nothing Then
With Me
firstname.Value = f.Offset(0, 1).Value
tod.Value = f.Offset(0, 2).Value
program.Value = f.Offset(0, 3).Value
email.Value = f.Offset(0, 4).Text
officenumber.Value = f.Offset(0, 6).Text
cellnumber.Value = f.Offset(0, 7).Text
if f.offset(0,5).value = "PACT" then PACT.value = True
Я хочу изменить if f.offset(0,5).value
: если у меня есть одно значение в ячейке, то легко выбрать эту ячейку, связать ее с флажком и установить флажок. Проблема в том, что у меня есть несколько значений в ячейке.
Значения в столбце 6 (f.offset(0,5).values) имеют имена в виде флажков, например, checkboxes.name & " ", так что... ПАКТ ОТТАВА ВАНКУВЕР МОНРЕАЛ ТОРОНТО
Это делается с помощью команды добавления.
Таким образом, в столбце 6 может отображаться PACT OTTAWA VANCOUVER или PACT TORONTO или TORONTO в зависимости от того, какие флажки выбраны для добавления в пользовательскую форму.
Если я смогу прочитать и сослаться на название флажков и отметить те, которые находятся в столбце 6, тогда это сработает.
if f.offset(0,5).value = "PACT" then PACT.value = True
Если я сделаю это таким образом, то у меня будет слишком много комбинаций, которые мне придется вычислять с помощью операторов if. Есть ли способ «прочитать» столбец 6, сопоставить его с именами флажков и установить флажки в пользовательской форме, когда я нажимаю кнопку поиска?
ИЗМЕНИТЬ:
Private Sub Search_Click()
Dim Name As String
Dim f As Range
Dim r As Long
Dim ws As Worksheet
Dim s As Integer
Dim FirstAddress As String
Dim str() As String
Name = surname.Value
With ws
Set f = Range("A:A").Find(what:=Name, LookIn:=xlValues)
If Not f Is Nothing Then
With Me
firstname.Value = f.Offset(0, 1).Value
tod.Value = f.Offset(0, 2).Value
program.Value = f.Offset(0, 3).Value
email.Value = f.Offset(0, 4).Text
officenumber.Value = f.Offset(0, 6).Text
cellnumber.Value = f.Offset(0, 7).Text
str() = Split(inputstr, " ")
For i = 0 To UBound(str)
Select Case UCase(Trim(str(i)))
Case "PACT": PACT.Value = True
Case "PrinceRupert": PrinceRupert.Value = True
Case "Montreal": Montreal.Value = True
Case "TET": TET.Value = True
Case "WPM": WPM.Value = True
Case "TC": TC.Value = True
Case "US": US.Value = True
Case "Other": Other.Value = True
End Select
Next i
Я добавил следующий код, но ничего не происходит.
Я искал в msdn, но не совсем понимаю, что str() = split(inputstr, "") и для I = 0 Ubound (str). Я предполагаю, что функция обрезки заключается в том, что если после обрезки значений столбца 6 и регистра является «PACT», то PACT.value = True?
EDIT2:
Кажется, код не улавливает слова, кроме PACT, и я предполагаю, что он улавливает PACT, потому что он первый. Я попытался вручную ввести значения столбца 6 и посмотреть, будут ли подобраны какие-либо имена, но это не так. Есть ли способ исправить это?
Возможно, это потому, что когда я обрезаю данные в столбце 6, они отображаются как PACTPrinceRupertTETWPMTCUSOther. Из-за этого не берет?
inputstr
(который я использовал) должен бытьf.offset(0,5).value
(который вы использовали) - person Bigtree   schedule 04.02.2014