使用 VBA /MS Access 从 TabControl 中删除选项卡

问题描述 投票:0回答:1

使用此代码,我尝试使用我的代码从主“选项卡”中删除选项卡,但我不知何故缺少正确的方法

`Private Sub DeleteAlltabs(frm As Object)

Dim tabCtrl As TabControl

    Set tabCtrl = frm.Controls("Tab")
    
    If Not tabCtrl Is Nothing Then
        For i = tabCtrl.Pages.count - 1 To 0 Step -1
            tabCtrl.Pages(i).Remove
        Next i

    End If
End Sub`

我什至尝试了一段时间,代码略有不同,但看起来如此简单的东西不起作用:

If Not tabCtrl Is Nothing Then
        While tabCtrl.Pages.count > 0            
            tabCtrl.Pages.Remove tabCtrl.Pages(tabCtrl.Pages.count - 1)
        Wend
End If

我的组件是:

  1. Visual Basic 应用程序
  2. Microsoft Access 16.0 对象库
  3. OLE 自动化
  4. Microsoft Office 16.0 Access 数据库引擎对象库

我尝试了这两个代码,并希望它删除选项卡,但是这两个代码都给了我一个语法错误。

vba ms-access tabcontrol
1个回答
0
投票

正如 Bilel 所解释的

tabCtrl.Pages(i)
指的是选项卡控件的
Page
集合中的一个
Pages
,并且
Page
对象没有
Remove
方法。

所以你必须使用

Pages.Remove
来代替。如果您想根据索引定位特定页面,您可以这样做:

tabCtrl.Pages.Remove i

或者如果省略索引,最后一页将被删除:

tabCtrl.Pages.Remove

我认为第二个版本简化了任务。这是我测试的代码:

Public Sub DeleteAlltabs(frm As Form)
    Dim tabCtrl As TabControl
    Dim i As Long

    Set tabCtrl = frm.Controls("TabCtl0") ' I changed the name of the tab control
    For i = 1 To tabCtrl.Pages.Count
        tabCtrl.Pages.Remove
    Next i
End Sub

另一个问题是 “仅当表单位于设计视图中时,才可以从选项卡控件的 Pages 集合中删除 Page 对象。”(请参阅 Pages.Remove 方法

因此,我在调用修改后的子例程之前在设计视图中打开了表单:

Public Sub calling_code()
    Const cstrForm As String = "Form13"
    DoCmd.OpenForm cstrForm, acDesign
    DeleteAlltabs Forms(cstrForm)
    DoCmd.Close acForm, cstrForm, acSaveYes
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.