如何获取打开的工作簿的文件扩展名

时间:2014-12-07 10:56:14

标签: excel vba

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

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

此致

4 个答案:

答案 0 :(得分:2)

您可以使用以下示例来获取文件扩展名

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

答案 1 :(得分: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编辑器的视图菜单中打开它。

答案 2 :(得分:1)

使用以下代码:

'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现在将包含工作簿类型,您可以根据需要使用它。

答案 3 :(得分:0)

我喜欢使用 FileSystemObject

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