さまざまな理由で、私は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
しかし、彼らはむしろ恐ろしいようです。もっと良い方法があるはずですよね?
それについてです。魔法の組み込み関数はありません...
次のような簡単なことができます:Left(path, InStrRev(path, "\"))
例:
Function GetDirectory(path)
GetDirectory = Left(path, InStrRev(path, "\"))
End Function
私はいつもこのようなことのために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
これはうまくいくようです。上記は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
left(currentdb.Name、instr(1、currentdb.Name、dir(currentdb.Name))-1)
Dir関数は、フルパスのファイル部分のみを返します。ここではCurrentdb.Nameが使用されますが、任意のフルパス文字列を使用できます。
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
これにより、任意のファイル名/パスのパスを見つけるために使用できるコードを利用しながら、現在のパスを非常に効率的に取得できます。
この機能を試してください:
関数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番目の場合(最後にバックスラッシュがあることに注意してください)。
私はそれが役立つことを願っています...
vFilename = "C:\ Informes\Indicadores\Program\Ind_Cont_PRv.txt"
vDirFile = Replace(vFilename、Dir(vFileName、vbDirectory)、 "")
'Result = C:\ Informes\Indicadores_Contraloria\Programa\Versiones anteriores \