【问题标题】:Is there a way to use OLE DB Provider for Jet on an unsaved Excel workbook?有没有办法在未保存的 Excel 工作簿上使用 OLE DB Provider for Jet?
【发布时间】:2010-01-08 22:26:17
【问题描述】:

我正在使用 Microsoft OLE DB Provider for Jet 使用 VBA 对 Excel 中的电子表格执行查询。有没有办法在未保存工作簿上执行以下代码?

例如,如果从未保存过工作簿,ActiveWorkbook.FullName 将返回“Book1”。在这种情况下,数据源将假定路径是活动目录,并且由于文件从未保存过而出错。

有什么方法可以使用 Excel 临时文件作为 Jet 的数据源?我想对此进行测试,但我什至不知道如何返回 Excel 临时文件的路径和名称。

Public Sub LocalJetQuery()

    Dim objStartingRange As Range
    Dim objConnection As New ADODB.Connection
    Dim objRecordset As New ADODB.Recordset

    Dim strDSN As String
    Dim strSQL As String

    Set objStartingRange = Application.Selection

    If CLng(Application.Version) >= 12 Then
        strDSN = "Provider=Microsoft.ACE.OLEDB.12.0;" _
        & "Data Source=" & objStartingRange.Worksheet.Parent.FullName & ";" _
        & "Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=1"";"
    Else
        strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;" _
        & "Data Source=" & objStartingRange.Worksheet.Parent.FullName & ";" _
        & "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
    End If

    strSQL = "SELECT * FROM [" & objStartingRange.Worksheet.Name & "$];"

    objConnection.Open strDSN
    objRecordset.Open strSQL, objConnection

    Application.Workbooks.Add(xlWBATWorksheet).Sheets(1).Cells(1, 1).CopyFromRecordset objRecordset

End Sub

谢谢!

【问题讨论】:

  • 你从哪里运行这个? Excel 本身?如果是这样,您可以通过自动化 Excel 本身(即在 VBA 代码中)来完成您需要的操作。我是 Access 开发人员,因此无法告诉您它是如何完成的,但是通过 VBA,您可以处理处于加载到 Excel 实例中的状态的数据,无论它是否已保存到磁盘。
  • 是的,在 Excel 中。我想对电子表格中的数据运行 SQL 查询,但我不想事先保存工作簿。
  • 我看不到任何方法可以对未保存的数据运行 SQL 查询。这并不意味着您不能查看数据并使用 Excel 的功能来完成很多相同的事情。您是否考虑过自动化过滤功能?您也许可以通过这种方式进行简单的过滤并检查总字段。但是将电子表格(或将其副本保存为临时文件以进行查询!)会简单得多。
  • 我没想过自动化过滤功能。我会调查的。我还发现 Jet 没有与 Excel 电子表格相同的限制,这会带来其他问题。在 Excel 中工作时,留在 Excel 功能中更简单,但我会留下这个问题。也许有人会想出一个解决办法。谢谢大卫!
  • 您可以将新工作簿保存为临时文件,然后在完成后删除 excel 文件吗?您的代码看起来只是制作一个新工作簿并将您的查询转储到该新工作簿中。如果您不打算保存查询,您可以将查询转储到当前工作簿中的新页面吗?然后进行其他操作,然后删除该临时表。不太确定你想要完成什么......

标签: excel vba oledb jet


【解决方案1】:

没有。就像大卫芬顿在 cmets 中所说的那样。

【讨论】:

  • @MarkJ:忘记了这个没有答案。谢谢!
  • 我觉得这很难相信,因为接口已经实现(实际上有很多实现)并且非常有用。截至 2014 年,这仍然是正确答案吗?
  • @PatrickFromberg 不确定您指的是哪个接口。我不确定这是否仍然是一个正确的答案(但我怀疑它是)。如果有其他人知道,也许他们可以发帖告诉我们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多