使用书签访问 Word,如果书签留空,如何执行操作

Posted

技术标签:

【中文标题】使用书签访问 Word,如果书签留空,如何执行操作【英文标题】:Access to Word using Bookmarks, how to perform an action if a bookmark is left blank 【发布时间】:2020-12-27 22:11:12 【问题描述】:

在这里访问相当新,我觉得这应该是一个非常简单的修复,但我尝试的一切都不起作用。

基本上我想做的是为我正在处理的数据库制作一个沼泽标准的字母生成按钮,它工作得很好,除非我正在拉出所有的表单上没有填写字段数据关闭。例如,我可以选择第二个地址行,但并非所有地址都有一个,因此通常留空,但这意味着我的地址如下所示:

地址线 1

小镇 县 邮编

当我希望它们看起来像这样时:

地址线 1 镇 县 邮编

我已经尝试了所有看起来的方法,但似乎没有任何效果!

感谢您提供的任何建议或帮助!

这是我的代码

Private Sub btnManagerLetter_Click()

    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim rs As DAO.Recordset
    
    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Open("\\middle\Data\DataBaseWordDocs&Ding\ding\InsCoLtrTemplate.docx")
    Set rs = CurrentDb.OpenRecordset("qryManagerDetails")
    
    wdApp.Visible = True
    
    wdDoc.Bookmarks("ManagerName").Range.Text = Nz(rs![Manager Name], "")
    
    wdDoc.Bookmarks("AddressLine1").Range.Text = Nz(rs![Address Line 1], "")

    wdDoc.Bookmarks("AddressLine2").Range.Text = Nz(rs![Address Line 2], "")
    
    wdDoc.Bookmarks("Town").Range.Text = Nz(rs![Town], "")
    
    wdDoc.Bookmarks("County").Range.Text = Nz(rs![County], "")
    
    wdDoc.Bookmarks("PostCode").Range.Text = Nz(rs![Post Code], "")
    

End Sub

【问题讨论】:

【参考方案1】:

我建议为您将其粘贴为块的地址添加一个书签。

使用辅助函数构建地址字段,仅当新字符串不为 Null 时才附加。

例如:

Public Function Append(ByVal originalString As String, ByVal newString As String, Optional ByVal separator As String = " ") As String
    If Len(newString) > 0 Then
        AppendString = originalString & separator & newString
    Else
        AppendString = originalString
    End If
End Function

然后只需构建地址块并将其作为单个字符串一起插入书签。

Sub T()
    
    Dim address As String
    
    address = Nz(rs![Address Line 1], vbNullString)
    address = Append(address, Nz(rs![Address Line 2], vbNullString))
    address = Append(address, Nz(rs![Town], vbNullString))
    address = Append(address, Nz(rs![County], vbNullString))
    address = Append(address, Nz(rs![Post Code], vbNullString))
    
    wdDoc.Bookmarks("Address").Range.Text = address
End Sub

您可以根据需要更改分隔符,空格 " " 或换行符 vbNewLine

【讨论】:

感谢您的帮助,不知道应该把公共函数放在哪里,我试着把它放在一个模块中,但它说“地址”是一个未定义的变量。 地址是btnManagerLetter_Click()方法中保存地址的本地字符串变量。 Append() 方法可以在与上述方法相同的文件中私有。 啊,我明白了,我忘记在我的 sub 中添加 Dim address As String。现在是说'AppendString'(公共函数的第3行)是一个未定义的变量? 我刚刚删除了“字符串”,所以它现在显示为 Append = original string &...,这就成功了! @KostasK 非常感谢您的帮助!!!!

以上是关于使用书签访问 Word,如果书签留空,如何执行操作的主要内容,如果未能解决你的问题,请参考以下文章

Word批量删除所有书签

使用书签但从表单而不是表或查询访问 Word

OpenXML - 将书签应​​用于 Word 文档中的段落

使用 POI 读取 Word 中的书签替换书签内容(doc和docx)

Word VBA“标签未定义”如果书签存在命令

PDF文件如何自动生成目录书签