我正在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.Userforms集合中删除该表单?发生的情况是,如果用户向前移动,然后向后移动,则该表单的两个副本会出现在内存中,并且excel会抛出关于两个模态表单打开的异常。
Cheers, Nick