換句話說,我需要在調用Application.GetOpenFileName()
方法之後做一些字符串處理嗎?如何獲取文件名而不是打開文件的整個文件路徑?
回答
我正在使用這些函數進行文件名處理。最後一個是你需要的一個。
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
+1,但我更願意使用「\」作爲分隔符的分割功能。 – JimmyPena 2012-01-31 21:24:19
爲什麼要重新發明輪子並寫下大量的樣板代碼?只需使用現有的FileSystemObject ... – 2012-02-01 07:53:11
FileSystemObject位於外部DLL中。這可能會導致問題,如果您的開發環境版本與客戶環境中的版本不同,那麼請參閱該版本。您可以使用後期綁定,但無法再享受智能感知。 – 2012-02-01 13:22:45
爲什麼重新發明輪子並寫下大量的樣板代碼?只需使用現有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.
您將需要設置一個參考如下: 工具> References ...>在Microsoft Scripting Runtime旁邊設置複選標記。
否則使用後期綁定:
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
好點。不知道FileSystemObject類。感謝您指出了這一點。 – stanigator 2012-02-01 19:00:13
是的,爲什麼添加一個2行函數來解析一個字符串,當你可以導入整個類時,並使用OOP ...來解析一個字符串... – 2013-11-20 14:34:47
因爲它已經被寫入並且已經被調試過了,並且沒有下行使用它(除非有人能給我一個實際的具體例子)。你聽起來像OOP是神祕的,但真正使用'FileSystemObject'是非常標準的東西。 – 2013-11-21 07:51:12
激活有問題的文件,然後:
Function getname()
arr = Split(ActiveDocument.FullName, "\")
Debug.Print arr(UBound(arr))
End Function
我假設你使用Word,因而有 「的ActiveDocument」。在適當情況下將其更改爲「ActiveWorksheet」等
'更簡單永遠是更好的! (替代適用小區位置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
在這種情況下,您正在使用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
- 1. C++,如何打開文件而不必鍵入整個文件路徑
- 2. 只提取文件名而不是路徑+文件名
- 3. 獲取文件路徑的文件名
- 4. 如何在extjs中獲取文件夾路徑而不是文件路徑
- 5. 從文件路徑獲取文件名
- 6. 從完整路徑獲取文件名
- 7. 獲取文件的路徑和文件名與ASP:文件上傳,不想文件...只是路徑和名稱
- 8. Directory.GetFiles:如何獲取唯一的文件名,而不是完整的路徑?
- 9. 我如何獲得打開文件的文件路徑?
- 10. 讓nginx緩存文件只取決於文件名(而不是完整路徑)
- 11. 如何打開多個文件路徑?
- 12. 如何從路徑獲取文件名?
- 13. GEt唯一的文件名而不是整個路徑
- 14. 從完整文件路徑獲取文件夾名稱
- 15. 如何從文件路徑獲取父文件夾的名稱?
- 16. 從路徑中打開文件不知道完整的文件名(python)
- 17. 從打開的文件獲取完整路徑 - C#
- 18. 重命名文件,而不是文件路徑中的目錄
- 19. 如何獲取通過獲取打開文件名應用程序命令打開的文件的文件名
- 20. 如何通過文件的名稱獲取文件的完整路徑
- 21. 如何獲取當前打開的文件夾的文件路徑?
- 22. 如何獲取在java程序中打開的文件的完整文件名和路徑?
- 23. 如何從VB6中的文件完整路徑獲取文件磁貼(名稱)?
- 24. 如何在文件上傳控制中獲取文件名的完整路徑
- 25. 如何從vC++文件的完整路徑中獲取文件名?
- 26. 如何從文件名獲取文件路徑和目錄?
- 27. 如何從文件描述符獲取文件名和路徑?
- 28. 獲取sharedpreferences文件的文件路徑
- 29. 如何獲取打開的文件的文件名?
- 30. 從文件名獲得文件路徑
你的意思是Excel的'Application.GetOpenFilename'方法? – JimmyPena 2012-01-31 20:36:09
是的。我的錯。 – stanigator 2012-01-31 21:06:46