2013-05-02 119 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')")