Я использую макрос для 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 в случае, если первый созданный флажок каким-то образом принял строковое значение, и поскольку он был пустым, другие флажки не имеют никакого значения для ссылки в качестве рабочего листа.
Любая помощь будет оценена. Спасибо.