2015-11-12 2 views
1

У меня есть список тарифов, которые я установил на автофильтре, так что, когда выбран конкретный канал сбыта и правильный пароль, он показывает только тарифы, доступные этому каналу.Создание .additem для combobox

Моя проблема в том, что я не могу понять, как заставить командную кнопку также заполнить поле со списком.

мой .additem ниже код продолжает возвращать "Отказано в доступе"

ошибка

Dim TLoc As Range 
Dim ws As Worksheet 
Set ws = Worksheets("Tariff Matrix") 
Set TLoc = Range("Tariffs") 

For Each TLoc In ws.Range("Tariffs") 
    With MobilePricing.Tariff1 
     .AddItem TLoc.Value 
    End With 
Next TLoc 

Любая помощь будет принята с благодарностью.

+0

Глупого вопрос, но вы пытаетесь сделать это после того, как UserForm загружается ? Где находится этот код? И вы очистили ComboBox, прежде чем пытаться добавить новые тарифы? – R3uK

+0

Когда рабочая книга открыта, пользовательская форма инициализируется сразу несколькими списками со списком (1 для каждого канала продаж). Когда они выбирают там канал продаж, появляется отдельная пользовательская форма, которая подсказывает пароль. Когда они нажимают «отправить пароль», он вводит имя в канал продаж на страницу «Тарифная матрица», которая затем фильтрует тарифы, доступные только для этого канала. Я хочу, чтобы кнопка команды отправки не только отфильтровывала, но затем заполняла выпадающие списки с только видимыми тарифами (смещение, на мой взгляд, является единственным методом для этого). Кроме того, я еще не очистил поле со списком. –

+0

Что делает цикл 'Для каждого TLoc В ws.Range (« Тарифы »)' do? Я предполагаю, что в книге есть только один диапазон «Тарифы»? – eirikdaude

ответ

2

Прежде всего вам нужно проверить RowSource вашего ComboBox, если он не пуст, пуст.

Тогда как вы хотите иметь только видимые ячейки (после автофильтра); вам нужно использовать Range("Tariffs").SpecialCells(xlCellTypeVisible).

Здесь исправленный код:

Dim TLoc As Range 
Dim ws As Worksheet 
Set ws = Worksheets("Tariff Matrix") 
Set TLoc = Range("Tariffs") 

For Each TLoc In ws.Range("Tariffs").SpecialCells(xlCellTypeVisible).Cells 
    With MobilePricing.Tariff1 
     .AddItem TLoc.Value 
    End With 
Next TLoc 

Чтобы петли на вашем UserForm Controls, использовать что-то вроде этого:

Dim Ctrl As Control 

For Each Ctrl In Me.Controls 
    If TypeName(Ctrl) <> "ComboBox" Then 
    Else 
     MsgBox Ctrl.Object.Name 
     'Your code for one combobox (everyone will be referenced as Ctrl) 
    End If 
Next Ctrl 
+1

это очень большое спасибо ... Работаю отлично.Если бы я хотел расширить это и создать другую переменную, поэтому этот код применим ко всем спискам combobox (10 в Total), то как бы я это сделал. –

+0

Извините, забыл упомянуть, что все поля со списком отмечены одинаково (Tariff1, Tariff2 ... Tariff10) @ R3uK –

+0

Посмотрите на редактирование! ;) – R3uK

Смежные вопросы