ChDir and ChDrive

C

Conan Kelly

Hello all,

I have a some code that I use to alter a handful of personal files on a
local drive.

I'm trying to set this code up to store the current directory, change to a
specific folder on a local drive, then change the current directory back to
the one that was current before the code ran.

I just figured out that I will have to use both ChDir and ChDrive in order
to do this, and then use both to revert back to original directory before
running the code. No big deal, IF THE NETWORK SHARE IS MAPPED TO A DRIVE
LETTER!!! Most of the network locations that I work in are mapped to drive
letters. But on the rare occasion, I will be working in the network
location directly, ie: \\Server\Share.

It looks like changing CurDir from a network location to a local directory
is no big deal. But I'm having a hard time trying to figure out how to
change from a local to a network location.

If my original directory is...

\\Server\Share

....and I want to go to...

C:\Folder\Subfolder

....then my code would look something like this...

'CurDir would be "\\Server\Share" at this point.
pstrCurrFolder = CurDir
'ChDrive "C" 'it appears this line is not neccesary when going
from network to local
ChDir "C:\Folder\Subfolder"

But it doesn't look like I can revert back to my network location, after all
the processing, if it is not mapped to a drive letter.

ChDir pstrCurrFolder 'only works if pstrCurrFolder is another
location on the current drive.
ChDrive "\\Server" 'No workie!!!

Does anyone know of a way to accomplish what I'm trying to do?

Thanks for any help anyone can provide,

Conan Kelly
 
J

Jim Rech

The Windows API function SetCurrentDirectoryA is preferable for two reasons.
It works with UNC paths and it handles both ChDrive abd ChDir functions.

Add this declaration to the top of the module:

Declare Function SetCurrentDirectoryA Lib "KERNEL32" (ByVal lpPathName As
String) As Long

and then anywhere in it you can use it like this:

SetCurrentDirectoryA "\\Server\Share"

or

SetCurrentDirectoryA "C:\Folder\Subfolder"
 
D

Dave Peterson

ChDir won't work with UNC paths. But you can use a Windows API that will work
with either UNC paths or Mapped drives.

Here's an example I saved from a previous post:


And here's an example of that API call. It uses application.getopenfilename,
but you'll see how to use it.

Option Explicit
Private Declare Function SetCurrentDirectoryA Lib _
"kernel32" (ByVal lpPathName As String) As Long
Sub ChDirNet(szPath As String)
Dim lReturn As Long
lReturn = SetCurrentDirectoryA(szPath)
If lReturn = 0 Then Err.Raise vbObjectError + 1, "Error setting path."
End Sub
Sub testme01()

Dim myFileName As Variant
Dim myCurFolder As String
Dim myNewFolder As String
Dim Wkbk as workbook

myCurFolder = CurDir
myNewFolder = "\\share\folder1\folder2"

On Error Resume Next
ChDirNet myNewFolder
If Err.Number <> 0 Then
'what should happen
MsgBox "Please change to your own folder"
Err.Clear
End If
On Error GoTo 0

myFileName = Application.GetOpenFilename(filefilter:="Excel Files, *.xls")

ChDirNet myCurFolder

If myFileName = False Then
Exit Sub 'user hit cancel
End If

'do your stuff to open it and process it.
Set wkbk = workbooks.open(filename:=myfilename)

'....

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top