【问题标题】:Code works every other time in VBA代码在 VBA 中每隔一段时间工作一次
【发布时间】:2015-11-14 06:47:20
【问题描述】:

下面的代码被编程为从 MS ACCESS 2010 表中检索数据并将其放入 MS WORD 2010 表格 b 中。该代码每次都能正常工作,不会抛出任何错误,但会打开文档并每隔一次放置一次数据。

Sub Module11()
Dim appWord As Word.Application
Dim conn As ADODB.Connection
Dim doc As Word.Document
Dim rst As ADODB.Recordset

Dim tnum As String
Dim sname As String
Dim frst As Integer
Dim mrst As Integer
Dim sam As Integer
Dim strSQL As String

On Error Resume Next
Err.Clear

If Err.Number <> 0 Then
Set appWord = New Word.Application
End If

Set rst = New ADODB.Recordset
Set appWord = GetObject(, "Word.Application")
Set conn = New ADODB.Connection



conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= D:\Database\Database.mdb"
rst.Open "tableSDR", conn, adOpenKeyset, adLockOptimistic


 tnum = InputBox("Enter the Tracking Number of the Record " & _
  "you want to find:", "TRACKING NUMBER")

strSQL = "Select * from table where rst!TrackingNumber='" & tnum & "'"
'AND " _
 '   & "[rst!TrackingNumber]='" & tnum & "' "

rst.Open strSQL, cn, adOpenDynamic, adLockReadOnly

sam = rst!TrackingNumber

Do While Not rst.EOF
If sam <> tnum Then
    rst.MoveNext
    sam = rst!TrackingNumber

Else
     Exit Do
End If
Loop

Do While rst.EOF
MsgBox "Tracking Number Not Found! "
   Exit Sub
Loop


Set doc = appWord.Documents.Open("D:\Database\Form.docx", True)


With doc
    .FormFields("model").Result = rst!Model
    .FormFields("date_submitted").Result = rst!TDate
    .FormFields("part_number").Result = rst!PartNumber
    .FormFields("sup_name").Result = rst!SupplierName
    .FormFields("part_name").Result = rst!PartName
    .FormFields("sup_location").Result = rst!SupplierLocation
    .FormFields("rev_level").Result = rst!RevisionLevel
    .FormFields("sup_contact").Result = rst!SupplierContact
    .FormFields("po_number").Result = rst!PONumber
    .FormFields("telephone_num").Result = rst!TelephoneNum
    .FormFields("quantity").Result = rst!Quantity
    .FormFields("fax_number").Result = rst!FaxNum
    .FormFields("required_date").Result = rst!RequiredDate
    .FormFields("dev_req").Result = rst!DeviationRequest
    .FormFields("dev_period").Result = rst!DeviationPeriod

        frst = rst!FirstTime
        mrst = rst!MaterialChange

        If (frst = 1) Then
             If (mrst = 1) Then
                   doc.FormFields("time").Result = " Material Change and First Time"
             ElseIf (msrt = 0) Then
                   doc.FormFields("time").Result = "First Time"
             End If
        ElseIf (frst = 0) Then
             If (mrst = 1) Then
                   doc.FormFields("time").Result = " Material Change "
             ElseIf (msrt = 0) Then
                   doc.FormFields("time").Result = "Not Applicable"
             End If
      End If


    .FormFields("cur_spec").Result = rst!CurrentSPecification
    .FormFields("prop_dev").Result = rst!ProposedDeviation
    .FormFields("reason_dev").Result = rst!ReasonForDeviation

    .FormFields("pur_sign").Result = rst!PurchaseSign
    .FormFields("pur_des").Result = rst!PurchaseAD
    .FormFields("pur_date").Result = rst!PurchaseDate
    .FormFields("pur_com").Result = rst!PurchaseComments
    .FormFields("qual_sign").Result = rst!QualitySign

    .FormFields("qual_des").Result = rst!QualityAD
    .FormFields("qual_date").Result = rst!QualityDate
    .FormFields("qual_com").Result = rst!QualityComments
    .FormFields("engg_sign").Result = rst!EnggSign

    .FormFields("engg_des").Result = rst!EnggAD
    .FormFields("engg_date").Result = rst!EnggDate
    .FormFields("engg_com").Result = rst!EnggComments

    .FormFields("manu_sign").Result = rst!ManuSign
    .FormFields("manu_des").Result = rst!ManuAD
    .FormFields("manu_date").Result = rst!ManuDate
    .FormFields("manu_com").Result = rst!ManuComments

    .FormFields("other_sign").Result = rst!OtherSign
    .FormFields("other_des").Result = rst!OtherAD
    .FormFields("other_date").Result = rst!OtherDate
    .FormFields("other_com").Result = rst!OtherComments

    .FormFields("doc_req").Result = rst!ChangeRequired
    .FormFields("pca_number").Result = rst!PCANum
    .FormFields("dis_comments").Result = rst!Comments
    .FormFields("tracking_num").Result = rst!TrackingNumber



.Visible = True

.Activate

End With

doc.ActiveDocument.SaveAs (MSQname)
doc.Quit
Set doc = Nothing
Set rst = Nothing
Set appWord = Nothing
Set conn = Nothing
Exit Sub

errHandler:

MsgBox Err.Number & ": " & Err.Description
End Sub

【问题讨论】:

  • 尝试去掉 On Error Resume Next 看看程序是否会抛出警告
  • 我之前在 Access 中遇到过这个问题,结果证明这是一个问题,因为没有完全限定每个字词调用。
  • 抛出activex组件无法打开对象错误

标签: vba ms-access-2010 word-2010


【解决方案1】:

我看不到连接的任何关闭。代码掉落会导致它关闭,因此它会在下一次工作。然后尝试 rs.close。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review
  • @Grade'Eh'Bacon 这是回答问题的有效尝试。它甚至可能是正确的。如果您认为这是一个错误或无用的答案,请使用您的投票。
  • 我想你会发现我的答案在大多数情况下是解决ADO和其他连接问题的方法。正如指出的那样,回答这个问题的有效尝试。确实没有尝试关闭打开的连接。这将导致间歇性性能。
猜你喜欢
  • 2015-10-13
  • 2021-08-16
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2017-11-17
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多