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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2815|回復: 0
打印 上一主題 下一主題
收起左側

如何實現VB與EXCEL的無縫連接

[復制鏈接]
跳轉到指定樓層
樓主
ID:104835 發表于 2016-2-3 19:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
VB是常用的應用軟件開發工具之一,由于VB的報表功能有限,而且一但報表格式發生變化,就得相應修改程序,給應用軟件的維護工作帶來極大的不便。因此有很多程序員現在已經充分利用EXECL的強大報表功來實現報表功能。但由于VB與EXCEL由于分別屬于不同的應用系統,如何把它們有機地結合在一起,是一個值得我們研究的課題。

  一、 VB讀寫EXCEL表:

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

  1、在工程中引用Microsoft Excel類型庫:

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

  2、在通用對象的聲明過程中定義EXCEL對象:

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

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

Set xlApp = CreateObject("Excel.Application") '創建EXCEL對象
Set xlBook = xlApp.Workbooks.Open("文件名") '打開已經存在的EXCEL工件簿文件
xlApp.Visible = True '設置EXCEL對象可見(或不可見)
Set xlSheet = xlBook.Worksheets("表名") '設置活動工作表
xlSheet.Cells(row, col) =值 '給單元格(row,col)賦值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '關閉工作簿
xlApp.Quit '結束EXCEL對象
Set xlApp = Nothing '釋放xlApp對象
xlBook.RunAutoMacros (xlAutoOpen) '運行EXCEL啟動宏
xlBook.RunAutoMacros (xlAutoClose) '運行EXCEL關閉宏

  4、在運用以上VB命令操作EXCEL表時,除非設置EXCEL對象不可見,否則VB程序可繼續執行其它操作,也能夠關閉EXCEL,同時也可對EXCEL進行操作。但在EXCEL操作過程中關閉EXCEL對象時,VB程序無法知道,如果此時使用EXCEL對象,則VB程序會產生自動化錯誤。形成VB程序無法完全控制EXCEL的狀況,使得VB與EXCEL脫節。

  二、 EXCEL的宏功能:

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

  三、 VB與EXCEL的相互勾通:

  充分利用EXCEL的啟動宏和關閉宏,可以實現VB與EXCEL的相互勾通,其方法如下:

  在EXCEL的啟動宏中加入一段程序,其功能是在磁盤中寫入一個標志文件,同時在關閉宏中加入一段刪除此標志文件的程序。VB程序在執行時通過判斷此標志文件存在與否來判斷EXCEL是否打開,如果此標志文件存在,表明EXCEL對象正在運行,應該禁止其它程序的運行。如果此標志文件不存在,表明EXCEL對象已被用戶關閉,此時如果要使用EXCEL對象運行,必須重新創建EXCEL對象。

  四、舉例:

  1、在VB中,建立一個FORM,在其上放置兩個命令按鈕,將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() '打開EXCEL過程
 If Dir("D:\temp\excel.bz") = "" Then '判斷EXCEL是否打開
  Set xlApp = CreateObject("Excel.Application") '創建EXCEL應用類
  xlApp.Visible = True '設置EXCEL可見
  Set xlBook = xlApp.Workbooks.Open("D:\temp\bb.xls") '打開EXCEL工作簿
  Set xlsheet = xlBook.Worksheets(1) '打開EXCEL工作表
  xlsheet.Activate '激活工作表
  xlsheet.Cells(1, 1) = "abc" '給單元格1行駛列賦值
  xlBook.RunAutoMacros (xlAutoOpen) 運行EXCEL中的啟動宏
 Else
  MsgBox ("EXCEL已打開")
 End If
End Sub

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


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

  3、在"bb.xls"中打開Visual Basic編輯器,在工程窗口中點鼠標鍵選擇插入模塊,在模塊中輸入入下程序存盤:


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

  4、運行VB程序,點擊EXCEL按鈕可以打開EXCEL系統,打開EXCEL系統后,VB程序和EXCEL分別屬兩個不同的應用系統,均可同時進行操作,由于系統加了判斷,因此在VB程序中重復點擊EXCEL按鈕時會提示EXCEL已打開。如果在EXCEL中關閉EXCEL后再點EXCEL按鈕,則會重新打開EXCEL。而無論EXCEL打開與否,通過VB程序均可關閉EXCEL。這樣就實現了VB與EXCEL的無縫連接。
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 ("沒有記錄!")
            Exit Function
        End If
        '記錄總數
        Irowcount = .RecordCount
        '字段總數
        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
   
    '添加查詢語句,導入EXCEL數據
    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


'以下調用
OutputToExcel(rs)

OutputToExcel(,conn,strsql)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美老少妇一级特黄一片 | 皇色视频在线 | 中文av在线播放 | 国产婷婷色一区二区三区 | 日韩精品无码一区二区三区 | 91视视频在线观看入口直接观看 | 99国产精品久久久 | 97精品一区二区 | 久久av一区二区三区 | 视频1区| 一区二区三区视频在线观看 | 欧美精品区 | 欧美一区2区三区4区公司 | 亚洲免费网站 | 荷兰欧美一级毛片 | 日韩综合 | 亚洲欧美中文日韩在线v日本 | 一区二区三区四区不卡视频 | 精品亚洲视频在线 | 欧美一区二区三区在线观看 | 91就要激情 | 亚洲激情综合 | 国产精品国产成人国产三级 | 在线播放国产一区二区三区 | 国产97在线 | 日韩 | 国产精品福利在线观看 | 日本黄色大片免费 | 91精品国产综合久久婷婷香蕉 | 在线中文字幕第一页 | 日韩a在线 | 亚洲v日韩v综合v精品v | 日韩日b视频 | 国产精品视频久久久久 | 欧美福利视频 | 国产丝袜人妖cd露出 | 国产精品日韩在线观看 | 国产一级片在线播放 | av日日操 | 午夜视频免费网站 | 欧美日韩电影一区二区 | 精品一级 |