久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2855|回復(fù): 0
收起左側(cè)

如何實(shí)現(xiàn)VB與EXCEL的無(wú)縫連接

[復(fù)制鏈接]
ID:104835 發(fā)表于 2016-2-3 19:17 | 顯示全部樓層 |閱讀模式
VB是常用的應(yīng)用軟件開(kāi)發(fā)工具之一,由于VB的報(bào)表功能有限,而且一但報(bào)表格式發(fā)生變化,就得相應(yīng)修改程序,給應(yīng)用軟件的維護(hù)工作帶來(lái)極大的不便。因此有很多程序員現(xiàn)在已經(jīng)充分利用EXECL的強(qiáng)大報(bào)表功來(lái)實(shí)現(xiàn)報(bào)表功能。但由于VB與EXCEL由于分別屬于不同的應(yīng)用系統(tǒng),如何把它們有機(jī)地結(jié)合在一起,是一個(gè)值得我們研究的課題。

  一、 VB讀寫EXCEL表:

  VB本身提自動(dòng)化功能可以讀寫EXCEL表,其方法如下:

  1、在工程中引用Microsoft Excel類型庫(kù):

  從"工程"菜單中選擇"引用"欄;選擇Microsoft Excel 9.0 Object Library(EXCEL2000),然后選擇"確定"。表示在工程中要引用EXCEL類型庫(kù)。

  2、在通用對(duì)象的聲明過(guò)程中定義EXCEL對(duì)象:

Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet

  3、在程序中操作EXCEL表常用命令:

Set xlApp = CreateObject("Excel.Application") '創(chuàng)建EXCEL對(duì)象
Set xlBook = xlApp.Workbooks.Open("文件名") '打開(kāi)已經(jīng)存在的EXCEL工件簿文件
xlApp.Visible = True '設(shè)置EXCEL對(duì)象可見(jiàn)(或不可見(jiàn))
Set xlSheet = xlBook.Worksheets("表名") '設(shè)置活動(dòng)工作表
xlSheet.Cells(row, col) =值 '給單元格(row,col)賦值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '關(guān)閉工作簿
xlApp.Quit '結(jié)束EXCEL對(duì)象
Set xlApp = Nothing '釋放xlApp對(duì)象
xlBook.RunAutoMacros (xlAutoOpen) '運(yùn)行EXCEL啟動(dòng)宏
xlBook.RunAutoMacros (xlAutoClose) '運(yùn)行EXCEL關(guān)閉宏

  4、在運(yùn)用以上VB命令操作EXCEL表時(shí),除非設(shè)置EXCEL對(duì)象不可見(jiàn),否則VB程序可繼續(xù)執(zhí)行其它操作,也能夠關(guān)閉EXCEL,同時(shí)也可對(duì)EXCEL進(jìn)行操作。但在EXCEL操作過(guò)程中關(guān)閉EXCEL對(duì)象時(shí),VB程序無(wú)法知道,如果此時(shí)使用EXCEL對(duì)象,則VB程序會(huì)產(chǎn)生自動(dòng)化錯(cuò)誤。形成VB程序無(wú)法完全控制EXCEL的狀況,使得VB與EXCEL脫節(jié)。

  二、 EXCEL的宏功能:

  EXCEL提供一個(gè)Visual Basic編輯器,打開(kāi)Visual Basic編輯器,其中有一工程屬性窗口,點(diǎn)擊右鍵菜單的"插入模塊",則增加一個(gè)"模塊1",在此模塊中可以運(yùn)用Visual Basic語(yǔ)言編寫函數(shù)和過(guò)程并稱之為宏。其中,EXCEL有兩個(gè)自動(dòng)宏:一個(gè)是啟動(dòng)宏(Sub Auto_Open()),另一個(gè)是關(guān)閉宏(Sub Auto_Close())。它們的特性是:當(dāng)用EXCEL打含有啟動(dòng)宏的工簿時(shí),就會(huì)自動(dòng)運(yùn)行啟動(dòng)宏,同理,當(dāng)關(guān)閉含有關(guān)閉宏的工作簿時(shí)就會(huì)自動(dòng)運(yùn)行關(guān)閉宏。但是通過(guò)VB的自動(dòng)化功能來(lái)調(diào)用EXCEL工作表時(shí),啟動(dòng)宏和關(guān)閉宏不會(huì)自動(dòng)運(yùn)行,而需要在VB中通過(guò)命令xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose) 來(lái)運(yùn)行啟動(dòng)宏和關(guān)閉宏。

  三、 VB與EXCEL的相互勾通:

  充分利用EXCEL的啟動(dòng)宏和關(guān)閉宏,可以實(shí)現(xiàn)VB與EXCEL的相互勾通,其方法如下:

  在EXCEL的啟動(dòng)宏中加入一段程序,其功能是在磁盤中寫入一個(gè)標(biāo)志文件,同時(shí)在關(guān)閉宏中加入一段刪除此標(biāo)志文件的程序。VB程序在執(zhí)行時(shí)通過(guò)判斷此標(biāo)志文件存在與否來(lái)判斷EXCEL是否打開(kāi),如果此標(biāo)志文件存在,表明EXCEL對(duì)象正在運(yùn)行,應(yīng)該禁止其它程序的運(yùn)行。如果此標(biāo)志文件不存在,表明EXCEL對(duì)象已被用戶關(guān)閉,此時(shí)如果要使用EXCEL對(duì)象運(yùn)行,必須重新創(chuàng)建EXCEL對(duì)象。

  四、舉例:

  1、在VB中,建立一個(gè)FORM,在其上放置兩個(gè)命令按鈕,將Command1的Caption屬性改為EXCEL,Command2的Caption屬性改為End。然后在其中輸入如下程序:

Dim xlApp As Excel.Application '定義EXCEL類
Dim xlBook As Excel.Workbook '定義工件簿類
Dim xlsheet As Excel.Worksheet '定義工作表類
Private Sub Command1_Click() '打開(kāi)EXCEL過(guò)程
 If Dir("D:\temp\excel.bz") = "" Then '判斷EXCEL是否打開(kāi)
  Set xlApp = CreateObject("Excel.Application") '創(chuàng)建EXCEL應(yīng)用類
  xlApp.Visible = True '設(shè)置EXCEL可見(jiàn)
  Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打開(kāi)EXCEL工作簿
  Set xlsheet = xlBook.Worksheets(1) '打開(kāi)EXCEL工作表
  xlsheet.Activate '激活工作表
  xlsheet.Cells(1, 1) = "abc" '給單元格1行駛列賦值
  xlBook.RunAutoMacros (xlAutoOpen) 運(yùn)行EXCEL中的啟動(dòng)宏
 Else
  MsgBox ("EXCEL已打開(kāi)")
 End If
End Sub

Private Sub Command2_Click()
 If Dir("D:\temp\excel.bz") <> "" Then '由VB關(guān)閉EXCEL
  xlBook.RunAutoMacros (xlAutoClose) '執(zhí)行EXCEL關(guān)閉宏
  xlBook.Close (True) '關(guān)閉EXCEL工作簿 
  xlApp.Quit '關(guān)閉EXCEL
 End If
 Set xlApp = Nothing '釋放EXCEL對(duì)象
 End
End Sub


  2、在D盤根目錄上建立一個(gè)名為Temp的子目錄,在Temp目錄下建立一個(gè)名為"bb.xls"的EXCEL文件。

  3、在"bb.xls"中打開(kāi)Visual Basic編輯器,在工程窗口中點(diǎn)鼠標(biāo)鍵選擇插入模塊,在模塊中輸入入下程序存盤:


Sub auto_open()
 Open "d:\temp\excel.bz" For Output As #1 '寫標(biāo)志文件
 Close #1
End Sub
Sub auto_close()
 Kill "d:\temp\excel.bz" '刪除標(biāo)志文件
End Sub

  4、運(yùn)行VB程序,點(diǎn)擊EXCEL按鈕可以打開(kāi)EXCEL系統(tǒng),打開(kāi)EXCEL系統(tǒng)后,VB程序和EXCEL分別屬兩個(gè)不同的應(yīng)用系統(tǒng),均可同時(shí)進(jìn)行操作,由于系統(tǒng)加了判斷,因此在VB程序中重復(fù)點(diǎn)擊EXCEL按鈕時(shí)會(huì)提示EXCEL已打開(kāi)。如果在EXCEL中關(guān)閉EXCEL后再點(diǎn)EXCEL按鈕,則會(huì)重新打開(kāi)EXCEL。而無(wú)論EXCEL打開(kāi)與否,通過(guò)VB程序均可關(guān)閉EXCEL。這樣就實(shí)現(xiàn)了VB與EXCEL的無(wú)縫連接。
Public Function OutputToExcel(Optional Rs_Data As adodb.Recordset, Optional Cn As adodb.Connection, Optional strSQL As String)
    Dim Irowcount As Integer
    Dim Icolcount As Integer
   
    Dim xlApp As New Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlQuery As Excel.QueryTable
   
    If Rs_Data Is Nothing Then
      If Cn Is Nothing Or strSQL = "" Then
         Exit Function
      End If
      Set Rs_Data = New adodb.Recordset
      With Rs_Data
        If .State = adStateOpen Then
            .Close
        End If
        .ActiveConnection = Cn
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .Source = strSQL
        .Open
      End With
    End If
      
    With Rs_Data
        If .RecordCount < 1 Then
            'MsgBox ("沒(méi)有記錄!")
            Exit Function
        End If
        '記錄總數(shù)
        Irowcount = .RecordCount
        '字段總數(shù)
        Icolcount = .Fields.Count
    End With
   
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = Nothing
    Set xlSheet = Nothing
    Set xlBook = xlApp.Workbooks().Add
    Set xlSheet = xlBook.Worksheets("sheet1")
    xlApp.Visible = True
   
    '添加查詢語(yǔ)句,導(dǎo)入EXCEL數(shù)據(jù)
    Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
   
    With xlQuery
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
    End With

    xlQuery.FieldNames = True '顯示字段名
    xlQuery.Refresh

    xlApp.Application.Visible = True
    Set xlApp = Nothing '"交還控制給Excel
    Set xlBook = Nothing
    Set xlSheet = Nothing
End Function


'以下調(diào)用
OutputToExcel(rs)

OutputToExcel(,conn,strsql)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线免费观看视频 | 性视频在线 | 欧美不卡在线 | 国产欧美日韩在线视频 | a级黄毛片 | 一级黄色片免费 | 91精品久久久久久久久久 | www.com黄色 | 欧美精品二区三区四区免费看视频 | 一级黄色片免费看 | 黄色1级视频 | 日本免费网站 | 亚洲福利专区 | 欧美性猛交99久久久久99按摩 | 日韩免费一级片 | 伊人成人在线 | 欧美综合一区二区 | 午夜精品视频在线观看 | 又色又爽又黄18网站 | 深夜福利网址 | 日韩综合在线观看 | 亚洲精品美女 | 男人天堂av网 | 日韩在线视频免费 | 午夜婷婷| 国产一级特黄 | jlzzjlzz欧美大全 | 激情高潮到大叫狂喷水 | 精品久久视频 | 成人动漫在线观看 | 国产小视频网站 | 一区二区三区免费在线观看 | 欧美一级一级 | 中国一级毛片 | 手机av在线免费观看 | 午夜在线观看免费视频 | 国产成人97精品免费看片 | 天堂中文字幕免费一区 | 亚洲欧美精品一区 | 色综合色综合 | 国v精品久久久网 |