Excel VBA передает аргументы через Onaction with CheckBoxes - PullRequest
0 голосов
/ 15 октября 2018

Так что я уже давно занимаюсь этим, и я просмотрел множество веб-сайтов и форумов, но, увы, не могу найти решение своей проблемы.

Я пытаюсь добавить аргументы в .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

1 Ответ

0 голосов
/ 15 октября 2018

Я не думаю, что вы можете передать объект через OnAction.OnAction -свойство - это строка, содержащая имя Sub (плюс параметр).

Вместо этого вы можете попытаться передать имя checkBox.Обратите внимание, что вы должны заключить имя флажка в двойные кавычки, чтобы получить что-то вроде.CheckboxHandle "chk123":

 .OnAction = "'CheckboxHandle """ & .Name & """'"

И измените свою рутину действий

Public Sub CheckboxHandle(chbBoxName as string)
    dim chk as CheckBox
    Set chk = ActiveSheet.CheckBoxes(chkBoxName)
    (...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...