我对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并且无法找到任何可以让我这样做的东西。
有人知道如何实现这个目标吗?
或者,是否有一种我没有想到的更好的方法?
提前致谢!