Когда Вы жмете мышкой на контроле, он выполняет SetFocus и, очевидно, получает фокус. Таким образом мы можем вообще не пользоваться массивами, не пользоваться глобальными переменными, но поиметь общую процедуру для нескольких однотипных контролов. Весь фокус в том, что нужно теребить коллекцию Controls формы (к сожалению, разработчики не снабдили ее интерфейсом, то-ли из вредности, то-ли не успели, то-ли не вкурили).
В общем, всё еще проще. Надо RichTextBox1(i) заменить на Me.ActiveControl (если в VB есть, в VBA есть):
- Код: Выделить всё
Private Sub mnuFont_Click()
'эмулировать ошибку если нажата кнопка Cancel
cdlOpen.CancelError = True
On Error GoTo Errhandler:
'установить флаги специальных эффектов и всех шрифтов системы
cdlOpen.Flags = cdlCFEffects Or cdlCFBoth
'показать окно выбора шрифта
cdlOpen.ShowFont
'установить пользовательские параметры форматирования:
with Me.ActiveControl
.SelFontName = cdlOpen.FontName
.SelFontSize = cdlOpen.FontSize
.SelColor = cdlOpen.Color
.SelBold = cdlOpen.FontBold
.SelItalic = cdlOpen.FontItalic
.SelUnderline = cdlOpen.FontUnderline
.SelStrikeThru = cdlOpen.FontStrikethru
end with
Errhandler:
'выйти из процедуры если нажата кнопка Cancel
End Sub
Фишка в том, что процедура всяко будет вызываться над одним из ричтекстбоксов, а значит, нужные свойства у ActiveControl будут.