在标签条的不同标签中,我有每个标签中不同的输入值。我需要编写一个代码来获取所有这些值并做一些工作,比如点击按钮点击每个选项卡的值。
任何人都可以帮我这样做吗?在我的代码中,当我在一个选项卡的文本框中输入值时,它也会更改所有其他选项卡的值,因此无法接收每个选项卡的不同值。好吗,拜托?
答案 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