2012-07-06 125 views
0

背景:我想从TextBox中使用特定的输入文本作为SaveAs对话框中的默认文件名。使用VBA宏在Word中获取TextBox的值,但是在Word模板中

我已经在我的文档中实现以下VBA脚本,一个Word 2010模板.dotm

Sub FileSaveAs() 

'for testing 
Dim fileName As String 
fileName = Me.tb_myTextBox.Value & "_MyFileNameToSave" 
MsgBox fileName 

'use specific file name in save dialog 
With Dialogs(wdDialogFileSaveAs) 
    .Name = fileName 
    .Show 
End With 

End Sub 

它工作正常,当我运行它。我保存了.dotm,关闭它并从Windows资源管理器重新打开它(表示为“最终用户”)。 但在这种情况下,意味着在打开模板文档作为“最终用户”之后(以便我可以保存新文档而不覆盖模板),即使我输入了文本框的内容/值也是空的一些东西进入它。

那么,怎样才能在模板的“文档模式”中读出TextBox的数据呢?

+0

文本框在哪里? – 2012-07-07 11:48:48

+0

您应该编辑您的问题以分享您的确切步骤,我不明白哪些不适合您。此外,您的代码不完整,任何提供帮助的人都需要填写空格,这可能会导致混淆。 – JohnZaj 2012-07-07 14:38:08

+0

好的,新的解释尝试......有两种情况: - (1)编辑模板,如果保存它,它又是.dotm。在这种情况下,所有脚本都可以正常工作。 (2)将模板作为“最终用户”(而不是作为模板作者)打开。如果用户点击保存按钮,文档将保存为.doc而不是.dotm。在这种情况下,脚本不起作用! btw:代码不完整? * confused * – Chris 2012-07-09 07:02:19

回答

1

如何在模板的“文档模式”下读出TextBox的数据?

不确定你的意思。这个工作对我来说:

创建表单:

Private Sub btn_OK_Click() 
    Dim fileName As String 
    fileName = tb_myTextBox.Value & "_MyFileNameToSave" 
    With Dialogs(wdDialogFileSaveAs) 
     .name = fileName 
     .Show 
    End With 
End Sub 

创建子打电话这种形式:

Sub FileSaveAs() 
    UserForm1.Show 
End Sub 

这是所有保存在模板/ .dotm。

现在,从模板创建一个文档(双击模板以启动文档)。 Alt + F8并从模板运行宏(您可能必须从“宏”中下拉菜单中选择模板)。结果:我的表单出现了,我为文档输入了一个名称,按下确定,然后出现Word Save As对话框,并显示了我给文档的名称。

+0

感谢您的回复! 问题是,我没有额外的保存按钮。在用户点击Save(As)按钮/菜单项后,应该(自动)调用“FileSaveAs()”子功能。 – Chris 2012-07-09 09:29:17

+0

因此FileSaveAs不会拦截用户执行File |操作另存为?我不明白这个问题,所以我需要重新创建它。 – JohnZaj 2012-07-12 15:20:28

+0

不,我的Sub是在用户单击File |时调用的另存为)。所以这个函数的调用工作正常!但TextField位于文档中,而不是以额外的用户形式存在。也看看我在这个问题上的评论。很奇怪,为什么所有的都在案例1中工作,但不是在案例2中: - / – Chris 2012-07-13 10:24:52