2

つまり、Application.GetOpenFileName()メソッドを呼び出した後、文字列処理を行う必要がありますか?

4

5 に答える 5

15

なぜ車輪の再発明をして、大量の定型コードを書くのですか?既存のFileSystemObjectのGetFileNameメソッドを使用するだけで、すでに作成、テスト、およびデバッグされています。

filename = FSO.GetFileName(path)

実例は次のとおりです。

Dim path As String
Dim filename As String
Dim FSO As Scripting.FileSystemObject
Set FSO = New FileSystemObject

path = "C:\mydir\myotherdir\myfile.txt"

filename = FSO.GetFileName(path) 'Bingo. Done.

Debug.Print filename ' returns "myfile.txt"

' Other features:
Debug.Print FSO.GetBaseName(path) ' myfile
Debug.Print FSO.GetExtensionName(path) ' txt
Debug.Print FSO.GetParentFolderName(path) ' C:\mydir\myotherdir
Debug.Print FSO.GetDriveName(path) ' C:
' et cetera, et cetera.

次のように参照を設定する必要があります。[ツール]>[参照...]>[MicrosoftScriptingRuntime]の横にあるチェックマークを設定します。

それ以外の場合は遅延バインディングを使用します。

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
于 2012-02-01T07:57:16.173 に答える
5

これらの関数をファイル名の処理に使用しています。最後のものはあなたがここで必要とするものです。

Public Function FilePathOf(ByVal s As String) As String
    Dim pos As Integer

    pos = InStrRev(s, "\")
    If pos = 0 Then
        FilePathOf = ""
    Else
        FilePathOf = Left$(s, pos)
    End If
End Function

Public Function FileNameOf(ByVal s As String) As String
    Dim pos1 As Integer, pos2 As Integer

    pos1 = InStrRev(s, "\") + 1
    pos2 = InStrRev(s, ".")
    If pos2 = Len(s) Then pos2 = pos2 + 1
    If pos2 = 0 Then pos2 = Len(s) + 1
    FileNameOf = Mid$(s, pos1, pos2 - pos1)
End Function

Public Function FileExtOf(ByVal s As String) As String
    Dim pos As Integer

    pos = InStrRev(s, ".")
    If pos = 0 Then
        FileExtOf = ""
    Else
        FileExtOf = Mid$(s, pos + 1)
    End If
End Function

Public Function FileNameExtOf(ByVal s As String) As String
    FileNameExtOf = Mid$(s, InStrRev(s, "\") + 1)
End Function
于 2012-01-31T20:22:48.893 に答える
1

次に、問題のファイルをアクティブ化します。

Function getname()

arr = Split(ActiveDocument.FullName, "\")
Debug.Print arr(UBound(arr))

End Function

Wordを使用していると思いますので、「ActiveDocument」です。必要に応じて、これを「ActiveWorksheet」などに変更します

于 2012-02-05T00:52:44.220 に答える
0

「シンプルな方がいい!(該当するセル位置R1C1、およびパスの文字列長に置き換えてください)

Dim TheFile As String  
Dim TheFileLessPath As String  

Function getname()  
Workbooks.Open filename:=TheFile  
TheFileLessPath = Mid(TheFile, 12, 7)

ActiveCell.FormulaR1C1 = TheFileLessPath
End Function
于 2014-05-01T00:02:36.683 に答える
0

この場合、Application.GetOpenFilename()を使用しているため、ファイルが物理的にディスク上に存在することが確実であるため、最も簡単なアプローチはDir()を使用することです。

fileName = Dir(filePath)

完全なコードは次のとおりです。

Dim fileName, filePath As Variant

filePath = Application.GetOpenFilename("Excel files (*.xlsm), *.xlsm", , "Select desired file", , False)

If filePath = False Then
    MsgBox "No file selected.", vbExclamation, "Sorry!"
    Exit Sub
Else

    'Remove path from full filename
    fileName = Dir(filePath)

    'Print file name (with extension)
    MsgBox "File selected." & vbCr & vbCr & fileName, vbInformation, "Sucess!"

End If
于 2017-03-23T06:04:28.817 に答える