文件名没有扩展名VBA

Lin*_*iel 16 excel vba excel-vba

我需要通过VBA获取没有扩展名的文件名.我知道ActiveWorkbook.Name属性,但如果用户Hide extensions for known file types关闭Windows属性,我的代码的结果将是[Name.Extension].如何只返回独立于windows属性的工作簿名称?

我尝试甚至ActiveWorkbook.Application.Caption但我无法自定义此属性.

Rub*_*uck 56

这里给出的答案可能在有限的情况下有效,但肯定不是最好的方法.不要重新发明轮子.该文件系统对象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
Run Code Online (Sandbox Code Playgroud)

添加对脚本库的引用的说明

  • 我更喜欢后期绑定 - `Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")` (6认同)
  • RbeerDuck,当我运行此命令时,出现编译错误"用户定义的类型未定义" (4认同)
  • 不知道那里有!很好的答案. (3认同)
  • 抱歉-应该给自己解释一下。如果您在资源管理器中隐藏了扩展名,并且文件名很愚蠢,例如“ Myworkbook.csv.xlsx”(很少见),它将无法正常工作。在这种情况下,.Name属性是“ Myworkbook.csv”,而GetBaseName返回“ Myworkbook”,这是不正确的。此外:隐藏扩展名时,如果尝试将附带的fso函数`GetExtensionName`与`Workbook.Name`属性一起使用,则不会得到任何答案。更好的做法是只使用`Workbook.Fullname`属性,该属性将返回相同的字符串,而不管Explorer的“隐藏扩展名”设置如何。 (3认同)
  • @ ThreeStarProgrammer57我认为你应该在你建议它不起作用之前尝试一下. (2认同)

小智 11

简单,但对我来说效果很好

FileName = ActiveWorkbook.Name 
If InStr(FileName, ".") > 0 Then 
   FileName = Left(FileName, InStr(FileName, ".") - 1) 
End If
Run Code Online (Sandbox Code Playgroud)

  • 如果文件名中有更多点,请使用 InStrRev 代替 InStr 的 (9认同)
  • 如果文件名中有更多点,这将失败。 (2认同)
  • +1 我发现这个答案很有帮助。提示:如果文件名中有更多点,请使用“.x”甚至“.xls”。 (2认同)

bp_*_*bp_ -1

strTestString = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
Run Code Online (Sandbox Code Playgroud)

完整学分:http ://mariaevert.dk/vba/?p=162

  • 如果没有文件扩展名但名称中有一个点,则此方法不起作用。 (3认同)
  • 想清楚了。您正在使用 InStrRev 来查找点。那么,如果文件名是“John.And.Mary.Spreadsheet”,因为它们打开了“隐藏扩展名”选项,该怎么办?现在它认为该文件是“John.And.Mary”,文件扩展名是“Spreadsheet”。 (3认同)
  • OP是否有可能是错的,因此寻求帮助?或者说所有的操作都是绝对正确的吗? (3认同)