I would use a public method (typically "Main" is a proceedure used a public Module, which the application uses when starting up - set the start up proceedure in PROJECT|PROPERTIES)
Then, when the application starts by using that ("Main"

proceedure in the public module, that is where you would use code to load the form.
I would use an error catcher in the form class and throw any errors back to the "Main" proceedure.
When the main sub receives the error, it turns back around and unloads the form and ends the program.
No problem using "End" after that. Using the "End" method is only bad if used wrong. Then again, if you have correctly unloaded everything, then, VB being the tidy housekeeper that it is, there shouldn't be really a need to use the "End" method.
I use it anyways, and always have, just as an extra. Never have any problems with it. But, I unload everything first and make sure I have no open objects left (which may happen when using the "NEW" key word in the declaration section of a module ar Form, even when you thought you had unloaded the form).
One good method to use, is to let the form load and show itself.
Create a public sub proceedure called something like "Display" in the form class code.
This proceedure then gets called from the "Main" sub in Module1:
Sub Main()
Dim frm As New Form1
Dim bIsError As Boolean'(if you do not want to use the error Raise method)
bIsError = frm.Display()
If bIsError Then
'An error has occured while initializing Form1
Goto EndApp
End If
set frm = nothing
Exit Sub
EndApp:
'Unload any open objects:
Set SomeObject = Nothing
dim frm As vb.form
for each frm in vb.Forms
unload frm
next frm
END
End Sub
In the form code window add something like this:
Option Explicit
'Notice: No use of the "New" keyword in the following statement
Private WithEvents m_rsADO As ADODB.Recordset
Public Function Display() As Integer
'Code here for initialization
Display=vbTrue 'Just in case the Me.Show method doesn't get called
'here is where the "New" keyword gets used
Set m_rsADO = New ADODB.Recordset
'Some other initialization code
'Some error:
If SomeError then
Unload Me
Else
Me.Show
Display=vbFalse
End If
End Function
Public Sub Form_Unload(Cancel As Integer)
'Clean up just to make sure
If m_rsADO.State = adStateOpen Then m_rsADO.Close
Set m_rsADO = Nothing
Set SomeOtherObject = Nothing
Set Form1 = Nothing
End Sub
[/b][/i][/u]*******************************************************
General remarks:
If this post contains any suggestions for the use or distribution of code, components or files of any sort, it is still your responsibility to assure that you have the proper license and distribution rights to do so!