根据我从谷歌搜索中可以看出,我以前没有想过这个问题,并且它非常具体。
我有一个嵌入了vba代码的excel电子表格模板(' xltm'文件),我想找到模板打开的电子表格中模板的路径。如果这没有意义,我会给出一个问题的例子:
用户通过双击模板文件打开新的电子表格。模板文件位于C:\ My Stuff'举个例子。 他们填写单元格,然后在询问他们想要调用它之后单击创建文本文件的按钮。 然后代码使用' Application.ActiveWorkbook.path'将文件保存在电子表格打开的相同位置(C:\ My Stuff)。 导致权限错误,因为电子表格尚未保存,因此,没有路径。 所以我的问题是:有没有办法找到原始模板的文件路径?在示例中,这将是C:\ My Stuff。
我可以让用户在创建文本文件之前保存文件,或者我可以使用xlsm文件。但是模板可以最大限度地减少他们弄乱文件格式化的可能性,而且我不是每次都要求他们保存文件,他们可能会复制并粘贴大部分数据,然后只想要文本文件,而不是每次都有不同的电子表格。
希望这是有道理的,并且感谢你提前得到任何答案。
答案 0 :(得分:4)
所以我的问题是:有没有办法找到原始模板的文件路径?在示例中,这将是C:\ My Stuff。
你不能。
我确信这不是您正在寻找的答案,但不幸的是这就是答案。
如果您双击资源管理器中的模板以创建文件,那么AFAIK就无法使用MS Word
oDoc.AttachedTemplate
中找到该路径或模板名称
<强>替代强>
在您的模板中,将此代码放在ThisWorkbook
Private Sub Workbook_Open()
ChDir "C:\Blah Blah" '<~~ Change this to the templates path
End Sub
然后,通过双击模板创建的新工作簿,您可以使用CurDir
来获取该路径。
上述方法的缺点
Workbook_Open()
代码转移到新文件答案 1 :(得分:0)
有一种方法可以完成您想要的...。原始模板的名称或路径未知,因为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
的列表中。点击OK
按钮:
现在我提到了一点额外的VBA ...
打开VBA编辑器窗口,单击Tools
> References
,然后添加Microsoft Office X Object Library
的引用(假设您还没有),其中X是您的Office版本。如果它没有出现在列表中,则必须浏览它,并且它可能存在于不同的位置,具体取决于您的Windows和Office版本。
这是您已经拥有它的 IF 的显示方式。在我的情况下,它已经在 中,并且已选中该框:
如果您向下滚动到列表中间的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