Access – Excel集成

嘿,所有,一直在努力devise一个新的工作数据库。 他们一直在使用Excel进行日常报告,所有的数据都存储在那里,所以我决定在Access中拥有数据库的后端,在Excel中使用前端,这样任何分析工作都可以轻松完成该数据已被导入到Excel中。

现在我对VBA相当陌生,慢慢地习惯使用它,编写了一些代码将一个计算表从Access迁移到Excel:

Option Explicit Public Const DataLocation As String = "C:\Documents and Settings\Alice\Desktop\Database\TestDatabase21.accdb" Sub Market_Update() Call ImportFromAccessTable(DataLocation, "Final_Table", Worksheets(2).Range("A5")) End Sub Sub ImportFromAccessTable(DBFullName As String, TableName As String, TargetRange As Range) Dim cn As ADODB.Connection, rs As ADODB.Recordset, intColIndex As Integer Set TargetRange = TargetRange.Cells(1, 1) ' open the database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBFullName & ";" Set rs = New ADODB.Recordset With rs ' open the recordset ' .Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable ' all records .Open "SELECT * FROM Final_Table", cn, , , adCmdText ' filter records For intColIndex = 0 To rs.Fields.count - 1 ' the field names TargetRange.Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name Next TargetRange.Offset(1, 0).CopyFromRecordset rs ' the recordset data End With rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub Sub Company_Information() Dim companyName As String On Error GoTo gotoError companyName = Application.InputBox(Prompt:="Enter Company Name", _ Title:="Company Name", Type:=2) Exit Sub 'Don't execute errorhandler at end of routine gotoError: MsgBox "An error has occurred" End Sub 

上面的代码工作正常,并拉出所需的计算表,并将其放置在右侧单元格在Excel中。

我有两个问题,我遇到了麻烦。 首先,我已经为Excel中要粘贴数据的单元格设置了一些单元格格式; 我希望它将格式化应用到Excel中粘贴的值。

其次; 我有一个附加的Excel,它更新了一些每日股市价值; 这些值需要在每个工作日结束时转移到Access,以保持数据库的维护,我尝试了一些代码,但一直在运行有一些问题。

这部分的代码可以看到如下:

 Sub UPDATE() Dim cnt As ADODB.Connection Dim stSQL As String, stCon As String, DataLocation As String Dim stSQL2 As String 'database path - currently same as this workbook DataLocation = ThisWorkbook.Path & DataLocation stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & DataLocation & ";" 'SQL code for GL Insert to Access stSQL = "INSERT INTO Historical_Stock_Data SELECT * FROM [Portfolio] IN '" _ & ThisWorkbook.FullName & "' 'Excel 8.0;'" 'set connection variable Set cnt = New ADODB.Connection 'open connection to Access db and run the SQL With cnt .Open stCon .CursorLocation = adUseServer .Execute (stSQL) End With 'close connection cnt.Close 'release object from memory Set cnt = Nothing End Sub 

我得到以下错误与此。

 Run-time Error '-2147467259 (80004005)' The Microsoft Jet database engine cannot open the file 'Cocuments and Settings\Alice\Desktop\Database'. It is already opened exclusively by another user or you need permission to view its data. 

我对数据库,VBA和Access相当新,所以任何帮助将不胜感激。

另外我被告知,不build议使用Excel前端和Access后端的上述方法,但是他们进行的分析的很多都是通过Excel来完成的,而Excel中的图表function比Access更好至less; 这也是这个项目的要求之一。

谢谢你提前!

解决你的第一个问题:
对不起,坏消息的载体,但你的整个第一个模块是不必要的。 相反,请尝试:

  1. 转到数据 – >导入外部数据 – >导入数据 ,select您的Access文件,select您的表,并presto! 完成了!
  2. 右键单击新的“外部数据范围”以查看一些选项,其中一些与格式相关。 你甚至可以保持原来的单元格格式,只是更新值。 我一直这样做。
  3. 稍后要更新Excel数据表,有一个“外部数据范围”工具栏,可以让您刷新它以及“刷新全部”选项以刷新Excel文件中的每个表格。 (你也可以自动执行这个代码,这需要一些试验和错误,但是你完全可以完成这个任务)

关于你的第二个问题
我从来没有使用它,但也有一个“新的Web查询”选项。 我认为它可以用相同的方式操纵和更新。

最后
您对Excel前端和Access后端的select听起来非常符合您的需求。 它将数据以熟悉的介质(Excel)的forms提供给您的分析师,同时保持Access中的计算不受阻碍。 从技术上讲,你可以尝试把所有的计算都放在Excel中,但是Excel文件可能会更大更慢。

替代文字

在Access中进行数据input/更新/检查。 Access的优势之一就是使用表单来允许你在没有任何代码的情况下更新表格。 然后允许用户轻松地将数据导出到Excel,例如通过点击一些命令button。

模块:示例Excel自动化 – 缓慢的逐个单元格

模块:使用自动化将logging传输到Excel

原则上与Excel / Access配对无关。 我不熟悉ADO(我使用DAO),但是你的错误消息似乎表明数据源的path没有完全形成; 或者你已经打开它,因此locking它。