2015-07-12 5 views
2

Привет я столкнулся с проблемой с моими данными ListBox в моем UserForm Когда я пытаюсь изменить исходный файл, где мой ListBox подключен не кажется изменитьVBA UserForm Обновить данные ListBox, когда изменяется источник

Он показывал хорошие данные на первый, но когда я пытаюсь нажать кнопку RUN ДАТА

enter image description here

Это не идет со значением в моем диапазоне, который задается как мой ключ для сортировки

enter image description here

Вот мой код для кнопки RUN DATE для сортировки восходящих и нисходящих

Private Sub CommandButton1_Click() 

Application.EnableEvents = False 

Worksheets("combobox_value").Activate 
Dim strDataRange As Range 
Dim keyRange As Range 
Set strDataRange = Range("I2:L4") 
Set keyRange = Range("I2:I4") 

If Range("M2").Value = "D" Then 

strDataRange.Sort Key1:=keyRange, Order1:=xlDescending 
Range("M2").Value = "A" 
Else 
strDataRange.Sort Key1:=keyRange, Order1:=xlAscending 
Range("M2").Value = "D" 
End If 
Application.EnableEvents = True 
End Sub 

И это, как я инициализировать значение в моей ListBox

Private Sub UserForm_Initialize() 
'set ListBox properties on initialization of UserForm 
Set sht = ThisWorkbook.Worksheets("combobox_value") 
lastRow_combobox_column = sht.Cells(sht.Rows.Count, "I").End(xlUp).Row 


With ListBox1 
.ColumnCount = 4 
.ColumnWidths = "100" 
.ColumnHeads = False 
.ControlTipText = True 
End With 

'Load Worksheet Range directly to a ListBox: 
Dim var As Variant 


var = Sheets("combobox_value").Range("I2:L" & lastRow_combobox_column) 


Me.ListBox1.List = var 


End Sub 

Есть ли способ, чтобы обновить мой список? Listbox1.refresh что-то вроде этого?

Примечание: мне не нужно, чтобы закрыть мой UserForm и открыть снова, чтобы увидеть обновленный ListBox так в то время как UserForm находится в активном режиме (Open) можно непосредственно изменить значение ListBox ..

Благодарности

+0

Возможный дубликат [Повторно обновлять содержимое окна списка при сохранении пользовательского контроля] (http://stackoverflow.com/questions/8807070/repeatedly-update-contents-of-a-list-box-while-maintaining- user-control) – Trimax

+0

Я смотрю сообщение, но проблема в том, что я не буду закрывать свою Userform при обновлении своего списка ListBox –

ответ

0

Вы можете добавить процедуру обновления, а затем вызвать ее в процедуре события OnClick для кнопки. Примечание. Я не тестировал этот код, но он должен делать то, что задал ваш первоначальный вопрос.

Private Sub UserForm_Initialize() 
    'set ListBox properties on initialization of UserForm 
    Set sht = ThisWorkbook.Worksheets("combobox_value") 
    lastRow_combobox_column = sht.Cells(sht.Rows.Count, "I").End(xlUp).Row 

    With ListBox1 
     .ColumnCount = 4 
     .ColumnWidths = "100" 
     .ColumnHeads = False 
     .ControlTipText = True 
    End With 

    RefreshListbox 
End Sub 

Private Sub CommandButton1_Click()  
    Application.EnableEvents = False 

    Worksheets("combobox_value").Activate 
    Dim strDataRange As Range 
    Dim keyRange As Range 
    Set strDataRange = Range("I2:L4") 
    Set keyRange = Range("I2:I4") 

    If Range("M2").Value = "D" Then 

     strDataRange.Sort Key1:=keyRange, Order1:=xlDescending 
     Range("M2").Value = "A" 
    Else 
     strDataRange.Sort Key1:=keyRange, Order1:=xlAscending 
     Range("M2").Value = "D" 
    End If 
    Application.EnableEvents = True 
    RefreshListbox 
End Sub 

Private Sub RefreshListbox() 
    Me.ListBox1.Clear 
    'Load Worksheet Range directly to a ListBox: 
    Dim ListRange As Range 
    ListRange = Sheets("combobox_value").Range("I2:L" & lastRow_combobox_column) 
    Me.ListBox1.List = ListRange 
End Sub 
+0

У меня не было вашей исходной формы для тестирования, и я работал с Excel Interop в .Net в последнее время, поэтому я не могу вспомнить, нужно ли перерисовать форму, чтобы показать обновленный список. Если он не показывает обновления, добавьте строку в конце процедуры RefreshListBox: 'Me.Repaint' – CBRF23

+0

Я попробую это и вернусь, надеюсь, это работает –

1

Вместо использования вара и назначения данных в List от var, вы можете использовать Named Range данные в листе и присвоить свойство
ListBox1.RowSource = "Name of the Range"

Каждый раз, когда вы хотите, чтобы обновить listbox просто использовать вышеуказанное назначение в вашем коде, и оно будет работать. Если вы найдете какие-либо трудности, пожалуйста, дайте мне знать.

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