Моя проблема заключается в том, что я хочу заполнить элемент управления 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
принимает правильное значение (первое значение в диапазоне данных моей таблицы).