我开发了一个包含用户数据的.xlam
加载项。换句话说,用户可以决定通过ThisWorkbook.IsAddIn = False
显示加载项文件来编辑内容,该内容对加载项本身起作用。
然而,当用户处理加载项的电子表格而不是正常情况时,用户不应该执行某些操作加载项正在运行的工作簿。
从这里开始,我需要检查文件扩展名并在某些特定的"禁止"程序可能会被调用。我做了以下测试:
ThisWorkbook.IsAddIn = True
,则ThisWorkbook.FileFormat = 55
; ThisWorkbook.IsAddIn = False
,则ThisWorkbook.FileFormat = 52
; 这不是我所期待的。只需在加载项设置为可见时执行FullName
请求 :
ThisWorkbook.IsAddIn = False
MsgBox ThisWorkbook.FullName
我可以读到我的文件仍被命名为C:\myFile.xlam
,即使在那一刻对用户可见。因此,即使在运行时可见,我也希望ThisWorkbook.FileFormat
提升55
。但显然,它并没有做到这一点。
我需要确保在用户创建的可能的.xlsm文件上区分加载项(.xlam)上的修改和修改,从中使用我的添加-in 。
为什么我的加载项的FileFormat
等于xlsm
的加载项,如果文件明确xlam
与55
而不是52
相关联{1}}?我哪里错了?
在功能区上,有一个从加载项创建并添加的按钮,该加载项连接到无法运行到加载项中的宏。所以我想到的检查是这样的:
If ActiveWorkbook.FileFormat = 55 Then
Exit Sub
End If
但是,如上所述,此检查不会执行,因为加载项在设置为FileFormat = 52
的时刻有.IsAddIn = False
;因此,即使ActiveWorkbook
是加载项,我不想要运行宏,检查也会失败,宏仍然会运行。
答案 0 :(得分:1)
.IsAddIn
workbook property simply indicates whether the file is being run as an Add-in。它不会更改文件格式。来自文档:
将此属性设置为True时,工作簿具有以下特征:
- 如果在工作簿打开时进行了更改,则不会提示您保存工作簿。
- 工作簿窗口将不可见。
- 工作簿中的任何宏都不会显示在“宏”对话框中(通过指向“工具”菜单上的“宏”并单击“宏”来显示)。
- 工作簿中的宏仍然可以从“宏”对话框运行,即使它们不可见。此外,宏名称不需要使用工作簿名称限定。
- 打开工作簿时按住SHIFT键无效。
我觉得这是你试图解决的真正问题:
但是,当用户处理加载项的电子表格而不是加载项的正常工作簿时,用户不应该执行某些操作。运行
如果您可以指定您尝试限制的操作,也许最好?可能有更好的方法来解决这个问题。
答案 1 :(得分:1)
目前我已经找到了四种可能的解决方案,我将在这里发布,以防有人遇到同样的问题:
"特殊代码"如果全名不同,则无法运行:
If ActiveWorkbook.FullName = ThisWorkbook.FullName Then
Exit Sub
End If
'"special code"
"特殊代码"如果此工作簿当前不是加载项:
,则无法运行If ThisWorkbook.IsAddIn = False Then
Exit Sub
End If
'"special code"
"特殊代码"如果活动工作簿是加载项工作簿:
,则无法运行If ActiveWorkbook Is ThisWorkbook Then
Exit Sub
End If
'"special code"
"特殊"如果文件的扩展名为xlam:
,则不会运行代码If Right(ActiveWorkbook.FullName,4) = "xlam" Then
Exit Sub
End If
上述四个解决方案可以正常运行,但问题仍然存在:为什么FileFormat
属性会因ThisWorkbook.IsAddIn
False
而改变同一文件比True
?