Связывание нескольких значений в ячейке с флажками в пользовательской форме

У меня есть следующий код поиска:

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. Из-за этого не берет?


person Doolie1106    schedule 03.02.2014    source источник
comment
Прочитайте значение из ячейки и разделите его, используя пробел в качестве разделителя. Вы получите массив. Теперь просто переберите массив, чтобы получить отдельные имена.   -  person Siddharth Rout    schedule 04.02.2014
comment
inputstr (который я использовал) должен быть f.offset(0,5).value (который вы использовали)   -  person Bigtree    schedule 04.02.2014
comment
он работает, но по какой-то причине он принимает только PACT, и я дважды проверил имена флажков, но он не подхватывается ...?   -  person Doolie1106    schedule 04.02.2014


Ответы (1)


Как сказал Сиддхарт, используя split() и перебирая полученный массив...

Dim str() As String
str() = Split(inputstr, " ")

For i = 0 To UBound(str)

Select Case ucase(trim(str(i)))
    Case "PACT": pact.Value = True
    case ....:
End Select

Next i
person Bigtree    schedule 03.02.2014
comment
+ 1 На всякий случай измените Select Case str(i) на Select Case Ucase(Trim(str(i))) и Case "pact" на Case "PACT" - person Siddharth Rout; 04.02.2014
comment
Точно не Сиддхарт. Хороший звонок! - person Bigtree; 04.02.2014
comment
@Bigtree, поэтому я нажал F8 и просмотрел приведенный выше код, но он только выбирает PACT и пропускает остальные случаи. Это потому, что отделка делает его PACTPrinceRupertMontrealWPMTETTCUSOther? Может поэтому не берет? - person Doolie1106; 04.02.2014