有一种方法可以做你想做的……有点。无法知道原始模板的名称或路径,因为 Excel 会对其进行即时复制以创建新工作簿,并且不会公开包含该信息的任何属性。但是,模板可以通过唯一标签来标识,然后可以在新工作簿中访问该标签。并且标签不必像秘密单元格、隐藏的工作表或隐藏的文本框那样时髦。它使用了一个很少提到的 Excel 内置功能,称为CustomDocumentProperties
.
为此,需要一些您可能不熟悉的额外 VBA 代码。具体来说,一个 VBA 项目对 MSO.DLL 的引用,即 Microsoft Office X 对象库,其中“X”是 office 的版本。就我而言,它是 Office 2007,即版本 12,所以它是Microsoft Office 12.0 Object Library
.
要给模板一个标签,只需向它添加一个自定义文档属性。这可以在您打开工作簿时直接从 Excel 主窗口完成,如下所示:
点击Office Button
>> ,Prepare
如下Properties
图:
这将打开带有各种文本框(如作者、标题等)的黄色文档属性栏:
然后点击Document Properties
> Advanced Properties
...
这将打开Workbook Properties
窗口:
- 单击
Custom
选项卡。
- 键入属性名称。
- 键入属性值。
- 单击
Add
按钮。
新的自定义属性将出现在Propertie
s 列表中。点击OK
按钮:
现在对于我提到的那一点额外的VBA......
打开 VBA 编辑器窗口,单击Tools
>References
并添加参考Microsoft Office X Object Library
(假设您还没有),其中 X 是您的 Office 版本。如果它没有出现在列表中,您将不得不浏览它,它可能位于不同的位置,具体取决于您的 Windows 和 Office 版本。
如果您已经拥有它,这就是它的显示方式。就我而言,它已经存在并且已选中该框:
如果您向下滚动到列表中间的 Microsoft 项目,但找不到它,请戳浏览按钮。请注意,如果它在列表中,但您错过了它,再次添加它不会有任何伤害。另外,有时这样做更容易,而不是盯着列表五分钟。
在我的 32 位 dev-beater 盒子上,路径如下。我认为这对于带有 64 位办公室的 64 位 Windows 也应该是相同的,但我不确定。
C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSO.DLL
在我的带有 32 位 Office 的 64 位 Windows 台式机上,它是:
C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE12\MSO.DLL
OFFICE12
如果不是,请记住将其更改为您拥有的 Office 版本。拥有它后,单击OK
按钮。
现在的代码...
在 VBAProject Explorer 中,双击ThisWorkbook
并添加以下代码。如果您已经有一个Sub Workbook_Open
,则必须将其集成到您认为合适的那个中。然后,一旦你看到它是如何工作的,你就可以根据需要使用它:
Private Sub Workbook_Open()
Dim xl As Excel.Application
Dim wb As Excel.Workbook
Dim dcps As Office.DocumentProperties
Dim dcp As Office.DocumentProperty
Dim tname As String
Const dq As String = """"
Set xl = Excel.Application
Set wb = xl.ActiveWorkbook
Set dcps = wb.CustomDocumentProperties
Set dcp = dcps.Item("ThisTemplateName")
tname = dcp.Value
MsgBox "This workbook was created from the template named " & dq & tname & dq & "..!"
End Sub