Как получить значения из элементов управления на вкладке в VBA? - PullRequest
0 голосов
/ 09 июня 2018

В разных вкладках вкладки у меня есть входные значения, которые различны в каждой вкладке.Мне нужно написать код, который принимает все эти значения и выполняет некоторую работу, например, суммирует значения каждой вкладки при нажатии кнопки.

Может кто-нибудь помочь мне сделать это?В моем коде, когда я вводю значение в текстовое поле одной вкладки, оно также меняет значение всех других вкладок и, следовательно, не может получать разные значения каждой вкладки.Любая идея, пожалуйста?

Please click here to check what I am trying to do and what suppressing me to do this

1 Ответ

0 голосов
/ 08 сентября 2018

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

Sample Userform with tabstrip with two tabs and one textbox

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...