40

さまざまな理由で、私は 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

しかし、彼らはかなり恐ろしいようです。もっと良い方法があるはずですよね?

4

9 に答える 9

66

次のような簡単なことを行うことができます。Left(path, InStrRev(path, "\"))

例:

Function GetDirectory(path)
   GetDirectory = Left(path, InStrRev(path, Application.PathSeparator))
End Function
于 2015-03-24T14:34:28.953 に答える
13

これはうまくいくようです。上記は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
于 2012-11-16T02:31:54.983 に答える
2

Access UI で現在開いている MDB のパスだけが必要な場合は、CurrentDB.Name を解析して結果を関数内の Static 変数に格納する関数を作成することをお勧めします。このようなもの:

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

これにより、任意のファイル名/パスのパスを見つけるために使用できるコードを利用しながら、現在のパスを非常に効率的に取得できます。

于 2009-01-09T17:09:55.937 に答える
1

left(currentdb.Name,instr(1,currentdb.Name,dir(currentdb.Name))-1)

Dir 関数は、フル パスのファイル部分のみを返します。ここでは Currentdb.Name が使用されていますが、これは任意のフル パス文字列にすることができます。

于 2009-01-07T18:21:21.590 に答える
0

この機能を試してください:

Function FolderPath(FilePath As String) As String

    -------------------------------------------------- -
    'ファイル パスからフォルダ パスを返します。

    'によって書かれた: クリストス サマラス
    '日付: 2013 年 6 月 11 日
    -------------------------------------------------- -

    文字列としての薄暗いファイル名

    ワークシート機能あり
        FileName = Mid(FilePath, .Find("*", .Substitute(FilePath, "\", "*", Len(ファイルパス) - _
                    Len(.Substitute(FilePath, "\", "")))) + 1, Len(ファイルパス))
    で終わる

    FolderPath = Left(FilePath, Len(ファイルパス) - Len(ファイル名) - 1)

終了機能

フォルダーのパスの最後のバックスラッシュ "\" を削除したくない場合は、最後の行を次のように変更します。

FolderPath = Left(FilePath, Len(ファイルパス) - Len(ファイル名))

例:

FolderPath("C:\Users\Christos\Desktop\LAT Analysers Signal Correction\1\TP 14_03_2013_5.csv")

与えます:

C:\Users\Christos\Desktop\LAT Analyzers 信号補正\1

また

C:\Users\Christos\Desktop\LAT Analyzers Signal Correction\1\

2 番目の場合 (最後にバックスラッシュがあることに注意してください)。

それが役立つことを願っています...

于 2013-11-06T11:36:16.900 に答える
-1

これらのコードを使用してお楽しみください。

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
于 2014-12-01T08:34:45.457 に答える