excel - 如何避免组合框列表中的最后一个空字段
问题描述
我是 vba 的新手,我正在尝试创建一个表单,其中包含另一本 excel 书中的项目列表。
这是保存在另一本 Excel 书中的表格,我想在其中获取数据:
我需要我的组合框从范围(“C2”)中获取项目,该范围作为第一个项目“Petronor”,直到它找到行中的第一个空白。
我做的:
Private Sub UserForm_Initialize()
Dim archivo As Workbook
Dim i As Long
Set archivo = Workbooks.Open("C:\Users\se72497\Desktop\Departamentos.xlsx")
For i = 2 To archivo.Sheets("Hoja1").Range("C2").End(xlDown).Offset(1, 0).Row
ComboBox1.AddItem archivo.Sheets("Hoja1").Cells(i, 3).Value
Next i
archivo.Close
End Sub
1)我首先创建一个变量,其中包含我想要获取数据的文件:
Dim archivo As Workbook
Set archivo = Workbooks.Open("C:\Users\se72497\Desktop\Departamentos.xlsx")
2) 之后,使用 For Next 循环,我尝试使用代码遍历范围(“C2”)中的所有项目,直到该行中的第一个空白。我不得不说这段代码是我从我看到的另一个代码中制作的,我仍然试图理解它是如何工作的,因为我完全不确定,尽管我知道所有使用的属性。我对属性 range.row 感到困惑,因为我不知道它是如何工作的。我希望有人也可以向我解释。
Dim i As Long
For i = 2 To archivo.Sheets("Hoja1").Range("C2").End(xlDown).Offset(1, 0).Row
ComboBox1.AddItem archivo.Sheets("Hoja1").Cells(i, 3).Value
Next i
3)最后我添加了一段代码来关闭我之前打开的文件:
archivo.Close
这段代码的问题是我在组合框的最后一个字段中得到一个空白,如下所示:
请帮我解决这个问题,我很乐意听到对代码的改进。
解决方案
从工作表底部向上而不是向下工作总是更好(特别是如果您在 C2 之后什么都没有;您的 Offset 也在最后一个空白单元格中),您可以通过使用避免循环List
:
Private Sub UserForm_Initialize()
With Sheets("Sheet1")
ComboBox1.List = Range("C2", .Range("C" & Rows.Count).End(xlUp)).Value
End With
End Sub
推荐阅读
- r - 在R中排列列数据
- jquery - Ajax 动态选择框 cakephp 不起作用
- reactjs - React native - 如何动态设置容器或文本输入,对所有设备都响应
- ios - 如何在 Swift 中的 Collection View 和 Cells 中设置约束
- angular - Angular Flatpickr 将最后选择的日期绑定到模型而不是当前选择的日期
- typescript - 为侦听器变量添加类型 react-native typescript
- c++ - std::find 使用用户定义的结构
- sql-server - 计算 SQL Server 中行中重复值的数量
- javascript - 如何在网页上使用 $ 符号计算 2 个值的百分比
- c++11 - 具有 is_same type_trait 的 C++ 模板函数不适用于类型 T=std::string