vba - 有没有办法将 VBA 用户表单的 VB_PredeclaredId 属性更改为 False

标签 vba excel ms-word

在现已停止使用的 SO 文档网站中阅读了 VBA 中的用户表单最佳实践(归功于 Mat's Mug)(不允许发布指向 SO 文档的新链接),我认为为我的项目中的用户表单设置属性 VB_PredeclaredId = False 是个好主意。

我认为这将提供一种实用的方法来强制每次使用用户窗体的新实例而不是使用默认实例的概念。

对于类模块,可以将 VB_PredeclaredID 属性设置为 True,我预计能够执行相反的操作:导出用户表单,将属性更改为 False,然后导入修改后的版本。

遗憾的是,每当我导入修改后的用户表单时,该属性就会自动(并且令人烦恼地)恢复为 True。

VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} UserForm1 
   Caption         =   "UserForm1"
   ClientHeight    =   3165
   ClientLeft      =   45
   ClientTop       =   390
   ClientWidth     =   4710
   OleObjectBlob   =   "UserForm1.frx":0000
   StartUpPosition =   1  'CenterOwner
End
Attribute VB_Name = "UserForm1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False        ' <<<<< Keeps changing back to True
Attribute VB_Exposed = False

所以,问题是:

是否可以通过设置或其他操作强制用户窗体的 VB_PredeclaredId 属性保持 False?

[编辑:我使用的是 MS Word,希望答案同样适用于 Excel]

最佳答案

似乎适合我的需求的解决方法

该方法基于@MatsMug 的这篇文章:userform1.show

在我的用户表单中,我添加以下内容:

'@Folder("UI.Forms")

Option Explicit

Implements IView

Const ERR_MODEL As String = "This userForm requires a view model (which is not set)"

Private Type TView
    IsCancelled As Boolean
    Model As frmModel
    toDisplay As String
End Type

Private this As TView

Private Sub UserForm_Activate()
    If this.Model Is Nothing Then
        Err.Raise Number:=91, Description:=ERR_MODEL
        Unload Me
    End If
End Sub

_Activate 事件检查模型是否已设置 - 如果没有设置,则会引发错误。

最初,我尝试在 _Initialize 事件中完成此检查,但这实际上为时过早,因为在设置模型之前就初始化了表单。

关于vba - 有没有办法将 VBA 用户表单的 VB_PredeclaredId 属性更改为 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730410/

相关文章:

excel - 将 Excel 数据转换为具有固定列位置的文本文件

ios - 通过 ms-word 打开 Office 文档 :ofe on iPad

vba - 为什么 VBA 在 ActiveWorkbook.SaveAs 上创建一个文件夹

excel - 试图让一个单元格等于一个变量位置

mysql - Excel VBA & MYSQL 的 Select LAST_INSERT_ID();

当 protected View 中的 "Nothing"时,Excel VBA ActiveWorkbook 为 "Enable Editing"

regex - Word 2013 中的通配符可匹配零个或多个空格

python - Excel 编码影响 pandas 过滤

excel - 从 Word 文档访问 Excel 电子表格

.net - 为什么我们激活它时Word没有 "come to front"?