Multipages vs Tabstrips
Multipage - это объект со "страницами".Каждая страница может содержать свою собственную коллекцию элементов управления, на которые затем можно ссылаться либо напрямую, либо через содержащийся объект страницы.
Лента с вкладками - это объект с "вкладками".В отличие от объекта «страница», вкладка не имеет собственных элементов управления.Вместо этого есть только исходных элементов управления, видимых для всех "вкладок".
Программные различия
Поскольку многостраничный имеет другой наборэлементы управления для каждой страницы, требуется очень мало домашнего хозяйства.Выбор страницы влияет на то, какие элементы управления видимы, и элементы управления автоматически сохраняют назначенные им значения (как и ожидалось).
Для вкладки, поскольку существует только набор элементов управления initial , в коде требуется много домашнего хозяйства.Выбор вкладки не оказывает никакого автоматического влияния на значения в элементах управления.Вместо этого элементы управления действуют как , если бы их вообще не было в полосе вкладок.
Tabstrip Solution
Установите переменную (массив, коллекцию, словарь), которая может использоваться для хранения различных значений элементов управления.Затем в событии TabStrip_Change()
сохраните предыдущее значение и сбросьте элемент управления для новой вкладки (или введите значение последней сохраненной новой вкладки).
Я рекомендую добавить переменную уровня пользовательской формы Dim old_tab as Long
которую вы можете установить на текущей странице в конце события TabStrip_Change()
.(Это полезно для получения ранее заполненных значений для правильной вкладки).
Для моего примера кода я буду использовать массив.Однако, поскольку массивы не очень гибки с изменением длины, при желании можно также использовать словарь или коллекцию.
Для пользовательской формы, изображенной ниже, следующий код приводит к тому, что одиночное текстовое поле действует так, как если быдля каждой вкладки имеется другое текстовое поле.Он также сохраняет значения при каждом изменении вкладки.(Примечание: если вы затем используете сохраненные значения для расчета, не забудьте сначала обновить значение для текущей вкладки.)
Option Explicit
Dim old_tab As Long
Dim textValues As Variant
Private Sub TabStrip1_Change()
textValues(old_tab) = TextBox1.Value 'Saves the old value
TextBox1.Text = textValues(TabStrip1.Value) 'Updates value to reflect tab change
old_tab = TabStrip1.Value 'updates tab # variable
End Sub
Private Sub UserForm_Initialize()
ReDim textValues(0 To TabStrip1.Tabs.Count - 1) 'tabs are zero-based, so count is always one more than the maximum tab value
old_tab = TabStrip1.Value 'Ensures that the first value will be saved to correct location at the tab change
End Sub