返回列表 上一主題 發帖

[發問] Excel工作表單與Access資料庫的VBA互動問題

回復 22# JEAN

TOP

回復 22# JEAN

TOP

回復 22# JEAN
一、 將 2014年機票記錄.xls、機票記錄明細表.mdb (抑或是 機票記錄明細表檔案.accdb)
     全部都放置於同一目錄下。 例如: 我為了方便測試起見,而將它們全數放在一個名為
     "2014年機票記錄" D 磁碟機的次目錄下。
二、 如果妳那端是開啟 Access MDF 的檔案 (Office 2003),哪麼妳必須先將 21# 所說的
     程式碼 (Else 部分) 先行修正。
     目前我是預設開啟的是 Access ACCDB 的資料庫,如果要使用 Access MDF 的檔案,請將
     ACCDB 的部分予以 Mark 起來,而將原本 Mark 之 MDF 的部分打開 (移除 Mark ' ),
     如此即可使用 MDF 的檔案了。
     (兩種資料庫我都一齊放置於 D:\2014年機票記錄\ 目錄下,以方便測試及觀察資料變化)
三、 點選該次目錄 D:\2014年機票記錄\2014年機票記錄.xls 便可執行。

TOP

回復 21# c_c_lai


您好:

你做的機票作業,做的很好。 ;P
不過我開啟都不能始用....

TOP

本帖最後由 c_c_lai 於 2013-12-26 10:50 編輯

回復 19# JEAN
至於 "機票作業"裡面的表格都不能用
請參考附件:
機票記錄明細表.rar (11.43 KB)
機票記錄明細表檔案.rar (17.9 KB)
如果妳那端是開啟 Access MDF 的檔案 (Office 2003) :
  1. Sub OpenDB()
  2.     If ExcelData.Value = True Then    '  [data$]
  3.         Set cnn = CreateObject("ADODB.Connection")
  4.         Set rs = CreateObject("ADODB.Recordset")
  5.         Set cmd = CreateObject("ADODB.Command")
  6.     Else                              '  機票紀錄
  7.         Set cnn = New ADODB.Connection
  8.         Set rs = New ADODB.Recordset
  9.         Set cmd = New ADODB.Command
  10.     End If

  11.     With cnn
  12.         If .State = 1 Then .Close    '  adStateOpen
  13.         
  14.         If ExcelData.Value = True Then
  15.             .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _
  16.                                 ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name
  17.         Else
  18.             '  .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _
  19.             '                    ThisWorkbook.Path & Application.PathSeparator & "機票記錄明細表.mdb" & ";"
  20.             '  For Microsoft.ACE.OLEDB.12.0,you need Microsoft Office 12.0 Access Database Engine to be installed.
  21.             .ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0;" & "Data Source=" & _
  22.                               ThisWorkbook.Path & Application.PathSeparator & "機票記錄明細表檔案.accdb" & ";"
  23.         End If
  24.         .Open
  25.     End With
  26. End Sub
複製代碼
則將上列程式碼之 Else 的部分改成如下:
  1.         Else
  2.            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _
  3.                              ThisWorkbook.Path & Application.PathSeparator & "機票記錄明細表.mdb" & ";"
  4.              '  For Microsoft.ACE.OLEDB.12.0,you need Microsoft Office 12.0 Access Database Engine to be installed.
  5.             '   .ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0;" & "Data Source=" & _
  6.             '                   ThisWorkbook.Path & Application.PathSeparator & "機票記錄明細表檔案.accdb" & ";"
  7.         End If
複製代碼
即可。
此程式碼可以處理 MDF (For Excel 2003) 或者是 ACCDB (For Excel 2007、2010) 等資料庫格式。

TOP

本帖最後由 c_c_lai 於 2013-12-26 10:53 編輯

回復 19# JEAN
我就是一時忘了當初是誰提問的,實在
太好了!
當初妳的提問是 "機票",我看了之後便
試著將它改成 工作表單、以及 Access 資料庫
都能執行的方式 (同步示範如何作業)。舉例來說:
如果單純地只想在 Excel 做輸入畫面,儲存時將
資料儲存到  Access 資料庫,那麼便將 Excel "data" 儲存
資料的部分移除,只保留儲存 Access 資料庫的程式碼。
反之、亦然。妳一定會問為何是綜合的,這純粹是為了
測試、及瞭解,如何使用 Excel 應用 ADO 處理資料問題,
以及如何同時處理 Access 資料庫的讀取、查詢、刪除、以及
寫入的語法應用而做出來的範例。所以才將妳當初的提問
均寫在 "機票作業" 、以及 "data" 內之故。如此、亦回復了
工作表單 "機票" 的處裡提問。這麼說明是否解答了妳的問題?

TOP

本帖最後由 JEAN 於 2013-12-26 09:51 編輯

回復 1# c_c_lai


   您好:
這個2014年機票記錄檔案是我做的,裡面多一個"機票作業"...這個東西好像有一點怪怪的
請問你現在是寫機票作業的VBA的程式,還是裡面的"機票"的VBA程式。

我看不懂裡面在寫什麼...機票作業裡面的表格都不能用

TOP

我將 acdx 大大於 2013-12-11 16:52 提問的
"如何讓ComboBox可以用滑鼠滾動?" 解決方案
加以應用加入到 "簽證內容1"、"簽證內容2"
內,可作為範例引用,如尚有更佳的處理方法
尚請各位大大指教!
2014年機票記錄.rar (84.95 KB)

TOP

回復 1# c_c_lai


    讚
你猜!!

TOP

回復 14# c_c_lai

謝謝你的詳細說明

EXCEL 檔案兩個人同時開啟就會有問題,除非設為共用模式,共用模式我試過會越操作檔案會越來越大操作也會越來越慢,可能是EXCEL版本不同時的問題(還在測試)

講到 Clipper 是我的最愛也是最恨,真是往事只能回味

其實資料庫處理應該要使用ACCESS來處理比EXCEL好,只是公司大部分是做工程計算工程師只會用EXCEL,雖目前工程計算程式也支援MDB,我還是想由MDB將資料搬至EXCEL大家比較好使用。
你的程式可以讓我好好研究一下,可能需要花點時間消化。

其實這些不我的工作內容,我只是有興趣研究EXCEL,所以腳步慢一點,等過一些時日有問題再來請教。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 愛不是要求對方,而是要由自身的付出。
返回列表 上一主題