Как правильно ссылаться на элементы управления
Вы можете ссылаться на элементы управления
- 1a) напрямую по имени и использовать IntelliSense (например,
Me.Test
), - 1b) косвенно через коллекцию
Controls
или - 2) косвенно через установку объекта прямо или косвенно (например,
Set ctl = Me.Controls(tempname)
)
Примечание что частица Me
всегда ссылается на текущий экземпляр пользовательской формы (не на свое имя) и может / должна использоваться в модуле кода пользовательской формы,Например, вы можете ссылаться на Me.Controls
или на данный элемент в коллекции элементов управления, например, Me.Controls(tempname)
.- неправильно использовать , однако ссылаться на экземпляр пользовательской формы по умолчанию (например, frmtst
) из кода этой формы. Кроме того, невозможно сослаться на оба в одном и том же утверждении, например Me.frmtst(tempname)
.
Рекомендуемое чтение для более глубокого понимания : UserForm1.Show?
1a) Отсутствует свойство .Size
при назначении теста для .Font
' Direct referencing a control of the current Userform instance - missing .Size property
Me.Test.Font.Size = 14 ' instead of: Me.test.Font = 14
1b) Неправильная вставка свойства .Value
до сбояСвойство .Font
' Indirect referencing a control of the current Userform instance - bad .Value prop, .Font prop without .Size
Me.Controls(tempname).Font.Size = 14 ' instead of: Me.Controls(tempname).Value.Font = 14
2) Ссылка на объект
Если, однако, вы предпочитаете устанавливать объект в память, строка кода, как показано на рисункеcase [1b] является избыточным, и вы должны решить придерживаться выбранного метода.
Dim ctl As MsForms.TextBox ' declare MSForms object (e.g. TextBox, or Object)
Set ctl = Me.Controls(tempname) ' instead of: Set ctl = Me.frmtst(tempname)
ctl.Font.Size = 14 ' instead of: .Font = 14
Дополнительные замечания
Всегда используйте Option Explicit
для проверки правильного и полного объявления всех переменных (было бы неплохо включить некоторые из них в ваш код).
Кстати, вы на самом деле вычислили ширину элемента управления по экспоненте, т.е. ^ 0.8) * 10) + 25
?