Мне нужна твоя помощь. Кажется, что то, что я написал в коде, не выполняет то, что я пытаюсь сделать здесь.

Задача состоит в том, чтобы иметь 2 поля со списком пользовательских форм: одно для значений (этажа), которые добавляются вручную один раз [3,4,5], а другие поля со списком (офисы), в которые значения добавляются динамически на основе выбора, сделанного в поле выбора пола.

Скажем, например, что если я выберу значение [3] в поле со списком этажа, поле со списком офиса будет содержать следующие значения:

A-01
A-02
A-03
A-04
A-05
A-06
A-07
A-08

Я думал, что этот код сработает, но это не так:

'Cells(row, col)

Private Sub floor_Change()
    lRow = Sheets("Office Spaces").UsedRange.Rows.Count

    With Sheets("Office Spaces")
        For i = 2 To lRow
            If .Cells(i, 1).Value = UserForm1.floor.Value Then
                UserForm1.office.AddItem .Cells(i, 2).Value
            End If
        Next i
    End With
End Sub

Вот как выглядят данные в моем листе Excel:

enter image description here

0
Jason Kelly 13 Ноя 2018 в 18:56

1 ответ

Лучший ответ
'Cells(row, col)

Private Sub floor56_Change()

UserForm1.office.Clear

Dim sh
Dim rw

Set sh = Sheets("Office Spaces")

For Each rw In sh.Rows

  If sh.Cells(rw.row, 1).Text = UserForm1.floor.Value Then

    UserForm1.office.AddItem (sh.Cells(rw.row, 2).Value)

  End If

Next rw

End Sub

Или

Private Sub floor_Change()

    If UserForm1.floor.Value <> "" Then

        UserForm1.office.Clear

        Dim ws
        Set ws = ThisWorkbook.Worksheets("Office Spaces")

        Dim rng
        Set rng = ws.Range("A:A")

        For Each cell In rng

            If cell.Text = UserForm1.floor.Value Then

                UserForm1.office.AddItem (cell.Offset(0, 1).Value)

            End If

        Next cell

    End If

End Sub
0
Jason Kelly 13 Ноя 2018 в 19:08