我建议使用内置函数(例如MID()和INSTRREV())而不是创建外部对象来做你想做的事。
您发布的“答案”在正确的轨道上-尽管您以问题的形式发布了它,我认为它最好作为对原始问题的编辑。
回答您的问题:
该方法有效吗? 是的。
你会遇到问题吗? 对于这个应用程序 - 可能不是。但我建议不要对扩展名中的字符数进行硬编码。我看不到 Solidworks 会很快改变他们的绘图扩展名 - 但这是可能的(例如,看看 Microsoft:.xls 到 .xlsx 等),它限制了您处理其他扩展名(例如 .Slpdrt、.Sldasm 等)的能力. )
此外,我将转换为一个变量以降低在COM 对象swDraw.GetPathName
上重复调用该函数的开销。swDraw
例如
Dim FilePath as String
FilePath= swDraw.GetPathName
你可以在一行中做你想做的事:
Mid(FilePath, InStrRev(FilePath, "\") + 14, InStrRev(FilePath, ".") - InStrRev(FilePath, "\") - 14)
测试:
Sub QuickTest()
Const FilePath= "C:\Users\m.jones\Desktop\New folder (2)\LS4102-104-01 Fixed Table.slddrw"
MsgBox Mid(FilePath, InStrRev(FilePath, "\") + 14, InStrRev(FilePath, ".") - InStrRev(FilePath, "\") - 14)
End Sub
您可以使用变量使其更易于阅读:
Sub QuickTest()
Const FilePath= "C:\Users\m.jones\Desktop\New folder (2)\LS4102-104-01 Fixed Table.slddrw"
Dim MidStart As Long
MidStart = InStrRev(FilePath, "\") + 14
Dim MidEnd As Long
MidEnd = InStrRev(FilePath, ".")
Dim MyText As String
MyText = Mid(FilePath, MidStart, MidEnd - MidStart)
MsgBox MyText
End Sub