麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

利用OLE自動(dòng)化解決ACESS97中文版報(bào)表生成器直線不能往下順延的缺陷

2019-11-18 17:37:44
字體:
供稿:網(wǎng)友
->access97是一個(gè)非常優(yōu)秀的數(shù)據(jù)庫軟件,它不僅能充當(dāng)辦公自動(dòng)化的桌面數(shù)據(jù)管理工具,也是一個(gè)開發(fā)Client/Server產(chǎn)品的優(yōu)秀前端開發(fā)工具.它的特點(diǎn)是易學(xué)易用、工具豐富、不需寫大量代碼就可以在很短的時(shí)間內(nèi)開發(fā)出界面優(yōu)美且功能強(qiáng)大的系統(tǒng),長期以來受到廣大開發(fā)者的青睞。但筆者在使用時(shí)發(fā)現(xiàn)其報(bào)表生成器中有一個(gè)明顯不適合我國國情的缺陷,就是當(dāng)設(shè)置報(bào)表DETAIL節(jié)上的字段長度因?yàn)闄M向空間不夠而設(shè)為自動(dòng)向下順延(CanGrow屬性為True)時(shí),如果字段旁有豎線(國內(nèi)大部分公文報(bào)表都有豎線,而國外則很少有),則豎線不能和字段一起向下順延。使整個(gè)報(bào)表看起來不美觀。這個(gè)缺陷在ACCESS2.0和ACCESS97中文版上都有,而在FoxPRo2.5B/3.0/5.0下卻沒有。據(jù)微軟技術(shù)服務(wù)部的工作人員說是由于本地化時(shí)測(cè)試不夠原因所致。為此,筆者在ACCESS內(nèi)采用了OLE自動(dòng)化!
方法,將ACCESS97查詢生成的表送交Excel97進(jìn)行處理(分類匯總、打印、預(yù)演),較好地解決了這個(gè)問題。由于ACCESS97和EXCEL97的VBA在97版本上幾乎完全兼容,在EXCEL97下錄制的宏代碼只需在ACCESS下稍加修改就行了,所以采用此方法和用內(nèi)部報(bào)表生成器設(shè)計(jì)所用的時(shí)間差不多。整個(gè)工作需要下面幾步:

在EXCEL97下設(shè)計(jì)好報(bào)表的樣式,包括表頭、頁眉、頁碼等,對(duì)需要自動(dòng)翻轉(zhuǎn)的列,在"單元格格式設(shè)置"下設(shè)為"自動(dòng)換行"。

在EXCEL97下錄制好當(dāng)數(shù)據(jù)送入后進(jìn)行的操作宏(如分類匯總、加邊框線,加空行、打印輸出、預(yù)演等動(dòng)作)。

在ACCESS下用VBA語句和DAO對(duì)象的方法將數(shù)據(jù)送入EXCEL表內(nèi),并將EXCEL下宏操作變成ACCESS下的語句。
  以下是ACCESS97下的程序代碼,實(shí)際應(yīng)用程序界面是一個(gè)對(duì)話框屏幕(FORM),上面有五個(gè)下拉框(Comb_)和一個(gè)文字框(Text),由用戶選擇相應(yīng)的信息,然后用戶按"確定"命令按鈕執(zhí)行程序。其中有些屬性和方法在ACCESS2.0下不能使用,可采用相應(yīng)的語句.
PrivateSub確認(rèn)_Click()
OnErrorGoToErrorHandler
DimstDocNameAsString
DimkAsInteger
stDocName="Pqry_YEAR"
  DoCmd.OpenQuerystDocName'從原始表內(nèi)根據(jù)用戶輸入的信息條件運(yùn)行"生成表查詢",生成一個(gè)供打印用的表.
  '增加空記錄處理--為了保證記錄數(shù)少時(shí)也打印整張表.


    IfVal(Me![Comb空行])>0Then'如果用戶輸入了大于0的數(shù)值,表示加空行


  Fork=1ToVal(Me![Comb空行])
   CurrentDb.Execute"INSERTINTOPqry_YEAR
  (項(xiàng)目類)VALUES('空行空行空行');"
  Nextk
EndIf
DimmsgVarAsInteger 
'定義EXCEL對(duì)象變量
'------------------------------
DimxlobjAsObject
DimxlsheetobjAsObject
DimxlrangeAsObject
'------------------------------
'定義ACESS記錄集對(duì)象變量
DimdbsAsDatabase,rstAsRecordset
DimstrSQLAsString
DimrecTotal,fieldTotalAsInteger'recTotal:
    表示該表內(nèi)記錄總數(shù);
    fieldTotal表示字段總數(shù)
Dimi,jAsInteger
i=0
j=0
'Returnreferencetocurrentdatabase.
Setdbs=CurrentDb'當(dāng)前數(shù)據(jù)庫
Setrst=dbs.OpenRecordset("Pqry_YEAR")'選擇記錄集
recTotal=rst.RecordCount'得出記錄數(shù)
fieldTotal=rst.Fields.Count '得出字段數(shù)
'----------------------------------
'建立EXCEL對(duì)象
Setxlobj=CreateObject("Excel.application.8")
'打開設(shè)計(jì)好的EXCEL表--REPORT.XLS
xlobj.Workbooks.OpenFileName:=pPathname&"REPORT.xls"
Setxlsheetobj=xlobj.ActiveWorkbook.Worksheets("REPORT")
 '指向工作表
'如果是改動(dòng)過的表,不再打開
IfMsgBox("當(dāng)前打印表格文件中已有數(shù)據(jù),
 是否需要更新?"
 &Chr(13)&_
 "提示:只有對(duì)數(shù)據(jù)進(jìn)行改動(dòng)后,才需要更新.",68)
 =vbYesThen
DoCmd.HourglassTrue '由于時(shí)間較長,
將鼠標(biāo)設(shè)為沙漏形狀
 xlsheetobj.Rows("5:200").Select '選定區(qū)域
xlobj.Selection.DeleteShift:=-4162 '
    注意!原錄制宏中-4162為xlnone,是EXCEL97的常量,但在ACCESS下卻不認(rèn),只能到EXCEL下的對(duì)象瀏覽器去查詢對(duì)應(yīng)的常數(shù).
 '開始向EXCEL傳送數(shù)據(jù)
 DoUntilrst.EOF
  Forj=1TofieldTotal
    xlsheetobj.cells(5 i,j).Value=rst.Fields(j-1)
  Nextj
  rst.MoveNext
  i=i 1
 Loop
 rst.Close

 '在EXCEL中調(diào)整,具體常數(shù)參見EXCEL下的對(duì)象瀏覽器
xlsheetobj.Range("A4:Q"&Trim(Str(recTotal 4))).
 Select'選定范圍
 '以下為設(shè)置邊框線錄制的宏代碼,已刪除了相似的語句.
 xlobj.Selection.Borders(5).LineStyle=-4142
 xlobj.Selection.Borders(6).LineStyle=-4142
 Withxlobj.Selection.Borders(7)
   .LineStyle=1
   .Weight=-4138
   .ColorIndex=-4105
 EndWith

 Withxlobj.Selection
 '確定是合計(jì)在表上還是在表尾
  IfMe![Fram位置]=1Then
    .SubtotalGroupBy:=2,Function:=-4157,
     TotalList:=Array(6,9,10,_
     11,12,13,14,15,16),Replace:=True,
     PageBreaks:=False,_
     SummaryBelowData:=False
  Else
    .SubtotalGroupBy:=2,Function:=-4157,
    TotalList:=Array
    (6,9,10,_
     11,12,13,14,15,16),Replace:=True,
     PageBreaks:=False,_
     SummaryBelowData:=True
  EndIf
 EndWith
 '根據(jù)用戶的選擇設(shè)置頁眉和頁尾。
 Withxlsheetobj.PageSetup
   .LeftHeader=""&Chr(10)&""&Chr(10)&"
   "&Mid(Me![Cmbo單位],4)
   .CenterHeader="&""宋體,加粗""&18"&Me!
   [Cmbo年度]&"年"&Mid(Me![Cmbo類別],4)&"XXX表"
 EndWith
 xlsheetobj.Range("A1").Select
 '將空行內(nèi)容清掉
 k=Val(Me![Comb空行])
 IfVal(Me![Comb空行])>0Then
   DimcontentAsString
   i=5
   content=xlsheetobj.cells(i,2).formulaR1C1
   DoWhileInStr(1,content,"空行空行空行")=0
     i=i 1
     content=xlsheetobj.cells(i,2).formulaR1C1
   Loop
   xlsheetobj.Range("B"&Trim(Str(i-k 5))&":"&"Q"
   &Trim(Str(i 5))).Select
   xlobj.Selection.ClearContents
   xlsheetobj.Range("A1").Select
 EndIf

Else '不更新
 xlsheetobj.Activate
EndIf
xlobj.ActiveWindow.SelectedSheets.PrintPreview '預(yù)演報(bào)表
'如為打印:xlobj.ActiveWindow.SelectedSheets.PrintOut
DoCmd.HourglassFalse'恢復(fù)鼠標(biāo)形狀
xlobj.Visible=True '讓EXCEL可見
清除對(duì)象變量空間,節(jié)省內(nèi)存
Setdbs=Nothing
Setxlobj=Nothing
xlobj.quit '關(guān)閉EXCEL
ExitSub
ErrorHandler: '出錯(cuò)處理
DoCmd.HourglassFalse
MsgBox"Errornumber"&Err.Number&":"&Err.Descr ResumeNext
EndSub
    通過這個(gè)例子我們看到在OFFICE97下利用OLE自動(dòng)化擴(kuò)展應(yīng)用程序的功能是多么方便和強(qiáng)大。用EXCEL完成的報(bào)表的優(yōu)點(diǎn)是格式美觀,修改方便.缺點(diǎn)是第一次生成EXCEL表格時(shí)速度較慢.
    本例是用EXCEL對(duì)數(shù)據(jù)進(jìn)行報(bào)表操作,其實(shí)也可參照此例的方法在EXCEL上建立圖形統(tǒng)計(jì)、財(cái)務(wù)分析、數(shù)據(jù)透視表分析等應(yīng)用程序,只要在EXCEL下錄制相應(yīng)的宏,再加到ACCESS下就行了。->
->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲精品一区中文字幕 | 成人宗合网 | 19禁国产精品福利视频 | 国产精品久久久久久久久久大牛 | 亚洲情av | 极品大长腿啪啪高潮露脸 | av在线免费看网址 | caoporn国产一区二区 | 中文字幕在线永久视频 | 久草在线视频精品 | 在线观看麻豆 | aa级黄色片 | 午夜视频亚洲 | 黄色7777| 国产精品中文在线 | 亚洲精品久久久久久久久久 | 毛片视频免费观看 | 深夜视频福利 | 亚洲国产女同久久 | 久久精品亚洲一区二区 | 久久撸视频| 久久国产亚洲精品 | 国产成人高潮免费观看精品 | 夜添久久精品亚洲国产精品 | 91网站永久免费看 | 久久超碰99 | 国产理论视频在线观看 | 九九热精品视频在线播放 | 亚洲精品自在在线观看 | 中文字幕一区二区三区四区 | 国产一级爱c视频 | 久久久av亚洲男天堂 | 国产精品久久久久久影院8一贰佰 | 国产日本在线 | 国产精品视频免费在线观看 | 欧美激情第一区 | 中文国产在线视频 | 成人免费毛片一 | 91精品国产综合久久久动漫日韩 | 日本欧美一区二区三区在线观看 | 欧美一级做性受免费大片免费 |