首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VBA >

VBA动态增添事件

2012-12-23 
VBA动态添加事件我想做一个九宫格,每个单元格都是由Label动态生成,我想给Label添加鼠标事件,可写完了以后

VBA动态添加事件
我想做一个九宫格,每个单元格都是由Label动态生成,我想给Label添加鼠标事件,可写完了以后发现只有最后一个单元格有事件,求教各位高手怎么搞定?
定义事件的类


Private WithEvents m_Cell As MSForms.Label
Private m_Form As myframe

Public Sub AddCell(ByVal frmLayout As myframe, ByVal cell As MSForms.Label)
    Set m_Cell = cell
    Set m_Form = frmLayout
End Sub

Private Sub m_Cell_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    m_Form.CellMouseDown m_Cell, Button, Shift, X, Y
End Sub

窗体代码

Private myCells As Collection

Public Sub UserForm_Initialize()
    SetRoomsLayout
End Sub

Private Sub SetRoomsLayout()
    Set myCells = New Collection
    Dim vLeft As Integer, vTop As Integer, tLeft As Integer, tTop As Integer
    Dim i As Integer, j As Integer, key As String
    tLeft = (myframe.Width - 50 * 3) / 2
    tTop = (myframe.Height - 50 * 3) / 2
    For i = 0 To 2
        For j = 0 To 2
            key = i * 100 + j
            vLeft = 0
            vTop = 0
            Dim lblFix As Label
            Set lblFix = myframe.Controls.Add(ProgID_Label, "lblFix_" & key, True)
            If (i <> 0) Then
                vLeft = 50 * i
            End If
            If (j <> 0) Then
                vTop = 50 * j
            End If
            With lblFix
                .Height = 50
                .Width = 50
                .Left = vLeft + tLeft
                .Top = vTop + tTop
                .TextAlign = fmTextAlignCenter
                .BackStyle = fmBackStyleOpaque


                .BorderStyle = fmBorderStyleSingle
                .SpecialEffect = fmSpecialEffectFlat
            End With
            Dim cell As New clsCell
            cell.AddCell vForm, lblFix
            vForm.AddCell key, cell
        Next
    Next
End Sub

Public Sub AddCell(ByVal vKey As String, ByVal vCell As clsCell)
    myCells.Add vCell, vKey
End Sub

Public Sub CellMouseDown(ByVal cell As MSForms.Label, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    MsgBox X
End Sub


[最优解释]
给你贴段 动态添加 Checkbox及事件的代码。


        MyCodeLine(3) = "End Sub"
        For i = 1 To 3
            '2?è????t′ú??
            ThisWorkbook.VBProject.VBComponents(Me.CodeName).CodeModule.InsertLines i, MyCodeLine(i)
        Next
    End If
    Application.ScreenUpdating = True
End Sub



[其他解释]
补充一下

cell.AddCell vForm, lblFix
vForm.AddCell key, cell

这两句中的vForm就是myframe
[其他解释]
谢谢你的回答,但你贴的这段根本就没用
我知道我的问题在哪了,我在clsCell里定义了单元格的事件
调用AddCell来设置每个单元格,同时绑定事件
但我的这个类是在方法中声明的局部变量,所以我循环结束之后只绑定了最后一个单元格的事件
Dim cell As New clsCell
就是这句,我定义成全局变量就好了

版主不给力啊……
[其他解释]
抱歉没帮到你。


[其他解释]
我又看了一遍你贴的代码,其实也是一种添加事件的方法
希望各位回帖的能够认真看一下再回帖,这样也许会解决很多问题

热点排行