2015-05-19 4 views
0

Я пытаюсь вставить новую строку в именованный диапазон. Пользователь выбирает «категорию» из комбинированного поля, например, Cool Drinks, Beer and Cider, Bitters и т. Д., А затем содержимое этой категории заполняет другое поле со списком.VBA Select Case с Named Range не работает

Я назвал диапазоны всех категорий и хотел бы, чтобы они заполнили второй поле со списком. У меня есть код, который работает сам по себе:

Dim rng As Range 
Dim DailySales As Worksheet 
Set DailySales = Worksheets("Daily Sales") 

Set rng = DailySales.Range("CoolDrinksDailySales") 
For Each rng In DailySales.Range("CoolDrinksDailySales") 
Me.CmboName.AddItem rng.Value 
Next rng 

Однако, когда я пытаюсь использовать это в Select Case, он не работает.

Dim rng As Range 
Dim DailySales As Worksheet 
Set DailySales = Worksheets("Daily Sales") 
Select Case Me.CmboType.Value 
Case "Cool Drinks" 
    Set rng = DailySales.Range("CoolDrinksDailySales") 
    For Each rng In DailySales.Range("CoolDrinksDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
Case "Beer and Cider" 
    Set rng = DailySales.Range("BeerCiderDailySales") 
    For Each rng In DailySales.Range("BeerCiderDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
End Select 

Есть ли у кого-нибудь идеи?

Вот полный код:

Option Explicit 
Private Sub UserForm_Initialize() 
'InitializeTypeCombo 
Dim Types() As String 
Types = Split("Cool Drinks,Beer and  
Cider,Bitters,Brandy,Whiskey,Rum,Spirits,Sherry,White Wine,Red Wine", 
",") 

Dim i As Integer 
For i = LBound(Types) To UBound(Types) 
Me.CmboType.AddItem Types(i) 
Next 

'InitializeNameCombo 

Dim rng As Range 
Dim DailySales As Worksheet 
Set DailySales = Worksheets("Daily Sales") 
Select Case Me.CmboType.Value 
Case "Cool Drinks" 
    Set rng = DailySales.Range("CoolDrinksDailySales") 
    For Each rng In DailySales.Range("CoolDrinksDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
Case "Beer and Cider" 
    Set rng = DailySales.Range("BeerCiderDailySales") 
    For Each rng In DailySales.Range("BeerCiderDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
End Select 
End Sub 

Private Sub CmdExit_Click() 
Unload Me 
End Sub 
Private Sub CmdEnter_Click() 
Dim rng As Range 

'Store Date Index 
Dim colArray(32) As Integer 

'Store Item Index 
Dim rowArray(150) As Integer 

'Store first value for Find and FindNext 
Dim FirstAddress As String 

Dim i As Integer 
Dim j As Integer 
i = 0 
j = 0 

With Range("B6:AD6") 
Set rng = .Find(TxtDate.Value, LookIn:=xlValues) 
If Not rng Is Nothing Then 
    FirstAddress = rng.Address  
    Do 
     Set rng = .FindNext(rng) 
     colArray(i) = rng.Column 
     i = i + 1    
     Loop While Not rng Is Nothing And rng.Address <> FirstAddress 
End If 
End With 

With Range("A7:A150") 
Set rng = .Find(CmboName.Value, LookIn:=xlValues) 
If Not rng Is Nothing Then 
    FirstAddress = rng.Address   
    Do 
     Set rng = .FindNext(rng) 
     rowArray(j) = rng.Row 
     j = j + 1    
     Loop While Not rng Is Nothing And rng.Address <> FirstAddress 
End If 
End With 

Dim c As Integer 
Dim r As Integer 

For c = 0 To i - 1 
For r = 0 To j - 1 
    Cells(rowArray(r), colArray(c)).Value = TxtNoSold.Value 
Next r 
Next c 
Unload Me 
End Sub 
+1

Здравствуйте, удалите эту строку 'Set RNG = DailySales.Range ("CoolDrinksDailySales")' и видеть то, что не происходит ничего – Davesexcel

+0

. Второй комбинированный блок по-прежнему выглядит пустым. – Meringue90

+0

Да, если бы это сработало для 1-го, не могли бы вы сделать то же самое для второго? – Davesexcel

ответ

0

Решение было простым перемещением Select Case в случае Combobox_Change. Как сказал Дик Куслайка, значение combobox не было во время выполнения. Вот правильный код, чтобы выполнить то, что я пытался сделать.

Option Explicit 
Private Sub Userform_Initialize() 
'Populate cmboTypes 
Dim Types() As String 
Types = Split("Cool Drinks,Beer and _ 
    Cider,Bitters,Brandy,Whiskey,Rum,Spirits,Sherry,White Wine,_ 
    Red Wine", ",") 

'Loop through the values populated in the split function above, and add 
'each item to the combobox 
Dim i As Integer 
For i = LBound(Types) To UBound(Types) 
Me.CmboType.AddItem Types(i) 
Next 
End Sub 


Sub CmboType_Change() 

Dim rng As Range 
Dim DailySales As Worksheet 

'Populate CmboName with named dynamic ranges of "Types" 

Set DailySales = Worksheets("Daily Sales") 
Select Case Me.CmboType.Value 
    Case "Cool Drinks" 
    Set rng = DailySales.Range("CoolDrinksDailySales") 
    For Each rng In DailySales.Range("CoolDrinksDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
    Case "Beer and Cider" 
    CmboName.Clear 
    Set rng = DailySales.Range("BeerCiderDailySales") 
    For Each rng In DailySales.Range("BeerCiderDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
    Case "Bitters" 
    CmboName.Clear 
    Set rng = DailySales.Range("BittersDailySales") 
    For Each rng In DailySales.Range("BittersDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
    Case "Brandy" 
    CmboName.Clear 
    Set rng = DailySales.Range("BrandyDailySales") 
    For Each rng In DailySales.Range("BrandyDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
    Case "Whiskey" 
    CmboName.Clear 
    Set rng = DailySales.Range("WhiskeyDailySales") 
    For Each rng In DailySales.Range("WhiskeyDailySales") 
    Me.CmboName.AddItem rng.Value 
    Next rng 
End Select 
End Sub 
Смежные вопросы