【问题标题】:How to get the file extension of the open workbook如何获取打开的工作簿的文件扩展名
【发布时间】:2021-05-25 06:57:31
【问题描述】:

如何确定打开的工作簿是否为模板 (.xltm)。基本上,我有一个模板。如果用户以 .xltm 文件的形式(右键单击 > 打开)打开模板并尝试运行宏,我应该阻止执行宏。 如果用户双击模板,它会以 .xlsm 格式打开,在这种情况下我没有问题。

有人可以帮我解决这个问题吗?提前致谢。

问候,

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你可以使用下面的例子来获取文件的扩展名

    Sub extd()
    
    Dim extFind As String
    Dim sFile As String
    
            Const FilePath As String = "C:\Users\aa\Desktop\devces.docx"
    
    
            sFile = Dir(FilePath & filename & "*")
    
            extFind = Right$(sFile, Len(sFile) - InStrRev(sFile, "."))
    
            MsgBox extFind
    End Sub
    

    【讨论】:

    • 我认为这个答案不能回答 OP 的问题。如果我们已经有了文件的路径/名称,这只是一个非常通用的代码,用于查找任何文件的扩展名。
    【解决方案2】:

    我也在寻找同样的东西。由于ActiveWorkbook.Name 依赖于Windows 属性Hide extensions for known file types(如果你隐藏它们.Name 不会返回扩展名),你可以使用Workbook.FileFormat。返回一个整数值,基于XlFileFormat enumeration。所以,检查:

    Option Explicit
    Sub sample()
        Debug.Print ActiveWorkbook.FileFormat
        Select Case ActiveWorkbook.FileFormat
            Case xlOpenXMLWorkbookMacroEnabled '52 xlsm
                Debug.Print "Its a workbook with macros enabled"
            Case xlOpenXMLTemplateMacroEnabled '53 xltm
                Debug.Print "Its a template with macros enabled"
            Case xlWorkbookDefault '51 xlsx
                Debug.Print "Its a workbook without macros"
        End Select
    End Sub
    

    Debug.Print 输出到中间窗口,你可以用Ctrl+G 或在VB 编辑器的视图菜单中打开它。

    【讨论】:

      【解决方案3】:

      使用下面的代码:

      'e.g. Active Workbook name = text.xlsx
      Dim wk AS Workbook: Set wk = ActiveWorkbook
      Dim fileExtension As String
      fileExtension = Right(wk.FullName, Len(wk.FullName) - InStrRev(wk.FullName, "."))
      'File Extension is now "xlsx" (without the .)
      

      fileExtension 现在将包含工作簿类型,可以根据需要使用。

      【讨论】:

        【解决方案4】:

        我喜欢使用FileSystemObject

        Dim FSO As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
        If FSO.GetExtensionName(ActiveWorkbook.FullName) = "xltm" Then
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-11
          • 1970-01-01
          • 1970-01-01
          • 2019-08-27
          相关资源
          最近更新 更多