我正在开展一个项目,我的userform
有多个comboboxes
。 comboboxes
将输出到我指定的单元格。我的问题是我希望有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
答案 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
。
希望这有帮助。