如何根据我单击的用户窗体的位置选择特定的标签?

时间:2018-03-27 23:29:56

标签: excel-vba vba excel

我对VBA编程很新,所以请在这里跟我说。我正在通过Excel VBA创建一个数独游戏程序,我正在UserForm上创建游戏。我使用标签作为电路板上的单个方格和字幕来容纳各个数字。

当我点击标签时,它会将所有标签恢复为原始颜色,然后它会更改我单击的标签的背景颜色,并循环显示所有81个标签,将具有相同标题的任何标签更改为相同的背景颜色。此代码无任何问题:

Private Sub Label1_Click()
    Dim i As Integer
    Dim ctrlLabel As Control

    For i = 1 To 81
        Set ctrlLabel = Me.Controls("Label" & i)
        ctrlLabel.BackColor = &H8000000F
    Next i

    Label1.BackColor = &HFFFF&

    For i = 1 To 81
        Set ctrlLabel = Me.Controls("Label" & i)
        If ctrlLabel.Caption = Label1.Caption Then
            ctrlLabel.BackColor = Label1.BackColor
        End If
    Next i
End Sub

如果我使用蛮力,这就是每个后续Label代码的样子:

Private Sub Label2_Click()
    Dim i As Integer
    Dim ctrlLabel As Control

    For i = 1 To 81
        Set ctrlLabel = Me.Controls("Label" & i)
        ctrlLabel.BackColor = &H8000000F
    Next i

    Label2.BackColor = &HFFFF&

    For i = 1 To 81
        Set ctrlLabel = Me.Controls("Label" & i)
        If ctrlLabel.Caption = Label2.Caption Then
            ctrlLabel.BackColor = Label2.BackColor
        End If
    Next i

End Sub

只有四处变化:

Label2_Click()(第1行)

Label2.BackColor(第9行)

Label2.Caption(第14行)

和另一个Label2.BackColor(第15行)

可以创建81个Subs并只调整每个的代码;但是,如果可能的话,我想找到一个替代解决方案。

我想如果我可以根据我点击的UserForm上的位置选择一个标签程序,我可以用一个UserForm Sub调整所有81个标签。我正在考虑使用UserForm_Click来触发代码,该代码将搜索UserForm上的点击的XY位置,识别哪个Label,然后相应地调整该Label;但是,我一直在挖掘Excel MSDN并且无法找到任何可以让我这样做的东西。

有人知道如何实现这个目标吗?

或者,是否有一种我没有想到的更好的方法?

提前致谢!

0 个答案:

没有答案