Excel VBA用户表单打印到动态列表

时间:2015-04-04 03:49:24

标签: vba excel-vba dynamic combobox userform

我正在开展一个项目,我的userform有多个comboboxescomboboxes将输出到我指定的单元格。我的问题是我希望有button根据combobox输出对项目进行排名。我希望用户能够更改combobox输入,单击排名button并按顺序更改相应的列表。如下所示,我使用了' Cells(3,2).Value = C02Combo.Value'。我知道这只会输出到第3行,但是我需要userform输出到我选择打开Userform的哪一行(列可以保持不变)。我尝试了#34; emptyrow"在下面的评论变量,但没有运气。我是VBA的初学者,如果问题没有得到正确解释,我很抱歉。

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

1 个答案:

答案 0 :(得分: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输出到我选择打开Userform的任何行”的意思。您可以使用ActiveCell.Row标识包含光标的行。

以上都假设用户表单中的代码标识了所需的行。如果您希望调用模块执行标识,则需要以下内容:

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

  emptyRow = 27

Dim emptyRow As Long声明一个模块专用的变量。如果您希望其他模块或用户表单中的subs有权访问,则需要Public

希望这有帮助。