2012-01-31 49 views

回答

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 
+1

+1,但我更愿意使用“\”作为分隔符的分割功能。 – JimmyPena 2012-01-31 21:24:19

+1

为什么要重新发明轮子并写下大量的样板代码?只需使用现有的FileSystemObject ... – 2012-02-01 07:53:11

+1

FileSystemObject位于外部DLL中。这可能会导致问题,如果您的开发环境版本与客户环境中的版本不同,那么请参阅该版本。您可以使用后期绑定,但无法再享受智能感知。 – 2012-02-01 13:22:45

8

为什么重新发明轮子并写下大量的样板代码?只需使用现有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") 
+0

好点。不知道FileSystemObject类。感谢您指出了这一点。 – stanigator 2012-02-01 19:00:13

+0

是的,为什么添加一个2行函数来解析一个字符串,当你可以导入整个类时,并使用OOP ...来解析一个字符串... – 2013-11-20 14:34:47

+1

因为它已经被写入并且已经被调试过了,并且没有下行使用它(除非有人能给我一个实际的具体例子)。你听起来像OOP是神秘的,但真正使用'FileSystemObject'是非常标准的东西。 – 2013-11-21 07:51:12

1

激活有问题的文件,然后:

Function getname() 

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

End Function 

我假设你使用Word,因而有 “的ActiveDocument”。在适当情况下将其更改为“ActiveWorksheet”等

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