web-dev-qa-db-ja.com

アクセス97でフルパスのディレクトリ部分(ファイル名を除く)を見つける

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

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

23
apenwarr

それについてです。魔法の組み込み関数はありません...

3
DJ.

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

例:

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

私はいつもこのようなことのためにFileSystemObjectを使用しました。ここに私が使用した小さなラッパー関数があります。必ずMicrosoft Scripting Runtimeを参照してください。

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 New FileSystemObject

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

Exit Function

End Function
19
John Mo

これはうまくいくようです。上記は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
10
Jeff Stander

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

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

1
Dick Kusleika

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

これには、名前を1回だけループするという利点があります。

もちろん、ユーザーインターフェイスで開いているファイルでのみ機能します。

これを記述する別の方法は、上記の関数内の link で提供される関数を使用することです。

Public Function CurrentPath() As String
  Static strPath As String

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

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

1
David-W-Fenton

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

関数FolderPath(FilePath As String)As String 
 
 '------------------------------ -------------------- 
 'フォルダーパスをファイルパスから返します。
 
'作成者:Christosサマラス
 '日付:2013年6月11日
' ------------------------------ -------------------- 
 
 Dim FileName As String 
 
 With WorksheetFunction 
 FileName = Mid(FilePath、.Find( "*"、.Substitute(FilePath、 "\"、 "*"、Len(FilePath)-_ 
 Len(.Substitute(FilePath、 "\"、 " "))))+ 1、Len(FilePath))
 End With 
 
 FolderPath = Left(FilePath、Len(FilePath)-Len(FileName)-1)
 
 End関数

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

FolderPath = Left(FilePath、Len(FilePath)-Len(FileName))

例:

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番目の場合(最後にバックスラッシュがあることに注意してください)。

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

0
Sam

vFilename = "C:\ Informes\Indicadores\Program\Ind_Cont_PRv.txt"

vDirFile = Replace(vFilename、Dir(vFileName、vbDirectory)、 "")

'Result = C:\ Informes\Indicadores_Contraloria\Programa\Versiones anteriores \

0
AlexFreyre