Access窗体打开时如何隐藏Tab Control选项卡控件?
Access选项卡页初始隐藏+复选框联动方案
报错核心原因
- 直接隐藏整个Tab Control后复选框点击无法显示页:原有复选框事件仅修改了单个选项卡页的可见属性,未同步控制Tab容器本身的显示状态。
- 隐藏单页报错误2156:Access不允许隐藏当前持有输入焦点的选项卡页,隐藏前将焦点移到Tab外的控件即可规避。
实现步骤
- 先确认你的Tab Control容器本身的控件名称(点击Tab的边框选中整个容器,在属性表的「其他」选项卡就能看到控件名,替换后续代码里的
TabMain占位符即可)。 - 替换/新增以下窗体事件代码:
窗体初始化(Form_Current)代码
在窗体打开、切换记录时执行,先切走焦点再隐藏所有选项卡页,同时同步复选框的初始状态:
Private Sub Form_Current() ' 先将焦点移到Tab外的复选框控件,从根源规避2156焦点错误 Me.Type_C.SetFocus ' 初始状态下隐藏所有选项卡页 Me.Section_III__Cybersecurity.Visible = False Me.Section_IV__Data_Security.Visible = False Me.Section_V__ICT_Outage.Visible = False Me.Section_VI__Loss_of_Government_Issue_Equipment.Visible = False ' 匹配复选框当前值,自动显示已勾选项对应的页 Call Type_C_Click Call Type_D_Click Call Type_I_Click Call Type_G_Click End Sub
修改后的复选框点击事件
原有事件基础上增加焦点切换逻辑,同时自动控制Tab容器本身的显示/隐藏:全不选时隐藏整个Tab,有任意勾选时自动显示Tab容器。
Private Sub Type_C_Click() Me.Type_C.SetFocus Me.Section_III__Cybersecurity.Visible = (Me.Type_C = vbTrue) ' 同步控制Tab容器可见性 Me.TabMain.Visible = (Me.Type_C Or Me.Type_D Or Me.Type_I Or Me.Type_G) End Sub Private Sub Type_D_Click() Me.Type_D.SetFocus Me.Section_IV__Data_Security.Visible = (Me.Type_D = vbTrue) Me.TabMain.Visible = (Me.Type_C Or Me.Type_D Or Me.Type_I Or Me.Type_G) End Sub Private Sub Type_I_Click() Me.Type_I.SetFocus Me.Section_V__ICT_Outage.Visible = (Me.Type_I = vbTrue) Me.TabMain.Visible = (Me.Type_C Or Me.Type_D Or Me.Type_I Or Me.Type_G) End Sub Private Sub Type_G_Click() Me.Type_G.SetFocus Me.Section_VI__Loss_of_Government_Issue_Equipment.Visible = (Me.Type_G = vbTrue) Me.TabMain.Visible = (Me.Type_C Or Me.Type_D Or Me.Type_I Or Me.Type_G) End Sub
可选调整
- 如果不需要全不选时隐藏整个Tab容器,只需要把每个复选框事件里最后一行
Me.TabMain.Visible = ...的代码删掉即可。 - 不要在设计视图里提前把选项卡页的Visible属性设为否,否则后续代码修改可见性时容易触发其他焦点类错误,所有显示隐藏控制全用VBA在运行时处理即可。
内容的提问来源于stack exchange,提问作者scoosch
相关产品推荐
相关产品推荐

