【问题标题】:Retrieve Userform textbox value from document vba从文档 vba 中检索用户窗体文本框值
【发布时间】:2021-12-20 15:53:01
【问题描述】:

一个我还没有找到答案的简单问题: 我有一个包含多个用户窗体的 Word 模板文档。

现在在 AutoNew() 上,基于此模板的新文档应首先将隐藏用户表单中的值(当前值存储在模板中的某处)读取到全局变量中以进行进一步处理。 现在 vba 如何从文档中读取用户表单中的值而通常不需要显示用户表单?这些用户表单仅在 [很少] 需要时用于更改值,并且不应自动显示(它们是通过控件打开的,这些控件稍后会在一切正常后消失)。

我的几次试验都导致了错误:

Sub Fertigstellen()

Load Empfängerdaten         ' proposition from Raymond Wu
Dim X
' X = ActiveDocument.Forms("Empfängerdaten.QL4").Text    ' error 438
' X = ActiveDocument.Forms("Empfängerdaten").QL4.Text    ' error 438
' X = ActiveDocument.QL4.Text                            ' error 438
' X = ActiveDocument.Empfängerdaten.QL4.Text             ' error 438
' X = ActiveDocument.Content("QL4").Text                 ' compiling error
' X = ActiveDocument.Empfängerdaten.QL4.Text             ' error 438
' X = ActiveDocument.UserControl("QL4").Text             ' compiling error
If X Like "CH" Then       ' alle Daten sind vorhanden
    Stop
End If

QR_Dialog.Show

结束子

我需要的是使用哪个命令(如果有的话)。

我能找到的所有方法都只能从嵌入文档本身的文本框中读取值。文档的代码找不到用户窗体的文本框。

但是,我需要使用在打印文档时隐藏的用户表单。 用户表单中的值仅用于生成 QR 码,它们不应出现在其他任何地方。请注意,MS Word 似乎没有 Activedocument.Forms![MyField].Value 属性来访问用户表单(与 Access 或 Excel 不同) )。

注意:反过来也没问题:从用户表单中,在打开或关闭全局变量时很容易填充它们。

【问题讨论】:

  • Load UserformName 首先你可以在不显示用户表单的情况下访问它吗?注意:是否将值存储在 CustomDocumentProperties 中?
  • Variables收藏..
  • 请告诉我们您是如何尝试获取讨论文本中的文本框的。我们是否应该理解这些文本框使用它们的 Text 属性手动放置一些文本?
  • 我插入了我的几个非工作试验。使用 CustomDocumentProperties 似乎不切实际;我已经在使用全局变量,但问题是它们在打开文档时是无效的。
  • @Bughater 你试过Load UserformName 并访问它的属性吗?在您使用 Show 方法之前,它应该是隐藏的,所以如果您只是加载它来检索值,您应该稍后 Unload

标签: vba text ms-word textbox userform


【解决方案1】:

答案和我的问题一样简单: 我在this Excel blog 中找到了它。 对我来说非常令人惊讶(因为我主要参与 Access)是 Word 不需要指定“用户表单” - 它的名称就足够了!

下面的代码现在只需要适应不同的QL#文本框,其内容需要逐个检查:

Sub Fertigstellen()
Dim fTextBox As Object
For Each fTextBox In Empfängerdaten.Controls
    If TypeName(fTextBox) = "TextBox" Then
    Select Case fTextBox.Name
        Case "QL4"
            If fTextBox.Text Like "ABC" Then
                ' OK
            Else
                Debug.Print fTextBox.Name & ": " & fTextBox.Text
            End If
        ' … … …
        Case Else
            Debug.Print fTextBox.Name & " should be implemented"
    End Select
        End If
Next
' … … …
End Sub

在此基础上,也应该可以只访问一个文本框,但我不需要,因为必须验证所有用户窗体的值。

还是谢谢你的提示。

【讨论】:

    猜你喜欢
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多