Заполнение списков ActiveX с различными значениями - PullRequest
0 голосов
/ 15 мая 2019

Моя проблема заключается в том, что я хочу заполнить элемент управления ActiveX конкретным именем, List_Funds, как я его переименовал.Население основано на определенном столбце в таблице, которую я создал в своей книге под названием Table_Funds.Я хочу, чтобы выпадающий список заполнял только уникальные значения таблицы.Код должен запускаться при открытии книги.

Код ниже с моей текущей попыткой:

Ниже код находится в указанном модуле, содержащем все мои объявления

Option Explicit
Option Base 0

' This module contains all constants and variable declarations
' **** Declarations ****

' Worksheets and workbooks
Public ws             As Worksheet
Public ws_O           As Worksheet
Public ws_S           As Worksheet
Public wkb            As Workbook

' Integers
Public i              As Integer
Public j              As Integer

' Variants, objects and ranges
Public Data           As Variant
Public Funds_List     As Object
Public rng            As Range
Public tbl            As ListObject

Sub Fixed()

    Set wkb = ThisWorkbook
    Set ws_O = wkb.Sheets("Overview")
    Set ws_S = wkb.Sheets("SQL")
    Set Funds_List = ws_O.OLEObjects("List_Funds").Object
    Set tbl = ws_O.ListObjects("Table_Funds")

End Sub

Ниже код находится в модуле ThisWorkbook

Option Explicit

Private Sub Workbook_Open()
' Computing when opening workbook

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Call modCnt.Fixed

    ' Populating table
    Data = modGlobal.GetSql(modGlobal.Compose_sSql(1))
    tbl.DataBodyRange.ClearContents
    For i = LBound(Data, 2) To UBound(Data, 2)
        For j = LBound(Data, 1) To UBound(Data, 1)
            tbl.DataBodyRange(1 + i, 1 + j) = Data(j, i)
        Next j
    Next i

    ' Populating combobox
    With Funds_List
        For Each rng In tbl.ListColumns("Name").DataBodyRange
            If Not .exists(rng.Value) Then ' < ---- code fails here
                .AddItem rng.Value
            End If
        Next rng
    End With


    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub

Мой код завершается с ошибкой в ​​строке If Not .exists(rng.Value) Then, давая мне

ошибка времени выполнения 438 'Объект не поддерживает это свойство или метод. '

Таблица заполняется должным образом (т. Е. Вы можете игнорировать раздел, заполняющий таблицу при вызове подпрограммы в другом модуле) и просматривая код Iзнаю, что rng принимает правильное значение (первое значение в диапазоне данных моей таблицы).

1 Ответ

1 голос
/ 15 мая 2019

Возможно, кто-то создал функцию. Попробуйте заменить этот блок:

' Populating combobox
Dim Exists As Boolean
Dim t As Long

Exists = False

With Funds_List
    For Each Rng In tbl.ListColumns("Name").DataBodyRange
        For t = 1 To .ListCount - 1
            If Rng.Value = CStr(.List(t)) Then
                Exists = True
                Exit For
            End If
        Next t
        If Exists = False Then
            .AddItem Rng.Value
        End If
    Next Rng
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...