VBA故障功能InstrRev = Instr

时间:2016-12-15 08:24:08

标签: excel vba function

我一直试图从文件结构中找到扩展名,为此我很难使用InstrRev(文件名,"。")而不是返回4,它是'返回30,与Instr一样......

任何人都知道一个奇怪的错误会导致excel给2个相反的函数提供相同的结果吗?

亲切的问候, 丹尼尔

2 个答案:

答案 0 :(得分:9)

InstrInstrRev之间的区别在于它寻找某个子字符串的方向。 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,但是返回的是找到的位置是从头开始而不是从头开始。