[vba] 액세스 97에서 전체 경로의 디렉토리 부분 (파일 이름 빼기)을 찾습니다.


Answers

다음과 같이 간단한 작업을 할 수 있습니다 : Left(path, InStrRev(path, "\"))

예:

Function GetDirectory(path)
   GetDirectory = Left(path, InStrRev(path, "\"))
End Function
Question

여러 가지 이유 때문에 Access 97에 갇혀 있고 전체 경로 이름의 경로 부분 만 가져와야합니다.

예를 들어, 이름

c:\whatever dir\another dir\stuff.mdb

되어야한다.

c:\whatever dir\another dir\

이 사이트에는이를 수행하는 방법에 대한 몇 가지 제안이 있습니다. http://www.ammara.com/access_image_faq/parse_path_filename.html

그러나 그들은 다소 끔찍한 것처럼 보인다. 더 좋은 방법이있을거야, 맞지?




이것은 작동하는 것 같습니다. 위의 내용은 Excel 2010에서는 발생하지 않습니다.

Function StripFilename(sPathFile As String) As String
'given a full path and file, strip the filename off the end and return the path
Dim filesystem As Object

Set filesystem = CreateObject("Scripting.FilesystemObject")

StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"

Exit Function

End Function



액세스 UI에서 현재 열려있는 MDB의 경로가 필요하다면 CurrentDB.Name을 구문 분석 한 다음 그 결과를 함수 내부의 정적 변수에 저장하는 함수를 작성하는 것이 좋습니다. 이 같은:

Public Function CurrentPath() As String
  Dim strCurrentDBName As String
  Static strPath As String
  Dim i As Integer

  If Len(strPath) = 0 Then
     strCurrentDBName = CurrentDb.Name
     For i = Len(strCurrentDBName) To 1 Step -1
       If Mid(strCurrentDBName, i, 1) = "\" Then
          strPath = Left(strCurrentDBName, i)
          Exit For
       End If
    Next
  End If
  CurrentPath = strPath
End Function

이것은 한 번만 이름을 반복 할 수 있다는 장점이 있습니다.

물론, 그것은 사용자 인터페이스에서 열려있는 파일에서만 작동합니다.

이것을 작성하는 또 다른 방법은 위의 함수 내부의 링크 에서 제공되는 함수를 사용하는 것입니다.

Public Function CurrentPath() As String
  Static strPath As String

  If Len(strPath) = 0 Then
     strPath = FolderFromPath(CurrentDB.Name)
  End If
  CurrentPath = strPath
End Function

이렇게하면 현재 경로를 매우 효율적으로 검색 할 수 있으며 파일 이름 / 경로의 경로를 찾는 데 사용할 수있는 코드를 사용할 수 있습니다.




이 코드를 사용하여 즐기십시오.

Public Function GetDirectoryName(ByVal source As String) As String()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection

Dim source_file() As String
Dim i As Integer        

queue.Add fso.GetFolder(source) 'obviously replace

Do While queue.Count > 0
    Set oFolder = queue(1)
    queue.Remove 1 'dequeue
    '...insert any folder processing code here...
    For Each oSubfolder In oFolder.SubFolders
        queue.Add oSubfolder 'enqueue
    Next oSubfolder
    For Each oFile In oFolder.Files
        '...insert any file processing code here...
        'Debug.Print oFile
        i = i + 1
        ReDim Preserve source_file(i)
        source_file(i) = oFile
    Next oFile
Loop
GetDirectoryName = source_file
End Function

그리고 여기서 함수를 호출 할 수 있습니다 :

Sub test()
Dim s
For Each s In GetDirectoryName("C:\New folder")
Debug.Print s
Next
End Sub



Links