【问题标题】:Get value of TextBox in Word by but in Word template通过但在Word模板中获取Word中TextBox的值
【发布时间】:2012-07-06 13:44:57
【问题描述】:

背景:我想使用 TextBox 中输入的特定文本作为 SaveAs 对话框中的默认文件名。

我在我的文档中实现了以下 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 的内容/值也是空的进入它。

那么,如何在模板的“文档模式”中读出TextBox的数据呢?

【问题讨论】:

  • 您应该编辑您的问题以分享您的确切步骤,我不明白什么不适合您。此外,您的代码不完整,任何提供帮助的人都需要填写空白,这可能会导致混淆。
  • 好吧,新的解释尝试...有两种情况: - (1)编辑模板,如果你保存它,它又是.dotm。在这种情况下,脚本一切正常。 - (2) 以“最终用户”(而不是模板作者)身份打开模板。如果用户单击保存按钮,文档将保存为 .doc 而不是 .dotm。在这种情况下,脚本不起作用!顺便说一句:代码不完整的地方? 困惑
  • @SiddharthRout:TextBox 位于页面上(根级别)。 VBA 脚本保存在“本文档”源代码中(而不是模块中)。
  • 你解决了吗?如果没有,我可以引导你朝着正确的方向前进……
  • 文本框是在用户表单中还是文档中的图形文本框?如果您的文档是真正的 Word 模板,而不仅仅是要遵循的格式或示例文档,那么在使用时不会打开它。而是创建了一个新的、未命名的文档。

标签: vba ms-word word-template


【解决方案1】:

据推测,OP 的意图大致如下:

Sub FileSaveAs()
Dim StrNm As String
With ActiveDocument
  StrNm = Split(.Shapes(1).TextFrame.TextRange.Text, vbCr)(0) & "_MyFileNameToSave"
  'use specific file name in save dialog
  With Dialogs(wdDialogFileSaveAs)
    .Name = StrNm
    .Show
  End With
End With
End Sub

其中 .Shapes(1) 标识特定的文本框 Shape 对象。

【讨论】:

    【解决方案2】:

    如何在模板的“文档模式”中读出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 来调用这个表单:

     Sub FileSaveAs()
        UserForm1.Show
    End Sub
    

    这一切都保存在模板/.dotm 中。

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

    【讨论】:

    • 感谢您的回复!问题是,我没有额外的保存按钮。在用户单击 Save(As) 按钮/菜单条目后,应(自动)调用“FileSaveAs()”子函数。
    • 所以 FileSaveAs 不会拦截用户执行 File |另存为?我不明白这个问题,所以我需要重新创建它。
    • 不,当用户单击 File | 时会调用我的 Sub另存为)。所以函数的调用工作正常!但是 TextField 位于文档中,而不是位于额外的用户表单中。也看看我在问题中的评论。很奇怪,为什么所有情况都适用于案例 1,但不适用于案例 2。:-/
    猜你喜欢
    • 2013-02-04
    • 2015-12-28
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多