我一直试图从文件结构中找到扩展名,为此我很难使用InstrRev(文件名,"。")而不是返回4,它是'返回30,与Instr一样......
任何人都知道一个奇怪的错误会导致excel给2个相反的函数提供相同的结果吗?
亲切的问候, 丹尼尔
答案 0 :(得分:9)
Instr
和InstrRev
之间的区别在于它寻找某个子字符串的方向。 Instr
从开始到结束都在寻找,而InstrRev
正在从字符串的末尾到开头。
结果字符位置始终从字符串的开头(从左到右)计算。
我想在你的例子中,你的路径中只有一个"."
,这就是结果相同的原因。
让我们考虑一个您正在寻找“干净”文件名的情况,因此您正在寻找最后一个\
,然后您会发现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
答案 1 :(得分:0)
InStrRev函数从结尾处发现string1内的sting2为true,但是返回的是找到的位置是从头开始而不是从头开始。