【发布时间】:2015-09-24 20:10:53
【问题描述】:
正如标题所说,我的用户表单一直存在一个特殊问题。当我关闭它(使用命令按钮)时,Userform.Hide 会在 Workbook_Deactivate 事件中弹出一个错误。
这是 Userform_initialize 事件的代码:
这里所有的变量都是全局的
VBA:
Private Sub Userform_Initialize()
subRemoveCloseButton Me
Set pagina = ThisWorkbook.Worksheets("Ruta")
Set libro = Workbooks.Open(pagina.Range("B4").Value, False, True)
Set pagina2 = libro.Worksheets("GLOBAL")
pasadas = 0
If pagina2.AutoFilterMode Then
If pagina2.FilterMode Then
pagina2.ShowAllData
End If
ElseIf pagina2.FilterMode Then
pagina2.ShowAllData
End If
pagina2.Columns("A:IV").EntireColumn.Hidden = False
lastRow = pagina2.Cells(pagina2.Rows.Count, "B").End(xlUp).Row
Call RemoveDuplicates
With Me.ImagenDatos
.ScrollBars = fmScrollBarsBoth
'Change 8.5 to suit your needs
.ScrollHeight = .InsideHeight * 5
.ScrollWidth = .InsideWidth * 3
End With
End Sub
然后在 CommandButton_Click 事件中我有这个:
VBA:
Private Sub BotonCerrar_Click()
Unload Consultas
libro.Saved = True
libro.Close
ThisWorkbook.Close
End Sub
正如已经评论的那样,错误来自:
VBA:
Private Sub Workbook_Deactivate()
Consultas.Hide
End Sub
如果我评论该单行,用户窗体将毫无问题地关闭,但我需要它,以便用户窗体(Consultas)在用户在工作簿之间切换时隐藏。
错误消息说:对象变量或未设置块变量(错误 91)
有人知道出了什么问题吗? 这是我的第一篇文章,如果需要其他内容,请告诉我。
我将不胜感激。
编辑:我有更多代码,但我认为这几乎是必不可少的,因为我所做的就是打开 excel 工作簿,然后显示用户窗体,然后单击关闭用户窗体的按钮
【问题讨论】:
-
嗨,IvnBam。在我看来,您使用该按钮卸载表单,然后由于某种原因自动调用 Workbook_Deactivate,并尝试在已卸载的表单上调用 Hide 方法。也许在 Consultas.Hide 之前 On Error Resume Next 会解决问题?你试过了吗?
-
您还可以在尝试隐藏之前检查
Consultas是否仍然存在:stackoverflow.com/questions/18584438/… -
嗨@A.S.H 感谢您的回复。我确实尝试过,然后错误转移到我关闭“libro”的部分。似乎该变量的范围,即使是全局的,在“BotonCerrar_Click()”子例程中丢失了
-
是的,我认为如果 libro 是表单对象的成员,那么在卸载表单时它也会失去作用域。但是您可以通过更改 BotonCerar_Click() 中的顺序来解决这个问题:尝试在卸载 Consultas 之前关闭 libro。
-
非常感谢 A.S.H 和 Ralph 的帮助(:我找到了解决方案以及我遇到的所有错误 n.n
标签: excel hide userform excel-2003 vba