在 Access 中使用 Excel 电子表格
Posted
技术标签:
【中文标题】在 Access 中使用 Excel 电子表格【英文标题】:Use Excel spreadsheet from within Access 【发布时间】:2013-05-02 15:44:16 【问题描述】:我有一个 Excel 电子表格,可以根据各种测试结果计算风险(动脉瘤修复后的围手术期死亡率)。
用户将测试结果输入电子表格(输入单元格),然后输出预测死亡率的各种模型的一组数字(大约 6 个结果)。电子表格作为一个复杂的函数,一次生成一个患者的结果。
我还有一个(单独的)访问数据库,其中包含多个患者的数据 - 包括进入电子表格的所有测试结果数据。目前我必须手动将这些数据输入到电子表格中,得到结果,然后手动将它们输入到数据库中。
有没有办法自动执行此操作。即我可以将data1、data2、data3...从Access导出到电子表格中到需要输入数据的单元格中,然后从显示结果的单元格中获取结果(result1、result2、result3...)移植回访问。
理想情况下,这可以现场完成。
我想我可以尝试将电子表格的功能编程为一个复杂的访问函数,但老实说,我不确定电子表格中的算法是如何工作的。它是由比我聪明得多的麻醉师设计的......
希望这是有道理的。非常感谢任何帮助。
克里斯·哈蒙德
【问题讨论】:
【参考方案1】:可以从 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 我认为他需要更改单元格值才能触发计算,因此需要写入工作表。 工作表应该仍然可以编辑,只是无法保存更改。我没有在只读工作簿上做过宏,所以不知道它是否会影响计算。【参考方案2】:要将数据推送回 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 数据库引擎对象库的引用。
【讨论】:
谢谢 - 我会试试看!【参考方案3】:不确定是否完全理解您想要的,但如果您只想将查询结果导出到电子表格,您可以使用以下内容:
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')")
【讨论】:
以上是关于在 Access 中使用 Excel 电子表格的主要内容,如果未能解决你的问题,请参考以下文章
将 Excel 中的两列导入现有的 Access2010 表中使用转移电子表格时出错
导入 Excel 电子表格时 MS Access 2013 类型转换失败
在使用 VBA 的 MS Access 链接的 Excel 电子表格中指定“开放式”范围
MS Access 2003 - Access 表单上的嵌入式 Excel 电子表格