VBA故障functionInstrRev = Instr
我一直在试图从文件结构中find扩展名,为此我使用InstrRev(filename,“。”)而不是返回4,它返回30,就像Instr一样。
任何人都知道一个奇怪的错误,会导致Excel发出相同的结果2相反的function?
亲切的问候,丹尼尔
Instr
和InstrRev
之间的区别是它正在寻找某个子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