2015-03-20 3 views
0

Я начинающий программист и делаю макрос VBA для своего старшего проекта capstone. Я пытаюсь заполнить список с данными в столбце «A». Он должен быть динамическим, поскольку пользователь будет редактировать данные. Я знаю его простую для опытного кодировщика, но у меня проблемы с синтаксисом. Любая помощь очень ценится!У вас возникли проблемы с синтаксисом для заполнения списка

Private Sub UserForm_Initialize() 

Dim LastRowControllers, LastRowBrakes As Integer 
Dim Brakes, Controllers As Range 

With Worksheets("ControllersInventory") 
LastRowControllers = .Cells(.Rows.Count, "A").End(xlUp).Row 
End With 

With Worksheets("BrakesInventory") 
LastRowBrakes = .Cells(.Rows.Count, "A").End(xlUp).Row 
End With 

Set Controllers = Range(Cells(1, 1), Cells(LastRowControllers, 1)) 
Set Brakes = Range(Cells(1, 1), Cells(LastRowBrakes, 1)) 

'Populate Controller_List 
Worksheets("ControllerInventory").Select 
With Controller_List 
.RowSource "= Controllers" 
End With 

'Populate Brake_List 
Worksheets("BrakeInventory").Select 

With Brake_List 
    .RowSource "= Brakes" 
End With 
End Sub 

Я нашел альтернативный способ для заполнения ListBoxes, однако мой синтаксис не так, и я хотел бы использовать соответствующие методы кодирования с использованием заявленных диапазонов.

Brake_List.RowSource = Worksheets("BrakeInventory").Range(Cells(1, 1), Cells(LastRowControllers, 1)).Address 
+0

Попробуйте изменить '' .address' в .value' – Davesexcel

ответ

0

Например:

Dim Rws As Long, Rng As Range 
Rws = Cells(Rows.Count, "A").End(xlUp).Row 
Set Rng = Range(Cells(1, 1), Cells(Rws, 1)) 
ListBox1.List = Rng.Value 
+0

это работает, но не будет динамичным –

+0

@ Patrick Lepelletier- Как вы оцениваете диапазон не динамический? – Davesexcel

+0

'listbox1.list' заполняет его так же, как заполняет массив, чтобы динамическое использование' listbox1.rowsource'. Прежде чем задать дополнительные вопросы, откройте VBE и попробуйте ... –

0

Распределить с .Select не купить вам что-нибудь

.RowSource ожидает диапазона. Вы пытаетесь присвоить ему строковое значение (обозначенное символом «»), но вы не так далеко, потому что знак = находится в кавычках.

With Controller_List 
    .RowSource = Controllers 
End With 

'Populate Brake_List 
With Brake_List 
.RowSource = Brakes 
End With 
+0

это вызывает ошибку типа mistmatch и в любом случае будет работать только для диапазонов в активной таблице, вам нужно ссылаться на листы! (см. мой ответ) –

0

Я вижу, вы часто забывают ссылаться на лист при использовании Range или Cells.

Option Explicit 


Private Sub UserForm_Initialize() 

'first error when declaring variables, you declared some as variant 
Dim LastRowControllers as Long, LastRowBrakes As Long 'rows can go more than 65535 (integer limit) , so i use Long 
Dim Brakes as Range, Controllers As Range 

With Worksheets("ControllersInventory") 
    LastRowControllers = .Cells(.Rows.Count, "A").End(xlUp).Row 
    Set Controllers = .Range(.Cells(1, 1), .Cells(LastRowControllers, 1)) 
End With 

With Worksheets("BrakesInventory") 
    LastRowBrakes = .Cells(.Rows.Count, "A").End(xlUp).Row 
    Set Brakes = .Range(.Cells(1, 1), .Cells(LastRowBrakes, 1)) 
End With 

'Populate Controller_List 

With Controller_List 
    '.List= Controllers.value 'works but not dynamic 
    .Rowsource = Controllers.Parent.Name & "!" & Controllers.Address 
End With 

'Populate Brake_List 
With Brake_List 
    '.List = Brakes.value 'works but not dynamic 
    .Rowsource = Brakes.Parent.Name & "!" & Brakes.Address ' example = "Sheet1!$A$1:$A$10" 
End With 

Set Brakes = Nothing 
Set Controllers = Nothing 

End Sub 

Также обратите внимание, что если данные должны быть динамическими, я думаю, что UserForm должен быть вызван таким образом:

Userform1.Show False 
Смежные вопросы