![]() |
ChDir and ChDrive
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 --------------------------- "Smokin' weed kills your brain cells. Drinkin' only screws up your liver...ya got 2 a those." - Earl Hickey (NBC's "My Name is Earl") |
ChDir and ChDrive
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" -- Jim "Conan Kelly" wrote in message ... 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 --------------------------- "Smokin' weed kills your brain cells. Drinkin' only screws up your liver...ya got 2 a those." - Earl Hickey (NBC's "My Name is Earl") |
ChDir and ChDrive
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 Conan Kelly wrote: 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 --------------------------- "Smokin' weed kills your brain cells. Drinkin' only screws up your liver...ya got 2 a those." - Earl Hickey (NBC's "My Name is Earl") -- Dave Peterson |
All times are GMT +1. The time now is 10:16 AM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com