换句话说,我需要在调用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. 获取文件路径的文件名
- 2. 从文件路径获取文件名
- 3. 从完整路径获取文件名
- 4. 我如何获得打开文件的文件路径?
- 5. GEt唯一的文件名而不是整个路径
- 6. 如何从路径获取文件名?
- 7. 从完整文件路径获取文件夹名称
- 8. 如何从文件路径获取父文件夹的名称?
- 9. 重命名文件,而不是文件路径中的目录
- 10. 如何从VB6中的文件完整路径获取文件磁贴(名称)?
- 11. 如何从文件名获取文件路径和目录?
- 12. AjaxFileUpload fileName是完整路径,而不仅仅是文件名
- 13. 从文件名获得文件路径
- 14. 如何获取图标名称的完整文件路径?
- 15. 如何在获取路径名的另一个类中打开文件
- 16. 如何在javascript中输入完整文件名时获取文件路径?
- 17. 获取从一个文件的完整路径只有文件名
- 18. 使用文件上传控件获取完整文件路径
- 19. 如何从一个文件输入获取该文件的完整路径
- 20. 如何通过提供文件名来获取完整路径?
- 21. 如何从完整路径获取文件名?
- 22. 从GtkTreeView获取完整文件路径
- 23. 获取S3完整路径文件
- 24. GWT FileUpload获取文件完整路径
- 25. 获取文件的路径
- 26. c#如何从'打开'获取文件路径?
- 27. 如何获取文件上游文件夹的两个目录的路径名?
- 28. 如何从文件路径名中提取文件名?
- 29. Kivy从两个不同的文件获取文件路径
- 30. 张贴的文件无法获取文件名的路径
你的意思是Excel的'Application.GetOpenFilename'方法? – JimmyPena 2012-01-31 20:36:09
是的。我的错。 – stanigator 2012-01-31 21:06:46