2015-04-04 2 views
0

Я работаю над проектом, где у меня есть userform с несколькими comboboxes. comboboxes будет выводиться в указанную ячейку. Моя проблема заключается в том, что я хочу иметь button, который оценивает проекты на основе вывода combobox. Я хочу, чтобы пользователь имел возможность изменить вход combobox, щелкните ранг button и измените соответствующий список. Как вы можете видеть ниже, я использовал «Ячейки (3, 2) .Value = C02Combo.Value». Я знаю, что это будет выводиться только в строку 3, но мне потребуется пользовательская форма для вывода в зависимости от выбранной мной строки, чтобы открыть Userform (столбцы могут оставаться неизменными). Я попробовал несколько вещей с переменной «пустота» в комментариях ниже, но не повезло. Я начинаю VBA, извините, если вопрос не объясняется должным образом.Excel VBA Userform print to dynamic list

Private Sub enterData_Click()

'Dim emptyRow As Long 
'Make Sheet1 active 
'Model.Activate 
'Determine emptyRow 
'emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 

'Code to write form data to spreadsheet here 
Cells(3, 2).Value = C02Combo.Value 
Cells(3, 3).Value = AdminCombo.Value 
Cells(3, 4).Value = FacultyCombo.Value 
Cells(3, 5).Value = ResearchCombo.Value 
Cells(3, 6).Value = EducationCombo.Value 
Cells(3, 7).Value = CommunityCombo.Value 
Cells(3, 8).Value = InnovationCombo.Value 
Cells(3, 9).Value = CostCombo.Value 
Cells(3, 10).Value = PaybackCombo.Value 
Cells(3, 11).Value = CostPerCutCombo.Value 

Unload Me 

End Sub

ответ

0

Вы не говорите явно, что это неправильно, поэтому я попытался охватить все основания.

WorksheetFunction.CountA(Range("A:A")) подсчитывает количество непустых ячеек в диапазоне A1:An, где An является самой низкой ячейкой со значением. Если в этом диапазоне есть пустые ячейки, вы не получите результат, который вы ищете.

Excel предлагает множество методов для поиска последней строки или столбца; ни одна из которых не работает в любой ситуации.

Find является наиболее широко применимы:

With Sheets("xxxx") 
    rowFinal = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row 
    colFinal = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column 
    End With 

Если данные в рабочем листе «XXXX» имеет прямоугольную форму, Cells(rowFinal, colFinal) будет снизу, справа ячейки со значением. Если данные являются нерегулярными, Cells(rowFinal, colFinal) может быть пустым, но под ним не будет значения, а не справа от него.

Наиболее распространенный метод, судя с этого сайта, является:

With Sheets("xxxx") 
    rowAFinal = .Cells(Rows.Count, “A”).End(xlUp).Row 
    End With 

Это VBA эквивалент, поместив курсор в нижнюю ячейку столбца A и нажав Ctrl + UpArrow. Существуют осложнения, если в нижней части столбца A есть значения, но обычно это даст последнюю использованную строку в столбце A.

Я не уверен, что «мне понадобится пользовательская форма для вывода в зависимости от того, какая строка я выбрал для открытия Userform ". Вы можете идентифицировать строку, содержащую курсор, с помощью ActiveCell.Row.

Выше всего предполагаем, что код в пользовательской форме определяет требуемую строку. Если вы хотите, вызывающий модуль для выполнения идентификации вам нужно что-то вроде:

Public emptyRow As Long ‘ This must be outside all subs and functions 

    emptyRow = 27 

Dim emptyRow As Long объявляет переменную, которая является частной к модулю. Public требуется, если вы хотите, чтобы в других модулях или в пользовательской форме были доступны доступ.

Надеюсь, это поможет.