標題:
[發問]
取出字串的問題
[打印本頁]
作者:
modelcrazyer
時間:
2016-10-19 22:31
標題:
取出字串的問題
各位高手:
問個不算難的問題,但是因為腦袋忽然轉不過來所以來這跟大家請益
我想從 K:\aaaa\bbbb\AAAA.xlsx 或 K:\aaaa\bbbb\AAAA.xls
取出AAAA要怎樣最快
謝謝!!
作者:
GBKEE
時間:
2016-10-20 06:50
回復
1#
modelcrazyer
試試看
Option Explicit
Sub EX()
Dim A
A = UCase("K:\aaaa\bbbb\AAAA.Xlsx")
A = Mid(A, 1, InStr(A, ".XLS") - 1)
'InStr 函數 傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
A = Mid(A, InStrRev(A, "\") + 1)
'InStrRev函數 傳回一個字串在另一個字串中出現的位置,從字串的末尾算起。
MsgBox A
End Sub
複製代碼
作者:
准提部林
時間:
2016-10-20 10:11
本帖最後由 准提部林 於 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) '取最後一段再以"."分割取前段
作者:
modelcrazyer
時間:
2016-10-20 21:06
非常感謝兩位的回答,讓我多學了InStrRev這個用法,不過我想請問我嘗試用這個語法如下
filename=k:\aaa\AAA.xlsx
test=(filename,"\")
MsgBox test
都會出現3
請問問題在哪
作者:
准提部林
時間:
2016-10-20 22:56
回復
4#
modelcrazyer
這是哪裡學的???
VBA沒有這種用法!
作者:
modelcrazyer
時間:
2016-10-21 11:33
sorry打錯了應該是
filename=k:\aaa\AAA.xlsx
test=InStrRev(filename,"\")
MsgBox test
作者:
Joforn
時間:
2016-10-22 21:00
回復
6#
modelcrazyer
如果你是要從路徑中取出文檔名的話,送你一好用一點的函數,這個程式的特點是容錯性要好一些:
#If VBA7 Then
Private Declare PtrSafe Function PathRemoveBackslashW Lib "shlwapi.dll" (ByVal pszPath As LongPtr) As Long
Private Declare PtrSafe Function PathStripPathW Lib "shlwapi.dll" (ByVal pszPath As LongPtr) As Long
Private Declare PtrSafe Function PathRemoveExtensionW Lib "shlwapi.dll" (ByVal pszPath As LongPtr) As Long
Private Declare PtrSafe Function lstrlenW Lib "kernel32.dll" (ByVal lpString As LongPtr) As Long
#Else
Private Declare PtrSafe Function PathRemoveBackslashW Lib "shlwapi.dll" (ByVal pszPath As Long) As Long
Private Declare PtrSafe Function PathStripPathW Lib "shlwapi.dll" (ByVal pszPath As Long) As Long
Private Declare PtrSafe Function PathRemoveExtensionW Lib "shlwapi.dll" (ByVal pszPath As Long) As Long
Private Declare PtrSafe Function lstrlenW Lib "kernel32.dll" (ByVal lpString As Long) As Long
#End If
Public Function ExtractFileName(ByVal FileName As String, Optional ByVal ExtensionReturn As Boolean = True) As String
Dim I As Long
Dim strPath As String
#If VBA7 Then
Dim ptrFileName As LongPtr
#Else
Dim ptrFileName As Long
#End If
FileName = Trim$(FileName) & String(5, vbNullChar)
ptrFileName = StrPtr(FileName)
PathRemoveBackslashW ptrFileName
PathStripPathW ptrFileName
If Not ExtensionReturn Then PathRemoveExtensionW ptrFileName
I = lstrlenW(ptrFileName)
If I > 0 Then ExtractFileName = Trim$(Left$(FileName, I))
End Function
複製代碼
下面的程式是測試用的:
Sub Test()
Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.xlsx ", False)
Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.01.xlsx ", False)
Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA\ ", False)
Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA", False)
Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.xlsx ", True)
Debug.Print ExtractFileName("K:\aaaa\bbbb\AAAA.01.xlsx ", True)
End Sub
複製代碼
作者:
jackyq
時間:
2016-10-23 00:12
Debug.Print createobject("scripting.filesystemobject").getbasename(filename)
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)