Страницы: 1
RSS
userform combobox на основе сводной таблицы
 
Добрый день!

Возникла ситуация, при которой необходимо, чтобы СomboBox2 в userform формировался на основании сводной таблицы.
Файл пример в приложении, код ниже
Код
Private Sub CommandButton1_Click()
Dim iLastRow As Long
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
    Cells(iLastRow, 1) = Me.ComboBox1
    Cells(iLastRow, 2) = Me.ComboBox2
    Cells(iLastRow, 5) = Me.ComboBox3
    Cells(iLastRow, 3) = Me.TextBox1
    Cells(iLastRow, 4) = Me.TextBox2
    Me.TextBox1 = ""
    Me.TextBox2 = ""
    MsgBox "Информация добавлена!", vbInformation, "База"
End Sub

Private Sub UserForm_Initialize()
With Worksheets("masterdata")
    Me.ComboBox1.List = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
End With
With Worksheets("masterdata")
    Me.ComboBox3.List = .Range("D2:D" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
End With
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call V
End Sub

Private Sub TextBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call V
End Sub

Private Sub CommandButton2_Click()
    End
End Sub

Попробовал несколько вариантов с разных форумов, но что-то все ни как...

Заранее спасибо.
 
Добрый день. А почему также как и остальные нельзя?
Код
With Worksheets("masterdata")
    Me.ComboBox2.List = .Range("H4:H" & .Cells(.Rows.Count, 8).End(xlUp).Row).Value
End With
 
Либо так.
Код
With Worksheets("masterdata")
    Me.ComboBox2.List = .Range(.[h3], .[h3].End(xlDown)).Value
End With

И сделайте в календаре модуль класса, а то аш глаза режет от количества повторного кода:)
Изменено: Nordheim - 26.03.2018 16:51:42
"Все гениальное просто, а все простое гениально!!!"
 
вообще, я так подозреваю, проблема возникает когда в списке только одна запись и этот способ не работает. Тогда можно так:
Код
Private Sub UserForm_Initialize()
    Dim j As Integer
    With Worksheets("masterdata")
        For j = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            ComboBox1.AddItem (Cells(j, "A"))
        Next j
        For j = 4 To .Cells(.Rows.Count, "H").End(xlUp).Row
            ComboBox2.AddItem (Cells(j, "H"))
        Next j
        For j = 2 To .Cells(.Rows.Count, "D").End(xlUp).Row
            ComboBox3.AddItem (Cells(j, "D"))
        Next j
    End With
End Sub
 
2 минуты шаманства с макрорекордером и F1.
Код
ar = ActiveSheet.PivotTables("PivotTable6").PivotFields("Сотрудник").DataRange.Value

Для комбо
Код
    With Worksheets("masterdata")
        Dim ar
        ar = .PivotTables("PivotTable6").PivotFields("Сотрудник").DataRange.Value
        If Not IsArray(ar) Then
            ReDim ar(0)
            ar(0) = .PivotTables("PivotTable6").PivotFields("Сотрудник").DataRange.Value
        End If
        Me.ComboBox2.List = ar
    End With
Изменено: RAN - 26.03.2018 18:31:23
Страницы: 1
Наверх