Excel VBA:控件有两个名称(是:标签点击事件失败)

时间:2014-09-04 16:58:48

标签: excel vba excel-vba controls

我的电子表格包含动态创建和删除的标签。我为所有人都有点击事件(非动态;事件代码总是在那里)。这些是工作表本身的ActiveX标签,而不是UserForm。

间歇性地,将创建一个不响应点击的标签。我发现它是因为有些标签不会识别我给他们的名字。换句话说,点击lblLong1会触发 Label1_Click ,而不是 lblLong1_Click

我记得在某个地方读到控件实际上有两个名称。起初他们都是一样的。看起来有时候,我的宏会重新分配其中一个名字,剩下的时间就是另一个名字。

有人能教育我两个控件名称吗?我可能无法找到我读过的地方。

如果无法修复,我可以提出解决方法吗?

这是基于前三个控件(始终存在)创建标签的代码。只有" lblLong"那些应该是可点击的:

Sub ControlsCreate()

Dim chkBox As Object, lblShort As Object, lblLong As Object
Dim chkTemp As Object, shortTemp As Object, longTemp As Object
Dim i, NumEntries, NumLines

With Sheets("input view")
    Set chkBox = .Shapes("chkBox1")
    Set lblShort = .Shapes("lblShort1")
    Set lblLong = .Shapes("lblLong1")

    chkBox.Top = [narr].Top
    With lblShort
        .Visible = True 
        .Top = chkBox.Top
        .Left = [d1].Left + 10
        .Width = 107
    End With
    With lblLong
        .Top = lblShort.Top
        .Visible = lblShort.Visible
        .Left = lblShort.Left + lblShort.Width + 5
        .Width = 371
    End With

    If LCase([narrreco].Value) = "type" Then
        NumEntries = [tblrecotype].Rows.Count
    Else
        NumEntries = CutOffLeft([narrreco].Value, 4)
    End If


    For i = 2 To NumEntries
        Set shortTemp = .OLEObjects.Add(ClassType:="Forms.Label.1", Link:=False, _
            DisplayAsIcon:=False, Left:=lblShort.Left, Top:=chkBox.Top + 20 * i, Width:= _
            lblShort.Width, Height:=lblShort.Height)

        Set longTemp = .OLEObjects.Add(ClassType:="Forms.Label.1", Link:=False, _
            DisplayAsIcon:=False, Left:=lblLong.Left, Top:=chkBox.Top + 20 * i, _
            Width:=lblLong.Width, Height:=lblShort.Height)
        shortTemp.Name = "lblShort" & i
        longTemp.Name = "lblLong" & i
     Next i
 End With
End Sub

以下是标签的部分点击事件:

Private Sub lblLong1_Click()
    Call LabelstoFields(Me.lblLong1.Caption)
End Sub

Private Sub lblLong2_Click()
    Call LabelstoFields(Me.lblLong2.Caption)
End Sub

Private Sub lblLong3_Click()
    Call LabelstoFields(Me.lblLong3.Caption)
End Sub
(Etc.)

0 个答案:

没有答案