David Beckles
becklesd at tiscali.co.uk
Sun Apr 30 15:13:24 CDT 2006
Sorry, forgot to change the subject line.
You could try the Windows API:
Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal
lpPath As String) As Long
Then the call
MakeSureDirectoryPathExists "C:\Files\Excel\Scaleup10\"
will create the entire thing if necessary, but make sure that the path
ends with a backslash. I have only ever had it fail if the drive did
not exist or the user did not have the necessary permissions.
Hope that this helps,
David
------------Original Message-------------------------------------
> From: MartyConnelly <martyconnelly at shaw.ca>
> Subject: Re: [AccessD] Make Folder Problem
> To: Access Developers discussion and problem solving
> <accessd at databaseadvisors.com>
> Message-ID: <44526E04.6070902 at shaw.ca>
> Content-Type: text/plain; charset=us-ascii; format=flowed
>
> "Run-time error '76' Path Not found error".
> Some part of the path doesn't exist.
>
> I use Dir to create this type of directory structure.
> For example I have three fields in a table each
> one being a seperate directory level
> So you have to walk down the path creating each level
> Now Dir has a problem especially with deletes
>
> The Dir function may hold an OS lock on the directory even after Access has
> been terminated. To get around this point the DIR function at a directory,
> you dont want to delete. Play around with code below to prove the point.
> So you may want to use FSO instead
>
> Also look at last routine to check for invalid DOS characters in path
>
>
> '**************************************
> ' Name: CreateDirectoryStruct
> ' Description:Creates all non-existing
> ' folders in a path. Local or network UNC path.
> ' By: Bill Jones
> '
> ' Inputs:CreateThisPath as string
> '
>
> 'CreateDirectoryStruct("c:\temp\b\a")
>
> Sub CreateDirectoryStruct(CreateThisPath As String)
>
> 'do initial check
> Dim ret As Boolean, temp$, ComputerName As String, IntoItCount As
> Integer, X%, _
> WakeString As String
> Dim MadeIt As Integer
> If Dir$(CreateThisPath, vbDirectory) <> "" Then Exit Sub
> 'is this a network path?
>
> If Left$(CreateThisPath, 2) = "\\" Then ' this is a UNC NetworkPath
> 'must extract the machine name first, th
> ' en get to the first folder
> IntoItCount = 3
> ComputerName = Mid$(CreateThisPath, IntoItCount,
> InStr(IntoItCount, _
> CreateThisPath, "\") - IntoItCount)
> IntoItCount = IntoItCount + Len(ComputerName) + 1
> IntoItCount = InStr(IntoItCount, CreateThisPath, "\") + 1
> 'temp = Mid$(CreateThisPath, IntoItCount
> ' , x)
> Else ' this is a regular path
> IntoItCount = 4
> End If
>
> WakeString = Left$(CreateThisPath, IntoItCount - 1)
> 'start a loop through the CreateThisPath
> ' string
>
> Do
> X = InStr(IntoItCount, CreateThisPath, "\")
>
>
> If X <> 0 Then
> X = X - IntoItCount
> temp = Mid$(CreateThisPath, IntoItCount, X)
> Else
> temp = Mid$(CreateThisPath, IntoItCount)
> End If
>
> IntoItCount = IntoItCount + Len(temp) + 1
> temp = WakeString + temp
> 'Create a directory if it doesn't alread
> ' y exist
> ret = (Dir$(temp, vbDirectory) <> "")
> If Not ret Then
> 'ret& = CreateDirectory(temp, Security)
> Debug.Print "MD=" & temp
> MkDir temp
> End If
>
> IntoItCount = IntoItCount 'track where we are in the String
> WakeString = Left$(CreateThisPath, IntoItCount - 1)
> Loop While WakeString <> CreateThisPath
>
> End Sub
>
> Function NameFix(NameIn As String) As String
> ' replaces illegal character with underscore
> ' for illegal filenames in windows dos
> Const ILLEGAL_CHARACTERS = "/\:*?<>|"""
> ' = /\:*?<>|"
> Dim i As Integer
> Dim iTmp As Integer
> Dim NameFixTemp As Variant
> 'replace illegal filename character with an underscore
> NameFixTemp = NameIn
>
> For i = 1 To Len(ILLEGAL_CHARACTERS)
> NameFixTemp = Replace(NameFixTemp, Mid$(ILLEGAL_CHARACTERS, i, 1), "_")
> ' iTmp = InStr(1, NameFix, Mid$(ILLEGAL_CHARACTERS, i, 1))
> ' If iTmp > 0 Then
> ' Mid$(NameFix, iTmp, 1) = "_"
> ' End If
> Next
> 'non ascii printing characters
> ' Just realized this code will also replace spaces with
> 'underscores.
> 'to accept spaces, change
> '> If iTmp < 33 Or iTmp > 126 Then to
> '> If iTmp < 32 Or iTmp > 126 Then
>
> For i = 1 To Len(NameFixTemp)
> iTmp = Asc(Mid$(NameFixTemp, i, 1))
> If iTmp < 32 Or iTmp > 126 Then
> Mid$(NameFixTemp, i, 1) = "_"
> End If
> Next
> NameFix = NameFixTemp
> End Function
>
>
>
> Kaup, Chester wrote:
>
>
>> When I try the following I get a runtime error 76
>>
>> If Not fso.folderexists(ResultsPath2) Then
>> fso.CreateFolder ("C:\Files1\Excel1\Scaleup1")
>> End If
>>
>> -----Original Message-----
>> From: accessd-bounces at databaseadvisors.com
>> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jim Moss
>> Sent: Friday, April 28, 2006 11:06 AM
>> To: Access Developers discussion and problem solving
>> Subject: Re: [AccessD] Make Folder Problem
>>
>> Chester,
>>
>> I use the fso.CreateFolder("C:\Accounts Payable\Processed") and it
>> creates
>> sub folders just fine.
>>
>> Jim
>>
>>
>>
>>
>>> I use the following code on my machine to create a folder and it works
>>> fine. Just tried it on another users machine and got a message could
>>>
>>>
>>>
>> not
>>
>>
>>
>>> create folder. I was able to do it manually. Any thoughts?
>>>
>>>
>>>
>>> ChDrive "C:"
>>>
>>> Set fso = CreateObject("Scripting.FileSystemObject")
>>>
>>> ResultsPath = "C:\Files\Excel\Scaleup10"
>>>
>>>
>>>
>>> If Not fso.folderexists(ResultsPath) Then
>>>
>>> MkDir "C:\Files\Excel\Scaleup10"
>>>
>>> End If
>>>
>>>
>>>
>>> Chester Kaup
>>>
>>> Engineering Technician
>>>
>>> Kinder Morgan CO2 Company, LLP
>>>
>>> Office (432) 688-3797
>>>
>>> FAX (432) 688-3799
>>>
>>>
>>>
>>>
>>>
>>> No trees were killed in the sending of this message. However a large
>>> number of electrons were terribly inconvenienced.
>>>
>>>
>>>
>>> --
>>> AccessD mailing list
>>> AccessD at databaseadvisors.com
>>> http://databaseadvisors.com/mailman/listinfo/accessd
>>> Website: http://www.databaseadvisors.com
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
--
David Beckles
--
David Beckles
Crossings
Stream Road
Upton
OXON OX11 9JD
Tel: +44 (0) 1235 850-470
Mobile (UK): +44 (0) 7833621529
Mobile (Uganda): +256 (0) 77899224
Mobile (Tanzania) : +255 (0) 787068557
Fax:+44 (0) 7092330493 / + 44 (0) 8701354104