Использование OnAction для добавления макроса к каждому флажку, и работает только первый флажок - PullRequest
0 голосов
/ 08 апреля 2020

Я использую макрос для l oop через предопределенный диапазон ячеек, который затем установит флажок в указанных ячейках, связывая их с ячейкой ниже. Я использую OnAction, чтобы добавить макрос для каждого флажка, как он отмечен. При проверке он передает 3 параметра макросу: текущую строку и столбец ячейки и имя листа, на котором отмечен флажок.

Это выглядит так:

'Declares an integer named i.
Dim i As Integer

'Start of for loop which will run from the lower bound of eAndAs to the upper bound.
'For i = LBound(eAndAs) To UBound(eAndAs)
For i = LBound(legacy_Array) To UBound(legacy_Array)

    'Inserts a row at the specified location, the current row + 1 + the value of i (0 to 18 depending on which run of the loop it is currently on).
    workSource.Rows(rowPos + 1 + i).Insert

    'Sets cb as equal to the specified cell in the newly inserted row.
    Set cb = workSource.CheckBoxes.Add(Cells(rowPos + 1 + i, colPos + 1).Left, Cells(rowPos + 1 + i, colPos + 1).Top, _
    Cells(rowPos + 1 + i, colPos + 1).Width, Cells(rowPos + 1 + i, colPos + 1).Height)

    'Start of With which sets the attributes of cb.
    With cb

        'Sets the caption as the current element of eAndAs.
        '.Caption = eAndAs(i)
        .Caption = legacy_Array(i)
        'Links the checkbox with the cell directly beneath it.
        .LinkedCell = Cells(rowPos + 1 + i, colPos + 1).Address
        'Adds a macro which will be activated when it is clicked. The cell's row and column position will be passed as parameters to the macro.
        '.OnAction = "'ProcessCheckBox " & colPos + 1 & "," & rowPos + 1 + i & "'"
        .OnAction = "'ProcessCheckBox " & rowPos + 1 & "," & colPos + 1 + i & ",""" & sheetName & """'"

    'End of With.
    End With

'Starts next run of loop and increments i.
Next i
---------------------------------------------------------------------------------
'Sub to process when a checkbox has been changed.
Sub ProcessCheckBox(ByVal rowPos As Integer, ByVal colPos As Integer, ByVal sheetName As String)

'Declares a worksheet object named activeSheet.
Dim activeSheet As Worksheet
'Sets activeSheet equal to the active worksheet.
Set activeSheet = ThisWorkbook.Worksheets(sheetName)

l oop выполняется нормально, список из 20 или около того флажков находится на листе. Однако, только когда первый флажок установлен, макрос выполняется. Когда я удаляю строковую переменную и жестко кодирую лист, который я использую, макрос выполняется как надо для всех флажков.

Я не понимаю, почему это происходит. Я изменил ByVal sheetName As String на ByRef в случае, если первый созданный флажок каким-то образом принял строковое значение, и поскольку он был пустым, другие флажки не имеют никакого значения для ссылки в качестве рабочего листа.

Любая помощь будет оценена. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...