我开发了一个 Excel 2007/2010 工作簿,它将数据(由 SqlServer 存储过程通过 VBA 和 ADO 返回)导入到工作簿中名为“数据”的工作表的多个 Excel 表中。然后我使用 ADO(指向工作簿本身的连接)来检索其他工作表中的数据。我喜欢这个 ADO 层,因为它可以让我清楚地将数据访问层(数据工作表)和应用程序(所有其他工作表)分开。在我的情况下,数据透视表不是一个选项,因为我需要向检索到的数据添加一些公式。这就是我为 WorkBook 设置连接字符串的方式
Private Function GetThisWorkbookCN() As String
Dim fileFullPath As String
fileFullPath = ThisWorkbook.FullName
GetThisWorkbookCN = "DSN=Excel Files;DBQ=" & fileFullPath
End Function
我的问题是,只要工作簿不是只读的,一切都可以正常工作:在这种情况下,连接指向已保存的工作簿而不是打开的文件。您认为是否可以建立连接以从打开的文件中获取数据?目前,我强迫每个用户在本地保存工作簿的每个版本,但我想避免这种情况。
编辑:作为一种解决方法,Remou 建议将数据保存在本地文件(csv 或其他格式)中,并将 ADO 用于该文件而不是工作簿本身。这避免了维护问题,因为主文件可以以只读模式打开。