下面这段程序代码,能使数据库中的数据以Word格式的表格写出。但每次都是直接打开WORD界面,然后把数据一一写入。整个写入的过程都会显示,如果数据很多的话,会用很长的时间。我想利用通用对话框控件,让整个过程在下面完成,而不是象这样显示。请问该如何对下面的程序进行修改?
Sub GenerateReport(sqlst As String, opdb As String, rpTile As String) 
Dim db As Database
  Dim app As New Word.Application
  Dim doc As Word.Document
  Dim sel As Word.Selection
  Dim TBL As Word.Table
  Dim rd As Recordset
  Dim i, j As Integer
  Dim docname As String
  Set db = DBEngine.OpenDatabase(opdb, False, False)
  app.Visible = True
  app.Documents.Add
  docname = app.ActiveDocument.Name
  Set doc = app.Documents(docname)
  Set rd = db.OpenRecordset(sqlst, dbOpenSnapshot, ReadOnly)
  Set sel = app.Selection
     With sel
       .Font.Name = "ËÎÌå"
       .Font.Size = 30
       .Font.Bold = True
       .ParagraphFormat.Alignment = wdAlignParaphCenter
       .InsertAfter rpTile
       .InsertParagraphAfter
       .InsertParagraphAfter
       .EndOf
     End With
     
    sel.Font.Size = 10
    If rd.RecordCount > 0 Then
     rd.MoveLast
     Set TBL = sel.Tables.Add(sel.Range, rd.RecordCount + 1, rd.Fields.Count)
     TBL.AutoFormat (36)
     TBL.AllowAutoFit = True
     TBL.Columns.AutoFit
     
     With TBL
       rd.MoveFirst
       For j = 1 To .Columns.Count
         .Cell(1, j).Range.Font.Bold = True
         .Cell(1, j).Range.Text = rd.Fields(j - 1).Name
       Next j
       For i = 2 To .Rows.Count
          For j = 1 To .Columns.Count
                .Cell(i, j).Range.Text = Format(rd.Fields(j - 1).Value)
          Next j
          rd.MoveNext
       Next i
     End With
     
     Else
       sel.Document.Range.InsertAfter "没有记录"
     End If
     
     sel.GoToNext (wdGoToTable)
     sel.Document.Range.InsertParagraphAfter
     sel.Document.Range.InsertAfter Date
     rd.Close
 End Sub

解决方案 »

  1.   

    这个过程是必不可少的,你只要把其隐藏不让显示就可以了!!app.Documents.Close '关闭文档
    app.Visible = False '关闭之前,WORD也会显示出来,所以关闭之后还是使之不可见,防止闪烁
    app.Quit '退出WORD应用
      

  2.   

    谢谢cuizm,可是我怎样才能把生成的WORD格式的表,用VB语句直接存在磁盘上指定的路径内?而不是利用WORD来对其进行保存。比如说在VB中利用通用对话框控件,来对其进行保存,代码应该怎么写?