Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations waross on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

SolidWorks macro directory question 2

Status
Not open for further replies.

teaaddict

Mechanical
Jul 20, 2007
14
0
0
GB
Is there a way of selecting a directory in a SolidWorks macro?

I want the user to select a directory batch open and save a pdf copy to another directory. I can do every thing but the directory part.

I have done a similar prog in excel with the getfileopen method but SW doesent have this.

The only option left is to use SW working directory but I don’t like this.

I
 
Replies continue below

Recommended for you

Code:
'This module contains all the declarations to use the
'Windows 95 Shell API to use the browse for folders
'dialog box. To use the browse for folders dialog box,
'please call the BrowseForFolders function using the
'syntax: stringFolderPath=BrowseForFolders(Hwnd,TitleOfDialog)
'
'For contacting information, see other module

Option Explicit

Public Type BrowseInfo
     hwndOwner As Long
     pIDLRoot As Long
     pszDisplayName As Long
     lpszTitle As Long
     ulFlags As Long
     lpfnCallback As Long
     lParam As Long
     iImage As Long
End Type

Public Const BIF_RETURNONLYFSDIRS = 1
Public Const MAX_PATH = 260

Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long

Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String) As String
      
    'declare variables to be used
     Dim iNull As Integer
     Dim lpIDList As Long
     Dim lResult As Long
     Dim sPath As String
     Dim udtBI As BrowseInfo

    'initialise variables
     With udtBI
        .hwndOwner = hwndOwner
        .lpszTitle = lstrcat(sPrompt, "")
        .ulFlags = BIF_RETURNONLYFSDIRS
     End With

    'Call the browse for folder API
     lpIDList = SHBrowseForFolder(udtBI)
      
    'get the resulting string path
     If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        lResult = SHGetPathFromIDList(lpIDList, sPath)
        Call CoTaskMemFree(lpIDList)
        iNull = InStr(sPath, vbNullChar)
        If iNull Then sPath = Left$(sPath, iNull - 1)
     End If

    'If cancel was pressed, sPath = ""
     BrowseForFolder = sPath

End Function

'sample usage in form
Private Sub cmdServerBrowse_Click()
 txtDatabasePath.Text = BrowseForFolder(me.hwnd, "Please select a Server folder.")
End Sub
 
Do you mean that you want your user to be able to browse for and select the file of their choice? If that is what you want you can use GetOpenFileName.

-handleman, CSWP (The new, easy test)
 
Not exactly. I have a VBA program and I want to open a text file as a data file. Based on the data, I perform certain operations. This data file could have any name and could be located anywhere on the network. I need a way to select it when I run the program.
 
In what application is the VBA written? Most VBA-supporting programs (SolidWorks, Excel, Word, etc) have a GetOpenFileName type function. It allows the user to browse to his heart's content. The return of the function is just a string. It doesn't actually open the file. What you decide to do with that returned string is up to you.

-handleman, CSWP (The new, easy test)
 
If you are using VB6, you can implement the Common Dialog. However, that's as much help as I can give you there as I've never used VB6.

-handleman, CSWP (The new, easy test)
 
Question by OP:
How can I let my user select a directory/folder (not a file) through a browse type dialog in VBA.

Answer by TheTick:
You have to use Windows API to select a directory/folder.

New question by dogarila (summed up from several clarifying posts):
How can I let my user select a file using VB6

New answer:
Use the Common Dialog if you have VB6.

Alternate new answer:
Reference Excel library in your AutoCAD VBA macro and steal its GetOpenFileName functionality. For an example, see thread559-215560

-handleman, CSWP (The new, easy test)
 
Status
Not open for further replies.
Back
Top