暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实现列表框数据拖放之窗体及模块实现过程

VBA语言専攻 2022-08-01
135
分享成果,随喜正能量】冰冻三尺,非一日之寒. 忍一句,息一怒;饶一着,退一步。 抽薪止沸,剪草除根. 机不可失,时不再来。功高成怨府,权盛是危机。。
《VBA高级应用30例》,是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中分发VBA程序,写好的程序可以升级。本套教程共三册三十个专题,今日内容是第2个专题“在列表框内及列表框间实现数据拖放”,今日讲解:实现列表框数据拖放之窗体及模块实现过程

应用在列表框内及列表框间实现数据拖放

利用VBA编程时候,我们往往会利用列表框进行选择处理,最为方便的操作是拖放数据,但是在VBA中实现拖放,是比较困难的任务。为了便于在UserForm上的两个列表框之间完成拖放操作,我专门利用这个专题给大家讲解一个利用类模块的方案,在需要的时候,只需将其插入到VBA项目中即可。这样做之后,可以大大方便我们自己的工作。
【接上讲】

窗体及模块的实现过程

这部分我们要完成窗体及其模块的构建,这个构建过程中我们要完成窗体的初始化及类的实例化。
1) 对于是否允许列表框内移动的设置,这是通过DragWithin1,和DragWithin2参数的设置来完成的,这两个参数的值通过两个CheckBox的点击实现,代码如下:
Private Sub CheckBox1_Click()
    mcDragDrop.DragWithin1 = Me.CheckBox1.Value
End Sub

Private Sub CheckBox2_Click()
    mcDragDrop.DragWithin2 = Me.CheckBox2.Value
End Sub

代码的截图:

2)窗体的初始化及实例化类。在窗体的初始化过程中我们要完成列表框的初始化赋值及类的实例化过程。我们看下面的代码。

'窗体的初始化
Private Sub UserForm_Initialize()
    Dim i As Long
    '向列表框中添加数据
    With ThisWorkbook.Sheets("sheet1")
        For i = 1 To Int(.Range("a1").End(xlDown).Row 2)
            Me.ListBox1.AddItem "Item " & .Range("a" & i)
        Next
        For i = Int(.Range("a1").End(xlDown).Row 2) + 1 To .Range("a1").End(xlDown).Row
            Me.ListBox2.AddItem "Item " & .Range("a" & i)
        Next
    End With
    '实例化类
    Set mcDragDrop = New clsDragDrop
    With mcDragDrop
        '类对象列表框与窗体列表框关联
        Set mcDragDrop.ListBox1 = Me.ListBox1
        Set mcDragDrop.ListBox2 = Me.ListBox2
    End With
    '在两个列表框中启用拖放
    Me.CheckBox1.Value = True
    Me.CheckBox2.Value = True
    '列表框中允许多选
    Me.ListBox1.MultiSelect = fmMultiSelectMulti
    Me.ListBox2.MultiSelect = fmMultiSelectMulti
End Sub

代码的截图:



[待续]




我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
 

分享成果,随喜正能量】 至长反短,至短反长。遍地是黄金,缺少有心人. 叶自根生,相自心生。傲不可长,欲不可纵. 江山易改,本性难移。

文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论