在Access中使用Excel电子表格

4
我有一个 Excel 电子表格,根据各种测试结果计算风险(脑动脉瘤修复术后围手术期死亡率)。用户将测试结果输入电子表格(输入单元格),然后输出一组数字(约6个结果)用于预测死亡率的各种模型。该电子表格作为一个复杂的函数,逐个患者生成结果。
我还有一个(单独的)Access数据库,其中包含多个患者的数据,包括所有输入电子表格的测试结果数据。目前,我必须手动将这些数据输入到电子表格中,获取结果,然后手动将其输入到数据库中。
是否有自动完成此过程的方法?也就是说,我可以将 Access 中的数据1、数据2、数据3...导出到电子表格中需要输入数据的单元格中,然后将显示结果的单元格中的结果(result1、result2、result3...)传输回 Access 中。
理想情况下,这可以实时完成。
我想我可以尝试在 Access 中将电子表格的功能编程为复杂函数,但如果我诚实地说,我不太确定电子表格中的算法如何工作。这是由比我聪明得多的麻醉医生设计的...
希望这样说有意义。非常感谢任何帮助。
Chris Hammond
3个回答

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。至少要看看是否能够解决问题。

赶我一步,你可能也想将工作簿以只读方式打开。 - NickSlash
@NickSlash 我认为他需要更改单元格的值以触发计算,因此需要写入工作表。 - HansUp
工作表仍应该是可编辑的,你只是不能保存更改。我从未在只读工作簿上使用过宏,所以不知道它是否影响计算。 - NickSlash

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

不确定完全理解您想要什么,但如果您只想将查询结果导出到电子表格中,可以使用以下方法:

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')")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接