View Single Post
  #5   Report Post  
Posted to microsoft.public.excel.programming
Lee Cain Lee Cain is offline
external usenet poster
 
Posts: 6
Default Make sure file is in correct folder??

Thanks again,
I've basicly copied the code from your first link, works fine as a stand
alone object atached to a button.
I've tried to turn it into a function with no joy?
Seems to run, but sPath never returns a value? Even in debug, sPath never
picks up the path?

Private Sub CommandButton2_Click()

SaveWhere sPath
MsgBox sPath 'returns blank

End Sub
--------------------------------
Function SaveWhere(sPath)

Dim sPath As String
Dim RetVal As Long

' Fill our string buffer
sPath = String(MAX_PATH, 0)
RetVal = SHGetFolderPath(0, CSIDL_PERSONAL Or CSIDL_FLAG_CREATE, 0,
SHGFP_TYPE_CURRENT, sPath)

Select Case RetVal
Case S_OK
' We retrieved the folder successfully

' All C strings are null terminated
' So we need to return the string upto the first null character
sPath = Left(sPath, InStr(1, sPath, Chr(0)) - 1)
MsgBox sPath & " from function"
Case S_FALSE
' The CSIDL in nFolder is valid, but the folder does not exist.
' Use CSIDL_FLAG_CREATE to have it created automatically
MsgBox "The folder does not exist"
Case E_INVALIDARG
' nFolder is invalid
MsgBox "An invalid folder ID was specified"

End Select
End Function

Feeling dumber as the day goes on...
--
Lee

www.raising-cain.com
"Tom Ogilvy" wrote in message
...
You can use the special folders to get to my documents CSIDL_PERSONAL,

not
CSIDL_MYDOCUMENTS

http://support.microsoft.com/default...b;en-us;252652
HOWTO: Use the SHGetFolderPath Function from Visual Basic

http://support.microsoft.com/default...b;EN-US;227051
HOWTO: Determine the Current Location of Files or Folders on Windows 2000

This lists the constants.


http://msdn.microsoft.com/library/de...nums/csidl.asp

This is what you want for a declaration:

Private Const CSIDL_PERSONAL = &H05&


Then you can force the creation of Inventories below that.

Regards,
Tom Ogilvy



"Lee Cain" wrote in message
...
Thanks Tom,

Pretty slick! Try & make the directory, if it fails, or not, the

directory
is there! I was thinking too much about it.
Only problem I see is on W2000 & XP where the My Documents folder is
c:\Documents and Setting\current username\My Documents. & this will end

up
on 98, 2000, & XP.

thanks,
--
Lee

www.raising-cain.com
"Tom Ogilvy" wrote in message
...
On Error Resume Next
mkdir "C:\My Documents"
mkdir "C:\My Documents\Inventory"
On Error goto 0
fName = "myfilename.xls"
Application.DisplayAlerts = False
Thisworkbook.SaveAS "C:\My Documents\Inventory\" & fname
Application.DisplayAlerts = True


to set the current directory (not required with the above code)

chdrive "C"
chdir "C:\My Documents\Inventory"

--
Regards,
Tom Ogilvy


"Lee Cain" wrote in message
...
I'm new to this VBA thing, doing OK, but I'm getting lost here.
I'm working on a project that will be distributed to "newbies" to

put
it
nicely.
I know they will probably move the excel file around from it's

intended
location.
In the application it creates a new version of itself for each new

week.
I want to guarantee that new version is created in the My
Documents/Inventory folder.

I tried using CurDir to find out the current directory, it returns

My
Documents every time, unless I manually do a File/Save As & then it
reports
the proper My Documents/Inventory.

I just need to check the current directory, see if it's the My

Doc/Inv
&
if
not, save it there, possibly creating the directory if they screwed

it
up!

& to add to the fun, this will be running on W98/2000/XP

Thanks!
--
Lee

www.raising-cain.com