Excel vba: получение диапазона ячеек в столбце B на основе ячейки в столбце A

117
13


У меня есть скрипт vba, который получает информацию со всех листов, добавляет их в разные выпадающие списки и всякий раз, когда значение выбирается из поля со списком, происходят разные вещи.
Первый комбо я заселяю следующим образом:

Private Sub Workbook_Open()

Dim oSheet As Excel.Worksheet
Dim oCmbBox As MSForms.ComboBox
Set oCmbBox = ActiveWorkbook.Sheets(1).cmbSheet
oCmbBox.Clear
For Each oSheet In ActiveWorkbook.Sheets
If oSheet.Index > 1 Then
oCmbBox.AddItem oSheet.Name
End If
Next oSheet

End Sub

Второе поле со списком делает следующее:

Private Sub cmbSheet_Change()

Dim oSheet As Excel.Worksheet

'Report combo box
Dim oCmbBox As MSForms.ComboBox
Set oCmbBox = ActiveWorkbook.Sheets(1).cmbSheet

'Tech combo box
Dim tCmbBox As MSForms.ComboBox
Set tCmbBox = ActiveWorkbook.Sheets(1).techCombo
tCmbBox.Clear

Dim rng As Range
Set rng = Sheets(oCmbBox.Value).Range("A2:A10")
For Each cell In rng
If Not IsEmpty(cell.Value) Then
tCmbBox.AddItem cell.Value
End If
Next cell

ActiveWorkbook.Sheets(1).techCombo.ListIndex = 0
End Sub

У меня есть следующий лист:
sheet

Теперь, выбирая значение из techCombo (т.е. Teknik_1), я хочу, чтобы третье поле со списком было заполнено данными от B6-B9.
Это возможно??
Заранее спасибо!

спросил(а) 2016-01-12T18:31:00+03:00 4 года, 10 месяцев назад
1
Решение
72

Учитывая предоставленные данные примера, что-то подобное должно работать на вас. Обратите внимание, что этот код находится в модуле кода Sheet1:

Private Sub techCombo_Change()

Dim ws As Worksheet
Dim rFound As Range
Dim cbo3 As ComboBox

Set cbo3 = Me.ComboBox3 'Change to the actual name of the third combobox

cbo3.Clear

With Me.cmbSheet
If .ListIndex = -1 Then Exit Sub 'Nothing selectd in cmbSheet
Set ws = ActiveWorkbook.Sheets(.Text)
End With

With Me.techCombo
If .ListIndex = -1 Then Exit Sub 'Nothing selected in techCombo
Set rFound = ws.Columns("A").Find(.Text, ws.Cells(ws.Rows.Count, "A"), xlValues, xlWhole)
End With

If Not rFound Is Nothing Then
If Trim(Len(rFound.Offset(2, 1).Text)) = 0 Then
cbo3.AddItem rFound.Offset(1, 1).Value
Else
cbo3.List = ws.Range(rFound.Offset(1, 1), rFound.Offset(1, 1).End(xlDown)).Value
End If
End If

End Sub

ответил(а) 2016-01-12T19:37:00+03:00 4 года, 10 месяцев назад
42

Private Sub ComboBox21_Change() Dim TeckCMBxIndex TeckCMBxIndex = ActiveWorkbook.Sheets(3).ComboBox21.ListIndex Select Case TeckCMBxIndex Case 0 ActiveWorkbook.Sheets(3).ComboBox22.Clear Exit Sub Case 1 Set rng = Worksheets("SHEET3").Range("B6:B10") Case 2 Set rng = Worksheets("SHEET3").Range("B11:B15") End Select ActiveWorkbook.Sheets(3).ComboBox22.Clear For Each cell In rng If Not IsEmpty(cell.Value) Then ComboBox22.AddItem cell.Value End If Next cell End Sub


Надеюсь, это должно помочь вам... Я попробовал, и это сработало. Обратите внимание, что у меня были значения и комбобокс в sheet3.

ответил(а) 2016-01-13T09:15:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема