2013-05-02 115 views
4

我有一個基於各種測試結果計算風險(動脈瘤修復術後圍手術期死亡率)的Excel表格。從Access內使用Excel電子表格

用戶將測試結果輸入到電子表格(單元格)中,然後輸出預測死亡率的各種模型的一組數字(約6個結果)。電子表格作爲一個複雜的功能,一次產生一個患者的結果。

我也有一個(單獨的)訪問數據庫,其中包含多個患者的數據 - 包括所有關於測試結果的數據。此刻,我必須手動將這些數據輸入到電子表格中,然後將結果輸出,然後手動將它們輸入到數據庫中。

有沒有辦法自動做到這一點。也就是說,我可以將data1,data2,data3 ...從Access導出到電子表格中輸入到需要輸入數據的單元格中,然後從顯示結果的單元格中獲取結果(result1,result2,result3 ...)移植回訪問。

理想情況下,這可以做到現場。

我想我可以嘗試將電子表格的功能編程爲訪問中的複雜函數,但如果我誠實,我不確定電子表格中的算法是如何工作的。它是由比我更聰明的麻醉師設計的......

希望這是有道理的。任何幫助非常感謝。

Chris Hammond

回答

3

可以從Access中自動執行Excel。

Const cstrFile As String = "C:\SomeFolder\foo.xls" 
Dim xlApp As Object 
Dim xlWrkBk As Object 
Dim xlWrkSt As Object 

Set xlApp = CreateObject("Excel.Application") 
xlApp.Workbooks.Open cstrFile, ReadOnly:=True 
Set xlWrkBk = xlApp.Workbooks(1) 
Set xlWrkSt = xlWrkBk.Worksheets(1) 
With xlWrkSt 
    .Range("A1") = 2 
    .Range("A2") = 19 
    Debug.Print .Range("A3") 
End With 
xlWrkBk.Close SaveChanges:=False 

然而,這似乎是這將是繁瑣重複的訪問表的每一行,我不確定是否這樣做,住的是合理的。

我會嘗試調整Excel計算以訪問VBA函數並在Access查詢中使用這些自定義函數。但我不知道會有多大的任務。我建議你不要害怕麻醉師的聰明才智;這並不意味着他們對VBA的瞭解比你更多。至少看看你是否可以解決它。

+0

打我吧,可能想打開只讀太 – NickSlash 2013-05-02 16:05:10

+0

@NickSlash我認爲他需要以更改單元格的值到工作簿觸發計算,所以需要寫入表單。 – HansUp 2013-05-02 16:07:12

+0

工作表仍應可編輯,您只能保存更改。我在readOnly工作簿上沒有完成宏,所以不知道它是否會影響計算。 – NickSlash 2013-05-02 16:12:53

0

推數據回Access,可以從Excel的VBA中插入數據如下:

dim val as variant 
dim db as DAO.Database 

val=thisworkbook.range("a1").value 
set db=OpenDatabase("c:\myAccessDB.accdb") 
db.execute "insert into patientData (someField) values (" & val & ")",dbFailOnError 
db.Close 

你需要添加一個引用到Microsoft Office Access數據庫引擎對象庫。

+0

謝謝 - 我會給它一個! – 2013-05-02 16:33:57

0

不知道要完全理解你想要什麼,但如果你只是想查詢的結果導出到電子表格中,你可以使用以下命令:

Private Sub ExportAccessDataToExcel() 
    Dim SqlString As String 

    SqlString = "CREATE TABLE testMeasurements (TestName TEXT, Status TEXT)" 

    DoCmd.RunSQL (SqlString) 
    SqlString = "INSERT INTO testMeasurements VALUES('Average Power','PASS')" 
    DoCmd.RunSQL (SqlString) 
    SqlString = "INSERT INTO testMeasurements VALUES('Power Vs Time','FAIL')" 
    DoCmd.RunSQL (SqlString) 

    SqlString = "SELECT testMeasurements.TestName, testMeasurements.Status INTO exportToExcel " 
    SqlString = SqlString & "FROM testMeasurements " 
    SqlString = SqlString & "WHERE (((testMeasurements.TestName)='Average Power'));" 

    DoCmd.RunSQL (SqlString) 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "exportToExcel", "C:\TestMeasurements.xls", True, "A1:G12" 
End Sub 

來源:http://www.ehow.com/how_7326712_save-access-query-excel-vba.html

這可以直接從數據庫或從Excel中完成(您需要使用Excel VBA打開數據庫才能這樣做,但大多數Office套件產品彼此交互良好)。

如果要將電子表格的數據推送到Access數據庫中,則不同。您只需打開數據庫並通過INSERT查詢進行循環。下面是一個簡單的例子,你只需要添加的循環:

Dim db as DAO.Database 
Set db = OpenDatabase(myDataBase.mdb) 
Call db.Execute("INSERT INTO myTable (Field1, Field2) VALUES('Value1', 'Value2')")