Excel VBA: циклическое переключение флажков по имени, а также диапазонов с аналогичными именами - PullRequest
0 голосов
/ 19 июня 2020

В моей пользовательской форме есть следующее:

CheckBox11 CheckBox12 CheckBox13 CheckBox14 CheckBox15
CheckBox21 CheckBox22 CheckBox23 CheckBox24 CheckBox25

Кроме того, в моем Excel у меня есть следующие именованные диапазоны:

range11 range12 range13 range14 range15
range21 range22 range23 range24 range25

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

У меня есть вложенные For l oop, i = 1 to 2 и j = 1 to 5

, а затем внутри другой длинной переменной nm = i*10+j

теперь я хочу сослаться на CheckBox и Range с помощью nm.

Любая другая альтернатива также приветствуется.

Заранее спасибо.

1 Ответ

0 голосов
/ 19 июня 2020

Может быть, что-то вроде этого?

Sub Test()
For Each objControl In ActiveSheet.OLEObjects
If TypeName(objControl.Object) = "CheckBox" And objControl.Object = True Then
rngName = Replace(objControl.Name, "CheckBox", "range")
Range(rngName).Select
MsgBox rngName & " selected"
End If
Next
End Sub

Подпрограмма будет выбирать именованный диапазон для каждого выбранного CheckBox (значение True). Но это если флажок является ActiveX, а именованный диапазон находится на том же листе, где находятся флажки.

В любом случае вы можете просто изменить строку Range(rngName).Select .... MsgBox rngName & " selected" на любой процесс, который вы хотите выполнить с соответствующим именованным ассортимент.

Ниже, если флажок установлен в форме пользователя:

Private Sub CommandButton1_Click()
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" And ctrl = True Then
rngName = Replace(ctrl.Name, "CheckBox", "range")
Range(rngName).Select
MsgBox rngName & " selected"
End If
Next
End Sub
...