返回列表 上一主題 發帖

[發問] 取出字串的問題

[發問] 取出字串的問題

各位高手:
問個不算難的問題,但是因為腦袋忽然轉不過來所以來這跟大家請益
我想從 K:\aaaa\bbbb\AAAA.xlsx 或 K:\aaaa\bbbb\AAAA.xls
取出AAAA要怎樣最快
謝謝!!

回復 1# modelcrazyer
試試看
  1. Option Explicit
  2. Sub EX()
  3.     Dim A
  4.     A = UCase("K:\aaaa\bbbb\AAAA.Xlsx")
  5.     A = Mid(A, 1, InStr(A, ".XLS") - 1)
  6.     'InStr 函數 傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
  7.     A = Mid(A, InStrRev(A, "\") + 1)
  8.     'InStrRev函數 傳回一個字串在另一個字串中出現的位置,從字串的末尾算起。
  9.     MsgBox A
  10. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 准提部林 於 2016-10-20 10:17 編輯

PH = "K:\aaaa\bbbb\AAAA.xlsx"
PH = Split(Mid(PH, InStrRev(PH, "\") + 1), ".")(0)


PH = Split("K:\aaaa\bbbb\AAAA.xlsx", "\") '文字分割)
PH = Split(PH(UBound(PH)), ".")(0) '取最後一段再以"."分割取前段

TOP

非常感謝兩位的回答,讓我多學了InStrRev這個用法,不過我想請問我嘗試用這個語法如下
filename=k:\aaa\AAA.xlsx
test=(filename,"\")
MsgBox test
都會出現3
請問問題在哪

TOP

回復 4# modelcrazyer


這是哪裡學的???
VBA沒有這種用法!

TOP

[版主管理留言]
  • GBKEE(2016/10/21 12:26): filename="k:\aaa\AAA.xlsx"

sorry打錯了應該是
filename=k:\aaa\AAA.xlsx
test=InStrRev(filename,"\")
MsgBox test

TOP

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

Debug.Print                                                     createobject("scripting.filesystemobject").getbasename(filename)

TOP

        靜思自在 : 原諒別人就是善待自己。
返回列表 上一主題