【问题标题】:Setting Multipage Value Attribute Crashes Excel设置多页值属性会使 Excel 崩溃
【发布时间】:2025-12-09 19:05:02
【问题描述】:

我有一个多页用户窗体控件,其中包含两个页面和用于取消、返回、下一步和完成的按钮控件。

当我通过减去 1 在“后退”按钮子中设置 multipage.value 属性时,Excel 冻结/挂起。

Private Sub btn_Back_Click()
        ' Set the buttons
        Me.btn_Next.Enabled = True
        Me.btn_Finish.Enabled = False
        Me.btn_Back.Enabled = False
        Me.multipage_add_xfr.value = Me.multipage_add_xfr.value - 1
End Sub

通过添加 1 来“前进”到第二页的代码在 btn_Next_Click() 子中可以正常工作:

 Me.multipage_add_xfr.value = Me.multipage_add_xfr.value + 1

最后,在UserForm_Initialize() 上,将多页控件设置为第一页(例如 value = 0)也会导致 Excel 崩溃。

Me.multipage_add_xfr.value = 0

UPADTE 以下代码适用于在当前项目中创建的新用户表单,但旧用户表单不能。

Private Sub CommandButton1_Click()
      Me.CommandButton1.Enabled = False
      Me.CommandButton2.Enabled = True
      Me.MultiPage1.value = Me.MultiPage1.value + 1
End Sub

Private Sub CommandButton2_Click()
      Me.CommandButton2.Enabled = False
      Me.CommandButton1.Enabled = True
      Me.MultiPage1.value = Me.MultiPage1.value - 1
End Sub

Private Sub UserForm_Initialize()
      Me.CommandButton2.Enabled = False
      Me.CommandButton1.Enabled = True
      Me.MultiPage1.value = 0
End Sub

想法?

【问题讨论】:

  • 您的项目中是否有任何多页处理程序?比如 multipage_add_xfr_Change()。
  • 不,不适用于多页控件。
  • 所以,尝试试验一下:创建另一个项目,插入多页、2 个按钮并创建事件处理程序,没有其他代码。
  • 可能是内部问题。在我的项目中进行批量重命名时,我遇到了类似的崩溃。
  • 我运行了实验并注意到.value 属性在测试项目中自动更改为大写“V”,但在我的主项目中没有。对正确库的某处是否有损坏的引用?

标签: excel vba crash multipage


【解决方案1】:

试试这个。

Private Sub btn_Back_Click()
    If multipage_add_xfr.Value < 1 Then Exit Sub '<~~ Add this one line

    Me.btn_Next.Enabled = True
    Me.btn_Finish.Enabled = False
    Me.btn_Back.Enabled = False
    Me.multipage_add_xfr.Value = Me.multipage_add_xfr.Value - 1
End Sub

最后,在 UserForm_Initialize() 上,将多页控件设置为第一页(例如 value = 0)也会导致 Excel 崩溃。

在这种情况下,删除控件并重新创建它。如果这仍然没有帮助,那么您可能需要重新创建表单...

您可能还想检查在Private Sub UserForm_Activate() 中将其设置为0 是否可以解决问题?

请注意 vba 强制我的代码更改为小写 - 这是否表明存在问题? – Zephyr Mays 54 分钟前

这通常发生在您声明具有相同名称的变量时

来自聊天:File Post Mortem 证实了我的怀疑。声明了一个同名的变量。

Public Sub update(ByVal value As Long, _
                  Optional ByVal MaxValue As Long = 0, _
                  Optional ByVal Status As String = "", _
                  Optional ByVal DisplayPercent As Boolean = True)

Multipage 也已损坏。更换控件解决了问题。

【讨论】:

  • 设置value' to 0 on init()`会导致excel崩溃。
  • 另外,为第 0 页添加测试并不能解决问题。但是,我注意到 .value 属性在测试项目中自动更改为大写“V”,但在我的主项目中没有。对正确库的某处是否有损坏的引用?
  • 您是否按照我上面的建议尝试将其放入UserForm_Activate()
  • 是的。在UserForm_Activate() sub 中将Me.multipage_add_xfr.value 设置为0 时,Excel 仍然崩溃,与init() sub 相同。请注意 vba 强制我的代码更改为小写 - 这是否表明存在问题?
  • 可能。您是否在模块中的任何地方声明了一个名为value 的变量?或用该名称命名工作表、模块等?