excel - 在 Excel VBA 中合并两个相同的模块
问题描述
可以帮我合并这两个模块,以便我可以多次使用它们吗?
第一个模块:
Private Sub UserForm_Initialize()
Dim ultimaLin As Long, area As New Collection
Dim Value As Variant, temp() As Variant
On Error Resume Next
ultimaLin = Sheets("DBTemp").Range("A" & Rows.Count).End(xlUp).Row
temp = Sheets("DBTemp").Range("A2:A" & ultimaLin).Value
For Each Value In temp
If Len(Value) > 0 Then area.Add Value, CStr(Value)
Next Value
For Each Value In area
titulo_livro.AddItem Value
Next Value
Set area = Nothing
End Sub
第二个模块:
Private Sub UserForm_Initialize()
Dim ultimaLin As Long, area As New Collection
Dim Value As Variant, temp() As Variant
On Error Resume Next
ultimaLin = Sheets("DBTemp").Range("B" & Rows.Count).End(xlUp).Row
temp = Sheets("DBTemp").Range("B2:B" & ultimaLin).Value
For Each Value In temp
If Len(Value) > 0 Then area.Add Value, CStr(Value)
Next Value
For Each Value In area
autor_livro.AddItem Value
Next Value
Set area = Nothing
End Sub
如您所见,它们基本上是相同的,但在第二个中,我想在另一个范围内重现获得的结果。
谢谢!
解决方案
您可以将代码的公共部分分解为可重用的方法。
示例表单模块代码:
Private Sub UserForm_Initialize()
With ThisWorkbook.Sheets("DBTemp")
FillFromRange .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row), _
titulo_livro
End With
End Sub
在常规模块中:
Sub FillFromRange(rng As Range, ctrl As Object)
Dim v
For Each v In UniquesFromRange(rng)
ctrl.AddItem v
Next v
End Sub
Function UniquesFromRange(rng As Range)
Dim col As New Collection, data, v
data = rng.Value
For Each v In data
If Len(v) > 0 Then
On Error Resume Next
col.Add v, CStr(v)
On Error GoTo 0
End If
Next v
Set UniquesFromRange = col
End Function
推荐阅读
- typescript - 带有静态方法的打字稿通用类构造函数参数
- google-sheets - 为什么数组公式不适用于整列?
- postman - 请求url中的邮递员路径参数=
- r - 隐藏 UI 元素:当 UI 元素放置在 taglist 下时,闪亮的应用程序崩溃
- javascript - 我想做一个随机数选择器,但结果高于预期
- flutter - 如何表示
在颤振中使用typedef之类的别名作为函数? - powerbi - 编写查询 REST API 的 ODBC 驱动程序或 OleDb 提供程序
- r - 确定一个值的位置是否相对于它之前的关联发生了变化
- c - 在 .h 与 .c 文件中定义函数
- swift - 如何从已知图像路径显示图像 - SwiftUI