Actualización tomando la info de
Allen Browne Hay un ejemplo en esa URL
Para evitar problemas, utiliza una colección pública y un código en un módulo independiente.
El ejemplo de Allen toma un formulario llamado frmClient
Public clnClient As New Collection 'Instances of frmClient.
Function OpenAClient()
'Purpose: Open an independent instance of form frmClient.
Dim frm As Form
'Open a new instance, show it, and set a caption.
Set frm = New Form_frmClient
frm.Visible = True
frm.Caption = frm.Hwnd & ", opened " & Now()
'Append it to our collection.
clnClient.Add Item:=frm, Key:=CStr(frm.Hwnd)
Set frm = Nothing
End Function
Function CloseAllClients()
'Purpose: Close all instances in the clnClient collection.
'Note: Leaves the copy opened directly from database window/nav pane.
Dim lngKt As Long
Dim lngI As Long
lngKt = clnClient.Count
For lngI = 1 To lngKt
clnClient.Remove 1
Next
End Function
La segunda función CloseAllClients() muestra cómo cerrar estas instancias eliminándolas de nuestra colección. Pero si el usuario cierra una instancia con la interfaz normal, debemos eliminar esa instancia de nuestra colección. Eso se hace en el evento Cerrar del formulario frmClient de esta manera:
Private Sub Form_Close()
'Purpose: Remove this instance from clnClient collection.
Dim obj As Object 'Object in clnClient
Dim blnRemove As Boolean 'Flag to remove it.
'Check if this instance is in the collection.
For Each obj In clnClient
If obj.Hwnd = Me.Hwnd Then
blnRemove = True
Exit For
End If
Next
'Deassign the object and remove from collection.
Set obj = Nothing
If blnRemove Then
clnClient.Remove CStr(Me.Hwnd)
End If
End Sub