返回列表 上一主題 發帖

[發問] 取出字串的問題

回復 6# modelcrazyer

如果你是要從路徑中取出文檔名的話,送你一好用一點的函數,這個程式的特點是容錯性要好一些:
  1. #If VBA7 Then
  2.     Private Declare PtrSafe Function PathRemoveBackslashW Lib "shlwapi.dll" (ByVal pszPath As LongPtr) As Long
  3.     Private Declare PtrSafe Function PathStripPathW Lib "shlwapi.dll" (ByVal pszPath As LongPtr) As Long
  4.     Private Declare PtrSafe Function PathRemoveExtensionW Lib "shlwapi.dll" (ByVal pszPath As LongPtr) As Long
  5.     Private Declare PtrSafe Function lstrlenW Lib "kernel32.dll" (ByVal lpString As LongPtr) As Long
  6. #Else
  7.     Private Declare PtrSafe Function PathRemoveBackslashW Lib "shlwapi.dll" (ByVal pszPath As Long) As Long
  8.     Private Declare PtrSafe Function PathStripPathW Lib "shlwapi.dll" (ByVal pszPath As Long) As Long
  9.     Private Declare PtrSafe Function PathRemoveExtensionW Lib "shlwapi.dll" (ByVal pszPath As Long) As Long
  10.     Private Declare PtrSafe Function lstrlenW Lib "kernel32.dll" (ByVal lpString As Long) As Long
  11. #End If


  12. Public Function ExtractFileName(ByVal FileName As String, Optional ByVal ExtensionReturn As Boolean = True) As String
  13.   Dim I       As Long
  14.   Dim strPath As String
  15.   
  16.   #If VBA7 Then
  17.     Dim ptrFileName   As LongPtr
  18.   #Else
  19.     Dim ptrFileName   As Long
  20.   #End If
  21.   
  22.   FileName = Trim$(FileName) & String(5, vbNullChar)
  23.   ptrFileName = StrPtr(FileName)
  24.   PathRemoveBackslashW ptrFileName
  25.   PathStripPathW ptrFileName
  26.   If Not ExtensionReturn Then PathRemoveExtensionW ptrFileName
  27.   I = lstrlenW(ptrFileName)
  28.   If I > 0 Then ExtractFileName = Trim$(Left$(FileName, I))
  29. End Function
複製代碼
下面的程式是測試用的:
  1. Sub Test()
  2.   Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.xlsx ", False)
  3.   Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.01.xlsx ", False)
  4.   Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA\  ", False)
  5.   Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA", False)
  6.   
  7.   Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.xlsx ", True)
  8.   Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.01.xlsx ", True)
  9. End Sub
複製代碼
世界那麼大,可我想去哪?

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題