如何从VBA中的tabstrip控件获取值?

时间:2018-06-09 09:45:11

标签: vba

在标签条的不同标签中,我有每个标签中不同的输入值。我需要编写一个代码来获取所有这些值并做一些工作,比如点击按钮点击每个选项卡的值。

任何人都可以帮我这样做吗?在我的代码中,当我在一个选项卡的文本框中输入值时,它也会更改所有其他选项卡的值,因此无法接收每个选项卡的不同值。好吗,拜托?

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

1 个答案:

答案 0 :(得分:0)

多页vs Tabstrips


多页是具有“页面”的对象。每个页面都可以保存自己的控件集合,然后可以直接或通过包含的页面对象对其进行引用。

标签栏是带有“标签”的对象。与“页面”对象不同,选项卡没有它自己的控件。相反,只有 原始控件对所有“标签”都可见。

程序差异

由于多页每页都有一组不同的控件,因此几乎不需要内务处理。页面的选择会影响哪些控件可见,并且控件会自动保留分配给它们的值(按预期方式)。

对于Tabstrip,由于只有一组 initial 控件,因此代码中需要进行大量整理工作。选项卡的选择不会对控件中的值产生任何自动影响。相反,如果控件根本不在选项卡条中,则它们将充当


违规解决方案


设置一个变量(数组,集合,字典),该变量可用于保存控件的各种值。然后,在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