Так что я уже давно занимаюсь этим, и я просмотрел множество веб-сайтов и форумов, но, увы, не могу найти решение своей проблемы.
Я пытаюсь добавить аргументы в .OnAction
событие для Checkbox
Итак. Например,
Dim chk as Checkbox
With chk
.name = "chk" & .TopLeftCell.Offset(0, -7).Text
.Caption = ""
.Left = cel.Left + (cel.Width / 2 - chk.Width / 2) + 7
.Top = cel.Top + (cel.Height / 2 - chk.Height / 2)
.OnAction = "CheckboxHandle(chk)"
End With
Так что, если я пытался вызвать этот саб -> Public Sub CheckboxHandle(obj As CheckBox)
Это требуетCheckBox Object
для запуска (при необходимости это может измениться на форму / объект)
ВЕЩИ, КОТОРЫЕ Я ПОПРОБОВАЛ
Изменениетип данных для объекта и формы, однако я не смог найти способ передать его через
Вариации приведенных ниже операторов
"""CheckboxHandle(chk)"""
"'CheckboxHandle" ""chk"" '"
Application.caller
, затем цикл objects
, чтобы найти object
с этим именем (это занимает слишком много времени, так как у меня более 300 флажков)
КОНТЕКСТ
В случае, если контекст помогает, я пытаюсь добавить флажок для каждой ячейки в диапазоне, а затем каждый из них вызывает один и тот же метод при нажатии.Мне нужно OnAction
, чтобы отправить Object
, поскольку я ищу TopleftCell
из Object
, чтобы изменить цвет соседних ячеек
В СЛУЧАЕ ЭТО ПОЛЕЗНО вот метод, который я хотел бы вызвать из OnAction
Event
Public Sub CheckboxHandle(obj As CheckBox)
Dim rng As Range
'Sneaky sneaky changes
Application.ScreenUpdating = False
'For Loop to go through each of the cells to the left of the check box
For Each rng In Range(obj.TopLeftCell, obj.TopLeftCell.Offset(0, -7))
With rng
'if the checkbox is checked
If obj.Value = -1 Then
.Interior.Color = RGB(202, 226, 188)
'Adds the date and the person so you know who did the edit
obj.TopLeftCell.Offset(0, 1).Value = Now & " by " & Application.username
Else
'if it isn't checked
.Interior.Pattern = xlNone
'removes the edit name and date
obj.TopLeftCell.Offset(0, 1).Value = ""
End If
End With
Next rng
'Shows all the changes at the same time
Application.ScreenUpdating = True
'Changes the value of the progress bar to represent the project completion
If obj.Value = -1 Then
ActiveSheet.Range("E1").Value = ActiveSheet.Range("E1").Value + 1 / 207
Else
ActiveSheet.Range("E1").Value = ActiveSheet.Range("E1").Value - 1 / 207
End If
End Sub
Любая помощь по этому вопросу будет высоко ценится
-Sebic0