【问题标题】:Getting data from tables and put it into a template从表中获取数据并将其放入模板中
【发布时间】:2016-03-12 00:39:47
【问题描述】:

我正在使用 word 模板,我必须通过 Access 2007 生成模板。我有以下代码:

Public Function CH05_Generate()

Dim WordApp As Word.Application
Dim Doc As Word.Document
Dim WordPath As String
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim sql As String

Set db = CurrentDb()
Set rst = db.OpenRecordset("Projektdata", dbOpenDynaset)


WordPath = "Where my word template is"

Set WordApp = CreateObject("Word.Application")
Set Doc = WordApp.Documents.Add(WordPath)

With Doc

    .FormFields("PName").Result = [Projektnavn]
    .FormFields("text").Result = Forms![TD-E-PM200-CH05]!Kommentar
    .FormFields("S3").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q1
    .FormFields("S4").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q2
    .FormFields("S5").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q3
    .FormFields("S6").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q4
    .FormFields("S7").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q5
    .FormFields("S8").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q6
    .FormFields("S9").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q7
    .FormFields("S10").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q8
    .FormFields("S11").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q9
    .FormFields("S12").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q10
    .FormFields("S13").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q11
    .FormFields("S14").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q12
    .FormFields("S15").CheckBox.Value = Forms![TD-E-PM200-CH05]!sub.Form!Q13
    .FormFields("S16").CheckBox.Value = Forms![TD-E-PM200-CH05]!sub.Form!Q14
    .FormFields("S17").CheckBox.Value = Forms![TD-E-PM200-CH05]!sub.Form!Q15
    .FormFields("S18").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q16
    .FormFields("S19").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q17
    .FormFields("S20").Result = Forms![TD-E-PM200-CH05]!sub.Form!Q18        
End With

WordApp.visible = True
WordApp.Activate
WordApp.ActiveDocument.Protect wdAllowOnlyFormFields, True

End Function

我需要帮助的是从名为“Projektdata”的表中获取“Projektnavn”,但我不知道如何从中获取数据。有很多“projektnavn”,所以也许我应该进行某种查找? 如您所见,它们都有一个 sagsnr,也许这有帮助?

【问题讨论】:

    标签: vba ms-access templates ms-word ms-access-2007


    【解决方案1】:

    记录集rst 的内容取决于查询Projektdata 的设计方式。如果您的查询返回单行,则只需使用列名即可检索数据:

    If Not rst.EOF Then
        .FormFields("PName").Result = rst("YOUR_COLUMN_NAME")
    End If
    

    如果查询不返回任何行,则需要If 语句。

    编辑

    我不知道查询Projektdata 是如何设计的。为了使它只返回正确的行,您必须修改它以接受一个参数来识别要返回的行。您可以为sagsnr 传递一个参数,如果它对于每一行都是唯一的。我扩展了代码示例并添加了一些清理:

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim qdf As DAO.QueryDef
    
    Set db = CurrentDb()
    
    Set qdf = db.QueryDefs("Projektdata")
    qdf!plSagsnr = 1  'Add parameter value to only fetch data where sagsnr is 1
    Set rst = qdf.OpenRecordset
    
    If Not rst.EOF Then
        Debug.Print rst("Field1")
    End If
    
    rst.Close
    qdf.Close
    db.Close
    
    Set rst = Nothing
    Set qdf = Nothing
    Set db = Nothing
    

    【讨论】:

    • 这行得通,但我没有得到我想要的结果。我在列中得到了第一个“projektnavn”,但我需要具体的名称。也许它应该进行某种查找?
    • 您要么必须将查询设计为仅返回正确的行,要么对 CH05_Generate 子中的所有行进行排序。我建议确保查询返回你想要的,这可能更容易。
    • 你能帮我吗?我有点迷路了。
    • 查看编辑。您尚未显示查询的代码。您必须修改它以接受 sagsnr 的参数,然后根据参数选择正确的行。
    • 另外,有关查询和参数的更多信息,请参阅this Q+A
    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2012-12-16
    • 2012-10-02
    相关资源
    最近更新 更多