Вызов активированного списка Excel Activex при открытии книги Excel - PullRequest
0 голосов
/ 10 октября 2018

У меня есть несколько списков активных элементов и код vb в листе Excel 1. Но каждый раз, когда я открываю книгу, мне нужно открывать окно кода и запускать код, чтобы активировать этот список.Можно ли как-нибудь автоматически активировать и запустить код на листе 1, принадлежащий списку, после того, как я открою книгу?

Я пытался просматривать другие форумы / вопросы, но не мог найти никакого решения.sheet1.combobox1.activate в этом коде книги также не работает.Т

Заранее спасибо.Ниже приведен код на листе 1, который необходимо активировать.

Public oDictionary As Object

Private Sub ComboBox1_Click()
    Dim r As Range
    Dim list As Object

    Set oDictionary = CreateObject("Scripting.Dictionary")

    With Sheet2
        For Each r In .Range("C11", .Cells(.Rows.Count, "c").End(xlUp))  

            If Not oDictionary.Exists(r.Text) Then                       
                Set list = CreateObject("System.Collections.ArrayList")  

                oDictionary.Add r.Text, list
            End If

            If Not oDictionary(r.Text).Contains(r.Offset(0, 1).Value) Then  
                oDictionary(r.Text).Add r.Offset(0, 1).Value                
            End If

        Next
    End With

    ComboBox1.list = oDictionary.Keys  'Display the list in combobox 1
End Sub

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

На самом деле найдено решение при работе с подпрограммой workbook_open.

Вставив Call Sheet1.ComboBox1_Click в подпункт workbook_open ().По какой-то причине активация одного элемента ActiveX достаточна для активации других элементов ActiveX.

0 голосов
/ 11 октября 2018

Вы можете запустить код в книге, открытой автоматически с помощью sub workbook_open(), а затем создать комбинированный список для этого события, в отличие от события щелчка:

Dim r As Range
Dim list As Object
Dim rng As Range
Dim rng1 As Range


Set oDictionary = CreateObject("Scripting.Dictionary")

With Sheet2
    Set rng1 = .Range("C11", .Cells(.Rows.Count, "c").End(xlUp))
    For Each r In rng1.Cells

        If Not oDictionary.Exists(r.Text) Then
            Set list = CreateObject("System.Collections.ArrayList")

            oDictionary.Add r.Text, list
        End If

        If Not oDictionary(r.Text).Contains(r.Offset(0, 1).Value) Then
            oDictionary(r.Text).Add r.Offset(0, 1).Value
        End If

    Next
End With

Set rng = Worksheets(1).Range("c11") 'where the dropdown list will go
    With rng
        Set box1 = Worksheets(1).DropDowns.Add(.Left, .Top, .Width, .Height)
            With box1
              .Name = "ComboBoxIn" & rng.Address(False, False)
              .list = oDictionary.Keys
            End With
     End With
end sub
...