Я создал кроссворд с помощью командных кнопок в VBA под userform. Теперь я хотел выделить командные кнопки, когда пользователь нажимает на них. Пожалуйста помочь
Когда пользователь идентифицирует слово в кроссворде,он должен выделить его.
Однако я не могу выделить командную кнопку при нажатии пользователем.
Следующий код я использовал для создания сетки командных кнопок 10 x 10.
Private Sub cmd_Click() FrmCross.Frame1.Controls(cnt).BackColor = RGB(0, 0, 255) End Sub Private Sub CmdReset_Click() ' for repeat crossword FrmCross.Frame1.Controls.Clear CmdStart.Enabled = True End Sub Private Sub CmdStart_Click() 'declare variable Dim Loop1, Loop2, ButTop, ButLeft As Integer Dim cmdbut As MSForms.CommandButton Application.ScreenUpdating = False Sheet1.Range("a1").Select ButTop = 20 ButLeft = 20 cnt = 0 ' Display the list of words listbox1.RowSource = "Sheet2!A2:A10" ' Create 10* 10 Grid commandbox For Loop1 = 1 To 10 For Loop2 = 1 To 10 FrmCross.Frame1.Controls.Add ("Forms.CommandButton.1"), cnt, True FrmCross.Frame1.Controls(cnt).Top = ButTop FrmCross.Frame1.Controls(cnt).Left = ButLeft FrmCross.Frame1.Controls(cnt).Height = 25 FrmCross.Frame1.Controls(cnt).Width = 30 FrmCross.Frame1.Controls(cnt).Caption = ActiveCell.Offset(Loop2 - 1, Loop1 - 1).Value ButTop = ButTop + 25 cnt = cnt + 1 Next Loop2 ButLeft = ButLeft + 30 ButTop = 20 Next Loop1 CmdStart.Enabled = False Application.ScreenUpdating = True End Sub
Применена следующая логика выделения командных кнопок
Private Sub UserForm_Activate() Dim Buttons() As New BtnClass Dim ButtonCount As Long Dim ctl As Control ' Create the Button objects ButtonCount = 0 For Each ctl In Me.Controls If TypeName(ctl) = cnt Then 'Skip the OK Button If ctl.Name <> "cmdStart" Or ctl.Name <> "cmdReset" Or ctl.Name <> "cmdCheck" Then ButtonCount = ButtonCount + 1 ReDim Preserve Buttons(1 To ButtonCount) Set Buttons(ButtonCount).ButtonGroup = ctl End If End If Next ctl End Sub Public WithEvents ButtonGroup As MSForms.CommandButton Private Sub ButtonGroup_Click() ButtonGroup.Name.BackColor = vbGreen End Sub
Maciej Los
Вы пытались отладить программу? На первый взгляд кажется, что все в порядке. Я бы заменил UserForm_Activate
событие с USerForm_Initialize
.