Используйте Excel VBA для вставки данных таблицы в список - PullRequest
0 голосов
/ 05 ноября 2019

Обновление: провёл какое-то исследование, и теперь у меня есть код ниже

Мне сегодня очень помогли ваши боги, поэтому вот еще один вопрос о том, чего я никогда раньше не делал в Excel VBA:

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

Sub Tester()

    Dim dateSel As Variant
    Dim sevLev, i, rw As Integer
    Dim dRange, keyRange, listRange As Range
    Dim listArray() As String

    sevLev = 1
    dateSel = "12/4/2019"

    With Sheets("All_Risk_Report")
        .Range("A1").AutoFilter _
            field:=2, _
            Criteria1:=dateSel
        .Range("A1").AutoFilter _
            field:=13, _
            Criteria1:=sevLev
    End With

    Sheets("All_Risk_Report").Range("A1:AZ50000").SpecialCells(xlCellTypeVisible).Copy

    Sheets.Add Before:=ActiveSheet
    ActiveSheet.Name = "TempTable2"

    Sheets("All_Risk_Report").Range("F:F").SpecialCells(xlCellTypeVisible).Copy
    Sheets("TempTable2").Cells(1, 1).PasteSpecial

    Sheets("All_Risk_Report").Range("C:C").SpecialCells(xlCellTypeVisible).Copy
    Sheets("TempTable2").Cells(1, 2).PasteSpecial

    Sheets("All_Risk_Report").Range("E:E").SpecialCells(xlCellTypeVisible).Copy
    Sheets("TempTable2").Cells(1, 3).PasteSpecial

    Sheets("All_Risk_Report").Range("I:I").SpecialCells(xlCellTypeVisible).Copy
    Sheets("TempTable2").Cells(1, 4).PasteSpecial

    Sheets("All_Risk_Report").ShowAllData

    Set dRange = Sheets("TempTable2").Range("A1:D500")
    Set keyRange = Sheets("TempTable2").Range("A1:A500")

    dRange.Sort key1:=keyRange, Header:=xlYes

    Set listRange = Sheets("TempTable2").Range("A1:D500")

    With Sheets("Calendar").Shapes.Range(Array("List Box 1"))
        .Clear
        .ColumnHeads = False
        .ColumnCount = listRange.Columns.Count

        ReDim MyArray(listRange.Rows.Count, listRange.Columns.Count)

        rw = 0

        For i = 1 To listRange.Rows.Count
            For j = 0 To listRange.Columns.Count
                MyArray(rw, j) = listRange.Cells(i, j + 1)
            Next
            rw = rw + 1
        Next

        .List = MyArray

        .TopIndex = 0
    End With

End Sub

Я не совсем уверен, как это сделать. У меня уже есть созданная таблица, но я почти не использовал элементы управления формой.

По сути, это будет миниатюрное окно с возможностью прокрутки внутри самого листа, содержащее небольшое подмножество данных. Пожалуйста, дайте мне знать, если это имеет смысл, и если у вас есть какие-либо советы / предложения / советы. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...