Я пытаюсь создать переменную для флажков на моем листе, чтобы я мог отложить большее число из них в цикле.Ссылка на элемент управления Active-x с переменной в цикле
Это выглядит следующим образом: The worksheet
Цель состоит в том, чтобы сделать график (синий фон) в состоянии выделить имена, выбранные с флажками (слева в зеленом списке).
Чтобы сделать это, я хотел бы, чтобы цикл прошел через все эти флажки и посмотрел, верны ли они для соответствующего имени в той же строке. Я получил это далеко:
Sub Test_ReplaceWithArray()
'State var
Dim Names(54) As String
Dim ChkBx As String
Dim Personal As Range
Dim n, m, i, j, ChkNr, numOfEmployees, numOfWeeks As Integer
'Set var
Set Personal = Range("A3:A55")
numOfEmployees = Application.WorksheetFunction.CountA(Personal)
numOfWeeks = Worksheets("Schemaläggning").numOfWeeksBox.Value
n = 1
m = 3
i = 3
j = 3
ChkNr = 1
ChkBx = ("CheckBox" & ChkNr)
'Fill array
Do Until n > numOfEmployees
Cells(i, 1).Select
If IsEmpty(ActiveCell) = False _
And ChkBx = True Then
Names(n) = ActiveCell.Value
i = i + 1
n = n + 1
ChkNr = ChkNr + 1
ElseIf IsEmpty(ActiveCell) = True Then
i = i + 1
n = n + 1
ChkNr = ChkNr + 1
End If
Loop
'Make Bold or Grey if in array
Do Until m > numOfWeeks + 2
Cells(m, j).Select
If j <= 7 And IsInArray(ActiveCell.Value, Names) = True Then
Selection.Font.Bold = True
j = j + 1
ElseIf j <= 7 And IsInArray(ActiveCell.Value, Names) = False Then
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.349986266670736
End With
j = j + 1
ElseIf j = 8 Then
j = 3
m = m + 1
End If
Loop
End Sub
Дело в том, чтобы иметь название на строке (в зеленом списке) поместить в массив, а затем посмотреть на каждое имя в расписании. Если имя в ячейке расписания содержится внутри массива, имя будет выделено, но если оно не будет, оно станет серым. Я уже сделал функцию сравнения, чтобы узнать, содержатся ли имена в массиве, который работает (протестировал его, прежде чем продолжить ссылки на флажки).
Но я получаю сообщение об ошибке выполнения 13 по адресу:
If IsEmpty(ActiveCell) = False _
And ChkBx = True Then
я определенно подозреваю, что я не знаю, как ссылаться на элемент управления должным образом, но я не знаю, что делать. Любая помощь приветствуется.
Привет спасибо за ответ. Я думаю, что мне нужен только способ привязать флажок внутри модуля. Одна из проблем заключается в том, что если я собираюсь пройти через все элементы управления, мне нужно пройти через множество элементов управления, которые мне не нужны. И мне нужно связать элемент управления с листом excel, чтобы он не работал с ссылкой на пользовательскую форму, которую я боюсь. Так что это действительно не работало для меня, если я ничего не пропустил. Не могли бы вы сделать что-то подобное? Dim ChkBx As MSForms.CheckBox Рабочие листы ("Schemaläggning"). ChkBx (n) .Value = True –
@HampusKjellstrand см. В редакторе –