使用Access中的Excel电子表格

时间:2013-05-02 15:44:17

标签: excel ms-access

我有一个Excel电子表格,根据各种测试结果计算风险(动脉瘤修复术后围手术期死亡率)。

用户将测试结果输入电子表格(进入单元格),然后输出一组预测死亡率的各种模型的数字(约6个结果)。电子表格作为一个复杂的功能,一次产生一个患者的结果。

我还有一个(单独的)访问数据库,其中包含多个患者的数据 - 包括进入电子表格的测试结果的所有数据。目前,我必须手动将此数据输入电子表格,获取结果,然后手动将其输入数据库。

有没有办法自动执行此操作。即我可以将数据1,数据2,数据3 ...从Access导出到电子表格到需要输入数据的单元格,然后从显示结果的单元格中获取结果(result1,result2,result3 ...)移回访问。

理想情况下,这可以直播。

我想我可以尝试将电子表格的功能编程为访问中的复杂功能,但如果我诚实,我不确定电子表格中的算法是如何工作的。它是由比我聪明的麻醉师设计的......

希望这是有道理的。任何帮助非常感谢。

Chris Hammond

3 个答案:

答案 0 :(得分: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

然而,对于Access表的每一行重复这似乎很麻烦,我不确定这样做是否合理。

我会尝试将Excel计算调整为Access VBA函数,并在Access查询中使用这些自定义函数。但我不知道会有多大的任务。我建议你不要害怕麻醉师的聪明才智;这并不意味着他们实际上比你更了解VBA。至少看看你是否可以解决它。

答案 1 :(得分: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数据库引擎对象库的引用。

答案 2 :(得分: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')")