我一直在尝试从文件结构中查找扩展名,为此,我很难使用InstrRev(filename,“。”),但是与其返回4,而是返回30,这与Instr的方法相同...
有谁知道会导致excel向2个相反的函数给出相同结果的怪异错误?
亲切的问候,
丹尼尔
最佳答案
Instr
和InstrRev
之间的区别是它在寻找某个子字符串的方向。 Instr
从头到尾看,而InstrRev
从字符串的头到头看。
结果字符位置始终从字符串的开头(从左到右)开始计数。
我想在您的示例中,您的路径中只有一个"."
,这就是为什么结果相同的原因。
让我们考虑一下您正在寻找“Clean”文件名的情况,因此您正在寻找最后一个\
,那么您会发现InStrRev
函数非常有用(例如,请参见下面的代码)。
对于您的情况:如果要查找扩展名,假设结果为31,则使用Mid
函数:
ExtensionStr = Mid(FullName, dotRes + 1, Len(FullName) - dotRes) ' < --- returns "xlsm"
(
dotRes
= 31,ExtensionStr
是代表纯扩展名的字符串)代码示例
Sub Instr_InstrRev()
Dim instrRes As Variant
Dim instrRevRes As Variant
Dim dotRes As Variant
Dim ExtensionStr As String
Dim FullName As String
FullName = "C:\Users\Radoshits\Desktop\SO2.xlsm"
instrRes = InStr(FullName, "\") ' <-- returns 3
instrRevRes = InStrRev(FullName, "\") ' <-- returns 27
' to answer your post how to find the "clean" extension name
dotRes = InStr(FullName, ".") ' <-- returns 31
ExtensionStr = Mid(FullName, dotRes + 1, Len(FullName) - dotRes) ' < --- returns "xlsm"
End Sub
关于excel - VBA功能故障InstrRev = Instr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41159494/