VBA故障functionInstrRev = Instr

我一直在试图从文件结构中find扩展名,为此我使用InstrRev(filename,“。”)而不是返回4,它返回30,就像Instr一样。

任何人都知道一个奇怪的错误,会导致Excel发出相同的结果2相反的function?

亲切的问候,丹尼尔

InstrInstrRev之间的区别是它正在寻找某个子string的方向。 Instr InstrRev都在寻找,而InstrRev正在从string的末尾开始。 结果字符位置始终从string的开始(从左到右)计数。

我想在你的例子中,你只有一个"." 在你的道路上,这就是为什么结果是相同的。

让我们考虑一个你正在寻找“Clean”文件名的例子,所以你正在寻找最后的\ ,那么你会发现InStrRev函数非常有用(例如见下面的代码)。

对于你的情况 :如果你想find扩展名,比方说结果是31,然后使用Mid函数:

 ExtensionStr = Mid(FullName, dotRes + 1, Len(FullName) - dotRes) ' < --- returns "xlsm" 

dotRes = 31, ExtensionStr是一个表示干净的扩展名的string)


代码示例

 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