How do you close the file in a FileNewNotify2() event?

Hi,

I'm fairly new to the SolidWorks API and am having a heck or a time with it.

The problem I am currently having, is when a user creates a new file, a dialog box opens for user interaction. But if the user cancels, I need to close the newly created file.

I thought the FileNewNotify2 event was the way to go, but for the life of me I cannot close that file! and to be honest, I don't find the API Documentation all that helpful.

This has got to be something simple, can somebody provide me with a clue?

Thanks in advance, John

----------------------------------------------------------------------------

--------------

---- CancelTest.cls -- CancelTest.cls -- CancelTest.cls -- CancelTest.cls -- CancelTest.cls --

----------------------------------------------------------------------------

-------------- Option Explicit

Implements SWPublished.SwAddin Private WithEvents m_oSldWrks As SldWorks.SldWorks

Private Function m_oSldWrks_FileNewNotify2(ByVal newDoc As Object, _ ByVal DocType As Long, _ ByVal templateName As String) As Long '// open a dlg box

'// if dlg box was cancelled, then close new file Dim sTitle As String sTitle = newDoc.GetTitle() '// newDoc is assumed to be a SldWorks.PartDoc Debug.Print sTitle m_oSldWrks.QuitDoc sTitle '// doesn't work m_oSldWrks.CloseDoc sTitle '// doesn't work

End Function

Private Function SwAddin_ConnectToSW(ByVal ThisSW As Object, _ ByVal Cookie As Long) As Boolean '// set data member object Set m_oSldWrks = ThisSW End Function

Private Function SwAddin_DisconnectFromSW() As Boolean '// clear data member object Set m_oSldWrks = Nothing End Function

Reply to
John
Loading thread data ...

Modify this code for your userform

Dim swApp as Sldworks.Sldworks Dim NewModelDoc as Sldworks.Modeldoc2

Private Sub CommandButtonCancel_Click() swapp.CloseDoc (NewModelDoc.GetTitle) End End Sub

Private Sub YourUserFormName_Initialize() Set swApp = Application.SolidWorks Set NewModelDoc = swApp.ActiveDoc End Sub

Then when FileNewNotify2 envokes your UserForm the user form will grab the New Document's Object for you to manipulate.

Regards, Corey Scheich

CancelTest.cls --

Reply to
Corey Scheich

Hi Corey,

I tried what you suggested and it worked fine in a SolidWorks Macro.

However, I am building a Visual Basic COM DLL and although I modified my old code (the FileNewNotify2 event specifically) to use the ActiveDoc as you suggested, BUT it still did not work.

Private Function m_oSldWrks_FileNewNotify2(ByVal newDoc As Object, _ ByVal DocType As Long, _ ByVal templateName As String) As Long Dim oDoc As SldWorks.ModelDoc2 Set oDoc = m_oSldWrks.ActiveDoc m_oSldWrks.CloseDoc oDoc.GetTitle() '// doesn't work m_oSldWrks.QuitDoc oDoc.GetTitle() '// doesn't work End Function

Does anybody know why Corey's code would work in a Macro, but the same thing will not work from a VB COM DLL?

Thanks, John

Reply to
John

John I think you are going to have to Load and show a user form and cancel using the userform. I can't get it to work Unless I use a userform. You have to envoke the form for your user to be able to cancel anyway.

Private Function m_oSldWrks_FileNewNotify2(ByVal newDoc As Object, _ ByVal DocType As Long, _ ByVal templateName As String) As Long

Load Userform1 Userform1.Show True End Function

then on the user form

Private Sub CommandButton1_Click() ThisLibrary.m_oSldWrks.CloseDoc (ThisLibrary.m_oSldWrks.ActiveDoc.GetTitle) End Sub

Corey

Reply to
Corey Scheich

well, a couple of questions before i give a couple of **guesses***

1) was your VB code also done from a form module? A form module is a (type of) class module, and only class modules can recieve events. 2) was your VB form one that was imported from the VBA form? If so, check the syntax: the default control naming, and even some of the events, differ from VBA, to VB....
Reply to
rocheey

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.