設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 4862|回復: 6
打印 上一主題 下一主題

[報表] [求助]怎樣保留以word發(fā)布的報表中的直線、邊框?

[復制鏈接]
跳轉到指定樓層
1#
發(fā)表于 2003-11-9 17:20:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
[求助]
各位好,
     我在使用access中的“報表”發(fā)布成word文檔時遇到困難,請求大俠們指點。謝謝。

目的:把相當多條記錄做成報表(每條記錄用一頁報表),然后發(fā)送給對方。對方將針對每條記錄的內容做出答復。

我的做法:在access中輸入記錄,把記錄做成報表,然后以word文檔發(fā)布形成word文檔。把word文檔發(fā)送給對方,等候對方在word文檔上作答復。(方法有點笨哦)

遇到問題:當發(fā)布word成文檔后,我在的access報表中用粗直線畫的所有邊框、格子都不見了,只剩下基本的標簽、文本框等內容了。

求教:怎樣才能在發(fā)布word文檔中保留所有邊框、格子?
      (當然若能把報表生成其他形式的文檔也行,只要對方能編輯內容和保留報表的外觀。)

[em03][em03]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2003-11-9 21:23:00 | 只看該作者
使用word模板,那些表格,邊框 都已經(jīng)畫好啦的
其中需要 填寫內容的地方 設置一些變量
然后在access中, 將必要字段 替換word中的變量,就可以啦
很好玩的功能
3#
 樓主| 發(fā)表于 2003-11-11 03:30:00 | 只看該作者
多謝老大。
可是,怎樣在“需要 填寫內容的地方”設置一些變量呢?
我只在數(shù)據(jù)庫工具欄上找到了把整個表鏈接過來的方法。
老大,幫人幫到底吧。
ssecond2000@yahoo.com.cn
4#
發(fā)表于 2003-11-11 16:20:00 | 只看該作者
轉載
另外你搜索一下
很多范例的


創(chuàng)建完美報表
作者:胡春林

    Access作為Microsoft Office辦公軟件包中的一部分,以其友好的操作界面和卓越的數(shù)據(jù)管理能力而日益成為中小型管理信息系統(tǒng)的理想開發(fā)環(huán)境,在各行各業(yè)得到了廣泛的應用。但在應用中我們發(fā)現(xiàn),Access在報表輸出上還存在一些不足:盡管它可以很好地處理一些基于頁面的報表,但對一些復雜報表或一些特殊報表的處理能力卻很難令人滿意,這主要是由于Access系統(tǒng)附帶的報表設計器太過直觀,缺少了程序設計和文字處理所需的必要的靈活性。而Word作為Microsoft Office家族中的重要成員——字處理器,其強大的文字處理功能正好可以彌補Access在報表方面的不足。這就使得我們自然而然地想到將Access與Word有機地結合起來,利用Access的數(shù)據(jù)處理功能進行數(shù)據(jù)的錄入、查詢、存儲,而利用Word的字處理功能進行各種報表的打印輸出。幸好,微軟在設計Office的時候就已經(jīng)為我們提供了一種在諸如Access、Word、Excel等應用程序之間通信的機制,使得這種想法得以實現(xiàn)。
一、基本原理
對于一些復雜的或有特殊要求的查詢,用ADO(ActiveX數(shù)據(jù)對象)來處理要比用Access本身提供的查詢管理器更靈活一些。所以我們的基本思路是:用ADO執(zhí)行一條或多條特定的SQL查詢,生成我們所需要的一個或多個Recordset,再將這些Recordset中的數(shù)據(jù)逐條輸出到Word文檔,然后就可以用程序或手工控制Word文檔的格式,達到我們的特殊要求。這聽起來挺麻煩,可只要了解了其工作原理,實際操作卻很簡單。下面就分別以在Access中和在Word中的具體操作為例進行介紹。
二、在Access中應用ADO將數(shù)據(jù)輸出到Word
1. 系統(tǒng)配置
系統(tǒng)軟件:Microsoft Windows 9x/NT/2000;Microsoft Access 2000;Microsoft Word 2000。
樣例數(shù)據(jù)庫:“C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb”,Office 2000中包含的例子?蓪⑵渲械摹爱a品”表復制到一個新的數(shù)據(jù)庫中,如“D:\db1.mdb”。
窗 體:在數(shù)據(jù)庫“D:\db1.mdb”中新建窗體“窗體1”,其中只包含1個命令按鈕“命令0”。
引用ADO:按Alt+F11進入Visual Basic編輯器,執(zhí)行“工具”->“引用”命令,在彈出的引用窗體中選擇“Microsoft ActiveX Data Objects 2.1”或更高版本。
引用Word:再次執(zhí)行命令“工具”->“引用”,在彈出的引用窗體中選擇“Microsoft Word 9.0 Object Library”。
2. 代碼詳解
在“窗體1”的設計模式下右鍵單擊“命令0”按鈕,選擇“事件生成器”,進入Visual Basic編輯器,創(chuàng)建過程“Private Sub 命令0_Click()”,其代碼如下:
Sub 命令0_Click()
'輸入表格標題
Title = InputBox(vbCrLf & vbCrLf & "請輸入表格標題:", "表格標題", "XX公司產品報價單")
If Title = "" Then Title = "XX公司產品報價單"

'步驟1:建立數(shù)據(jù)連接cnn
'由于數(shù)據(jù)庫已經(jīng)打開,所以直接應用CurrentProject.Connection就可以建立連接
Set cnn = New ADODB.Connection
Set cnn = CurrentProject.Connection

'步驟2:用SQL語句創(chuàng)建記錄集rs
Set rs = New ADODB.Recordset
'設定游標類型與鎖定類型
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
'制定特定的查詢條件,可以是任何有效的SQL查詢,甚至包括多表、多條件等復雜的查詢,查詢條件也常常從窗體取得
SQL = "select 產品名稱,單位數(shù)量,單價,庫存量 from 產品 where 單價>10.00"
'創(chuàng)建記錄集rs
rs.Open SQL, cnn
'統(tǒng)計字段數(shù)及記錄數(shù)
total_fields = rs.Fields.Count
total_records = rs.RecordCount

'步驟3:建立Word文檔對象
Set mywdapp = CreateObject("word.application")
'調整Word窗口大小
mywdapp.WindowState = wdWindowStateNormal
'生成新的Word文檔實例
mywdapp.Documents.Add
'設置視圖為頁面視圖
mywdapp.ActiveWindow.View.Type = wdPrintView
'轉到Word視圖,顯示文檔生成過程
mywdapp.Visible = True
mywdapp.Activate
'設置文檔(表格)字體
mywdapp.ActiveDocument.Range.Font.Size = "9"

'步驟4:將記錄集rs中的字段名稱和字段內容輸出到Word,各字段之間用制表符分隔
'輸出字段名稱
For I = 0 To total_fields - 2
mywdapp.Selection.TypeText Text:=rs.Fields(I).Name & vbTab
Next I
'最后一個字段名稱后加回車符
mywdapp.Selection.TypeText Text:=rs.Fields(total_fields - 1).Name & vbCrLf
'逐條輸出字段內容
Do While Not rs.EOF
For I = 0 To total_fields - 2
tmpstr = rs.Fields(I).value
If rs.Fields(I).Name = "單價" Then
tmpstr = Format(tmpstr, "####.00")
End If
mywdapp.Selection.TypeText Text:=tmpstr & vbTab
Next I
'一條記錄的最后一個字段后加回車符
mywdapp.Selection.TypeText Text:=rs.Fields(total_fields - 1).value & vbCrLf
rs.MoveNext
Loop

'步驟5:關閉記錄集
rs.Close
Set rs = Nothing

'步驟6:對Word中的數(shù)據(jù)進行格
5#
發(fā)表于 2003-11-11 18:31:00 | 只看該作者
寫得好
轉得好..
個人認為
如原兔兔所做,
做一個excel模板,
然后再填入數(shù)據(jù),
會少寫很多代碼靈活些...
6#
 樓主| 發(fā)表于 2003-11-13 06:31:00 | 只看該作者
感謝老大們的關注!

對于兔兔大大第二貼中所授方法:
     方法一,試用成功。
     方法二,未成功,系統(tǒng)提示:用戶定義類型未定義。
     但是,這兩種方法涉及植入VB代碼。對我而言,如ADAM大大所述,要想靈活應用有一定難度。
綜上所述我渴望能使用兔兔大大第一貼中所授方法(模板法),只是大大言簡意賅,我難窺全豹。希望兔兔大大再有所指點:
     疑問一:在word中的變量是怎樣生成的?
     疑問二:在word中生成變量后,怎樣建立鏈接到數(shù)據(jù)庫中每條記錄的字段值的呢?
     謝謝,先。






[此貼子已經(jīng)被作者于2003-11-12 23:11:11編輯過]

7#
發(fā)表于 2003-11-13 16:51:00 | 只看該作者
使用模板也還是需要編程的
我這兒暫時還沒有范例數(shù)據(jù)庫,等有啦再上傳吧

問題一: 實際上word的變量就是你敲入一個特殊的字符串
例如
代號        DH        級別        JB        起止
時間        MM月DD日HS時MS分
至MM月DD日HD時MD分
值勤
人員        ZQRY        記錄員        JLY
                負責人        FZR

上述需要 填寫的內容就使用 這些 字符串,然后還是用access的vba進行編程,就是找到這些你設定的字符串,然后找到他們,把他們一一替換為對應你提取的數(shù)據(jù)

范例代碼其中一段,看看思路)

Dim vsWordApp As Word.Application
  On Error Resume Next
  Err.Clear

  Set vsWordApp = GetObject(, "Word.Application")
  If Err.Number Then
    Set vsWordApp = CreateObject("Word.Application")
    Err.Clear
  End If

  'If vsWordApp.Visible Then vsWordApp.Visible = False
  On Error GoTo ErrHandler
  
  Dim vsWordDoc As Word.Document
  vsWordApp.Documents.Add Template:=App.Path & "\" & Trim(strDocTemplateName)
  
  
  Set vsWordDoc = vsWordApp.ActiveDocument
  Dim vsrange As Word.Range
  Set vsrange = vsWordApp.ActiveDocument.Content

          With vsrange.Find
            .Execute FindText:="LSXH", replacewith:=Trim(Me.cboRecordSequence.Text), Replace:=wdReplaceAll
            .Execute FindText:="MM", MatchCase:=True, replacewith:=Month(Me.DTPStartTime.Value), Replace:=wdReplaceAll
            .Execute FindText:="DD", replacewith:=Day(Me.DTPStartTime.Value), Replace:=wdReplaceAll
            .Execute FindText:="HS", replacewith:=Hour(Me.DTPStartTime.Value), Replace:=wdReplaceAll
            .Execute FindText:="MS", MatchCase:=True, replacewith:=Minute(Me.DTPStartTime.Value), Replace:=wdReplaceAll
            .Execute FindText:="HD", replacewith:=Hour(Me.DTPEndTime.Value), Replace:=wdReplaceAll
            .Execute FindText:="MD", MatchCase:=True, replacewith:=Minute(Me.DTPEndTime.Value), Replace:=wdReplaceAll
            
            .Execute FindText:="DH", replacewith:=Trim(Me.cboTaskCode.Text), Replace:=wdReplaceAll
            .Execute FindText:="JB", replacewith:=Trim(Me.txtTaskLevel.Text), Replace:=wdReplaceAll
            .Execute FindText:="ZQRY", replacewith:=Trim(Me.cboRecordWatch.Text), Replace:=wdReplaceAll
            .Execute FindText:="JLY", replacewith:=Trim(Me.txtRecorder.Text), Replace:=wdReplaceAll
            .Execute FindText:="FZR", replacewith:=Trim(Me.txtResponser.Text), Replace:=wdReplaceAll
            .Execute FindText:="BT", replacewith:=Trim(Me.txtRecordTitle.Text), Replace:=wdReplaceAll
           
            Dim strTask As String
            If gCurGuardTask.TaskType = TaskType.BaoWei Then
                strTask = "保衛(wèi)"
            End If
            If gCurGuardTask.TaskType = TaskType.JinWei Then
                strTask = "警衛(wèi)"
            End If
            .Execute FindText:="JW", replacewith:=Trim(strTask), Replace:=wdReplaceAll
            
            Dim strXH() As String
            strXH = Split(Trim(Me.cboRecordSequence.Text), "―")
            
            .Execute FindText:="XH", replacewith:=strXH(UBound(strXH)), Replace:=wdReplaceAll
            '.Execute FindText:="CONTENT", replacewith:=gcurGuardRecorder.Content, Replace:=wdReplaceAll
          End With
         
          With vsWordApp.Selection.Find
            .Text = "CONTENT"
            .Wrap = wdFindContinue
            .Execute
            If UCase(vsWordApp.Selection) = "CONTENT" Then
              vsWordApp.Selection.Text = gcurGuardRecorder.Content
            End If
            vsWordApp.Selection.HomeKey Unit:=wdStory
          End With
         
         With vsWordApp.Selection.Find
            .Text = "YM"
            .Wrap = wdFindContinue
            .Execute
            If UCase(vsWordApp.Selection) = "YM" Then
         '       vsWordApp.Selection.Text = CStr(vsWordApp.Selection.HeaderFooter.PageNumbers.Count + 1)
            End If
        End With
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-17 01:09 , Processed in 0.116591 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表