我正在使用大量链接的数据输入表单在Excel中编写解决方案。到他之间移动的形式序列中,用户可以点击“前一个”或者“下一个按钮,当前窗体卸载,而新的装载和打开。强制从内存中卸载表格
Sub NextForm(curForm As MSForms.UserForm, strFormName As String)
Dim intCurPos As Integer
Dim strNewForm As String
Dim newForm As Object
intCurPos = WorksheetFunction.Match(strFormName, Range("SYS.formlist"), 0)
If intCurPos = WorksheetFunction.CountA(Range("SYS.formlist")) Then
Debug.Print "No"
Else
Unload curForm
strNewForm = WorksheetFunction.Index(Range("SYS.formlist"), intCurPos + 1)
Set newForm = VBA.UserForms.Add(strNewForm)
newForm.Show
End Sub
代码原样允许新的形式是通过编辑范围“SYS.formlist”随时添加到序列中
我注意到的一个问题是,即使当前窗体被卸载后,它仍然保留在VBA.Userforms集合中。假设这是因为此代码已从该用户表单调用。
是否有办法强制从VBA中删除该表单。用户表单集合?发生的是如果用户向前移动然后移回,表单的两个副本出现在内存中,而且excel会抛出关于两个正在打开的模式表单的异常。
干杯, 尼克
这并不工作,但你激发了我的解决方案。问题是我将该表单作为MSForms.UserForm类型传递给sub。这只提供了表单属性的子集,因此不会传递实际的表单对象,而是它的副本。 对于MSForms.Userform,.name属性不存在,因此您的解决方案无法正常工作,但通过将变量类型更改为Variant,我可以正确卸载该表单。所以谢谢你让我走上正确的道路。 – 2010-10-27 03:00:47