excel - 如何在 Excel VBA 中正确关闭用户窗体?
问题描述
我需要从通用模块内的过程中关闭用户窗体。下面的代码只是一个测试。一旦我离开了表单模块,我就无法使用 Me。
Private Sub btnCancel_Click()
On Error GoTo TreatError
Dim screen As Object
Set screen = UserForms.Add(Me.Name)
Unload screen
Leave:
Set screen = Nothing
Exit Sub
TreatError:
GoTo Leave
End Sub
这段代码缺少什么?当我按下取消按钮时,什么也没有发生,好吧,表单仍然保持加载。此用户窗体是 ShowModal True。
提前致谢。
好的 Pᴇʜ。这个给你:
Public Sub EditarCombo(nomeColuna As String, itemCombobox As Variant, novoValor As Variant)
On Error GoTo TratarErro
Dim planilha As Worksheet
Dim planRamais As Worksheet
Dim tela As UserForm
If ((itemCombobox & "") <> "") Then
If ((Trim(novoValor) & "") <> "") Then
If (itemCombobox <> Trim(novoValor)) Then
Set planilha = Worksheets("CombosRamais")
Set planRamais = Worksheets("Ramais")
EditarNaColuna planilha, nomeColuna, itemCombobox, novoValor
ExcluirDuplicadasNaColuna planilha, nomeColuna, novoValor
OrdemarColuna planilha, nomeColuna, True
RedefinirAreaColuna planilha, planRamais, nomeColuna
EditarNaColuna planRamais, nomeColuna, itemCombobox, novoValor
Else
MsgBox "Você deve digitar um novo valor para o item escolhido.", vbInformation + vbOKOnly, "Editar Item"
GoTo Sair
End If
Else
MsgBox "O campo de novo valor está vazio.", vbInformation + vbOKOnly, "Editar Item"
GoTo Sair
End If
Else
MsgBox "Escolha um item na lista para ser editado.", vbInformation + vbOKOnly, "Editar Item"
GoTo Sair
End If
Set tela = UserForms.Add(Replace(nomeColuna, "Col", "frmEditar"))
Unload tela
Sair:
Set tela = Nothing
Set planilha = Nothing
Set planRamais = Nothing
Exit Sub
TratarErro:
GoTo Sair
End Sub
解决方案
不要卸载表单 - 只是隐藏它们。从表单本身,使用Me.Hide
.
如果要在模块代码中隐藏表单,请使用UserForm1.Hide
.
破坏表格,尤其是在错误的时刻,可能会导致令人惊讶的行为,这真的很难理解。如果您想了解更多信息,请阅读“默认实例”。隐藏表单只是将其从屏幕上隐藏起来,使其暂时不可见,但会保留在内存中。
更新
我的回答主要是指出您不应该销毁表格。如果从不同的表单调用子例程并且您将控件(例如组合框)作为参数传递,则可以使用Parent
-property 获取表单对象并将其隐藏:
Public Sub EditarCombo(nomeColuna As String, itemCombobox As Control, novoValor As Variant)
(...)
itemCombobox.Parent.Hide
(...)
End Sub
推荐阅读
- java - 拖放方法不会触发
- jquery - 有没有办法强制``元素尊重偏移?(即用户当前滚动位置)何时触发“自定义框”模式?
- xml - 使用 XML 从 XML 转换为 CSV 时 CSV 文件中的标题
- java - 如果我将方法分配给变量是在java中调用的方法吗?
- python - 在熊猫数据框中加载多文档 yaml 文件时缺少第一个文档
- liferay - Liferay 模块侦听器:无法获取对模型进行更改的人员
- sql - 从动态字符串中删除字符
- sql - 使用案例语句作为枢轴 - DB2 SQL
- email - 我们如何从 Sitecore EXM 导出一个通用的全局退出列表?
- node.js - 变量分配不分配给变量 - 我做错了什么?