作者:cxsw01 | 来源:互联网 | 2023-05-27 07:21
我需要通过VBA获取没有扩展名的文件名.我知道ActiveWorkbook.Name
属性,但如果用户Hide extensions for known file types
关闭Windows属性,我的代码的结果将是[Name.Extension].如何只返回独立于windows属性的工作簿名称?
我尝试甚至ActiveWorkbook.Application.Caption
但我无法自定义此属性.
1> RubberDuck..:
这里给出的答案可能在有限的情况下有效,但肯定不是最好的方法.不要重新发明轮子.该文件系统对象在Microsoft脚本运行时库已经做的正是这样的方法.它叫做GetBaseName.它按原样处理文件名中的句点.
Public Sub Test()
Dim fso As New Scripting.FileSystemObject
Debug.Print fso.GetBaseName(ActiveWorkbook.Name)
End Sub
Public Sub Test2()
Dim fso As New Scripting.FileSystemObject
Debug.Print fso.GetBaseName("MyFile.something.txt")
End Sub
添加对脚本库的引用的说明
RbeerDuck,当我运行此命令时,出现编译错误"用户定义的类型未定义"
不知道那里有!很好的答案.
抱歉-应该给自己解释一下。如果您在资源管理器中隐藏了扩展名,并且文件名很愚蠢,例如“ Myworkbook.csv.xlsx”(很少见),它将无法正常工作。在这种情况下,.Name属性是“ Myworkbook.csv”,而GetBaseName返回“ Myworkbook”,这是不正确的。此外:隐藏扩展名时,如果尝试将附带的fso函数`GetExtensionName`与`Workbook.Name`属性一起使用,则不会得到任何答案。更好的做法是只使用`Workbook.Fullname`属性,该属性将返回相同的字符串,而不管Explorer的“隐藏扩展名”设置如何。
@ ThreeStarProgrammer57我认为你应该在你建议它不起作用之前尝试一下.
2> 小智..:
简单,但对我来说效果很好
FileName = ActiveWorkbook.Name
If InStr(FileName, ".") > 0 Then
FileName = Left(FileName, InStr(FileName, ".") - 1)
End If