我一直在尝试从文件结构中查找扩展名,为此,我很难使用InstrRev(filename,“。”),但是与其返回4,而是返回30,这与Instr的方法相同...

有谁知道会导致excel向2个相反的函数给出相同结果的怪异错误?

亲切的问候,
丹尼尔

最佳答案

InstrInstrRev之间的区别是它在寻找某个子字符串的方向。 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/

10-13 08:41