在VBA中使用SQL联接两个Excel工作簿中的数据(只读错误)

吉米·斯格拉佐蒂(Jimmy Sgrazzutti)

我正在寻求从两个非常大的ex​​cel工作簿中加入特定数据,然后将其保存到另一个工作簿中。为了做到这一点,我使用ADODB对象来使用SQL命令,这使执行连接比执行成千上万的VLookup容易得多。我的安装程序提示状态名称,并且数据源被格式化以依赖于该状态。假设您输入了“内华达州”。它将连接到名为“内华达州-生物元数据多重续集”的文件,并将其与另一个名为“内华达州-网站数据仅多个续续号”的文件并从中选择某些字段。

在调试时,我可以看到连接工作正常,并且在将字符串变量'sql'更改为等于“ SELECT * FROM [biologicalresult $]”的情况下,它将可以正常工作。问题似乎与以下事实有关:我通过ADODB查询将其连接到另一个工作簿,并且出现错误:“无法更新。数据库或对象是只读的”

Option Explicit

Sub RunSELECT()

    On Error GoTo ErrorHandling

    Dim cn As Object, rs As Object, output As String, sql As String, state As String
    state = InputBox("Please insert the state name with the first letter being capital")

    Set cn = CreateObject("ADODB.Connection")

    '---Connecting to the Data Source---
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .connectionstring = "Data Source=T:\Marketing\Data Analytics\GIS Data\Water Quality Portal Data\State Data\" & state & _
                            " - biological metadata multiple cont;Extended Properties=""Excel 12.0 Xml;HDR=YES;Readonly = false;IMEX = 0"";"
        .Open
    End With

    '---Run the SQL SELECT Query---
    sql = "SELECT b.OrganizationIdentifier, b.OrganizationFormalName, b.MonitoringLocationIdentifier, s.LatitudeMeasure, s.LongitudeMeasure, " & _
        "b.ActivityIdentifier , b.ActivityTypeCode, b.ActivityMediaName, b.ActivityMediaSubdivisionName, " & _
        "b.ActivityStartDate, b.ProjectIdentifier, b.CharacteristicName, b.ResultSampleFractionText, b.ResultMeasureValue, b.[ResultMeasure/MeasureUnitCode] " & _
        "FROM [biologicalresult$] b INNER JOIN (SELECT * FROM [Excel 12.0 Xml; IMEX = 0; HDR = Yes; Database = T:\Marketing\Data Analytics\GIS Data\Water Quality Portal Data\" & _
        "State Data\" & state & " - Site data only multiple cont;Readonly = False].[station$]) s " & _
        "ON b.MonitoringLocationIdentifier = s.MonitoringLocationIdentifier;"

    Set rs = cn.Execute(sql)

    '---Clean up---
    rs.Close
    cn.Close
    Set cn = Nothing
    Set rs = Nothing

Exit Sub

ErrorHandling:
    MsgBox ("Source: " & Err.Source & vbNewLine & "Number: " & Err.Number & vbNewLine & "Description: " & Err.Description & vbNewLine & "Help Context: " & Err.HelpContext)
done:
    End Sub

感谢您的任何帮助!

完善

可以肯定的是,该错误信息不足,因为问题可能是由于文件路径问题引起的。但是,这种简单的印刷方式可能会对以后犯同样细微错误的读者有所帮助。顺便说一句,对于长名称,请考虑单独的变量,并将其连接为连接和SQL字符串。

  1. 包括完整路径(包括扩展名).xlsx.xlsm源文件中。

    meta_file = "T:\Marketing\Data Analytics\GIS Data\Water Quality Portal Data\State Data\" _
                 & state & " - biological metadata multiple cont.xlsx"
    
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .connectionstring = "Data Source=" & meta_file & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;Readonly=false;IMEX=0"";"
        .Open
    End With
    
  2. 在方括号名称空间内的Database参数之前和之后删除空格...Database=T:\Marketing\...否则,引擎会将空间解释为名称的一部分。甚至考虑删除所有参数IMEXHDRReadonly之间的空格

    site_file = "T:\Marketing\Data Analytics\GIS Data\Water Quality Portal Data\State Data\" _
                 & state & " - Site data only multiple cont.xlsx"
    
    '---Run the SQL SELECT Query---
    sql = "SELECT b.OrganizationIdentifier, b.OrganizationFormalName, " & _
          "       b.MonitoringLocationIdentifier, s.LatitudeMeasure, " & _ 
          "       s.LongitudeMeasure, b.ActivityIdentifier, b.ActivityTypeCode, " & _ 
          "       b.ActivityMediaName, b.ActivityMediaSubdivisionName, " & _
          "       b.ActivityStartDate, b.ProjectIdentifier, b.CharacteristicName, " &  _
          "       b.ResultSampleFractionText, b.ResultMeasureValue, " & _
          "       b.[ResultMeasure/MeasureUnitCode] " & _
          "FROM [biologicalresult$] b " & _
          "INNER JOIN (SELECT * FROM [Excel 12.0 Xml;IMEX=0;HDR=Yes;" & _
          "                           Database=" & site_file & ";Readonly=False].[station$]) s " & _
          "ON b.MonitoringLocationIdentifier = s.MonitoringLocationIdentifier;"
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打开两个工作簿时参考工作簿中的公式会错误地填写数据

来自分类Dev

如何像在SQL中那样在Excel中联接两个工作表?

来自分类Dev

C#两个Excel工作簿项目设置在Excel工作簿中提供相同的数据

来自分类Dev

比较两个 Excel 工作簿并将匹配的数据复制到第三个工作簿

来自分类Dev

两个工作簿之间的Excel VBA复制单元格

来自分类Dev

比较两个 Excel 工作簿:VBA 数组不相等

来自分类Dev

打开 Excel 工作簿时自动运行两个 vba 代码

来自分类Dev

如何使用联接从两个表中搜索数据

来自分类Dev

如何使用“联接”从两个表中检索数据?

来自分类Dev

Excel VBA 从要在列表中使用的两个不同范围创建名称(数据验证)

来自分类Dev

使用VBA比较两个Excel工作表

来自分类Dev

如何比较两个不同的Excel工作簿中的列

来自分类Dev

使用Excel-VBA将数据从许多工作簿复制到摘要工作簿。运行时错误

来自分类Dev

如何使用C#代码水平平铺两个Excel工作簿

来自分类Dev

比较两个工作簿中的A列,查找相邻的单元格数据

来自分类Dev

使用多个条件在两个工作簿之间复制数据

来自分类Dev

使用应用系列将两个列表中的数据框写入 Excel 文件的两个单独工作表

来自分类Dev

在两个Sheets Excel VBA中更新数据

来自分类Dev

excel vba宏,以匹配来自两个不同工作簿的单元格并相应地复制和粘贴

来自分类Dev

使用 VBA 在两个工作表中查找

来自分类Dev

遭受只读错误

来自分类Dev

如何使用openXML将两个工作表聚合到一个工作簿中?

来自分类Dev

使用Excel VBA在工作簿中查找匹配项:运行时错误1004

来自分类Dev

SQL:在SQL Server中使用电子邮件地址联接两个表

来自分类Dev

在 nodejs 中使用集群在两个不同的工作线程中运行两个任务

来自分类Dev

如何使用VBA从变量Excel工作簿复制数据?

来自分类Dev

如何比较两个工作簿

来自分类Dev

使用Excel VBA修改另一个工作簿中的.zoom属性

来自分类Dev

使用联接中的多行联接两个表

Related 相关文章

  1. 1

    打开两个工作簿时参考工作簿中的公式会错误地填写数据

  2. 2

    如何像在SQL中那样在Excel中联接两个工作表?

  3. 3

    C#两个Excel工作簿项目设置在Excel工作簿中提供相同的数据

  4. 4

    比较两个 Excel 工作簿并将匹配的数据复制到第三个工作簿

  5. 5

    两个工作簿之间的Excel VBA复制单元格

  6. 6

    比较两个 Excel 工作簿:VBA 数组不相等

  7. 7

    打开 Excel 工作簿时自动运行两个 vba 代码

  8. 8

    如何使用联接从两个表中搜索数据

  9. 9

    如何使用“联接”从两个表中检索数据?

  10. 10

    Excel VBA 从要在列表中使用的两个不同范围创建名称(数据验证)

  11. 11

    使用VBA比较两个Excel工作表

  12. 12

    如何比较两个不同的Excel工作簿中的列

  13. 13

    使用Excel-VBA将数据从许多工作簿复制到摘要工作簿。运行时错误

  14. 14

    如何使用C#代码水平平铺两个Excel工作簿

  15. 15

    比较两个工作簿中的A列,查找相邻的单元格数据

  16. 16

    使用多个条件在两个工作簿之间复制数据

  17. 17

    使用应用系列将两个列表中的数据框写入 Excel 文件的两个单独工作表

  18. 18

    在两个Sheets Excel VBA中更新数据

  19. 19

    excel vba宏,以匹配来自两个不同工作簿的单元格并相应地复制和粘贴

  20. 20

    使用 VBA 在两个工作表中查找

  21. 21

    遭受只读错误

  22. 22

    如何使用openXML将两个工作表聚合到一个工作簿中?

  23. 23

    使用Excel VBA在工作簿中查找匹配项:运行时错误1004

  24. 24

    SQL:在SQL Server中使用电子邮件地址联接两个表

  25. 25

    在 nodejs 中使用集群在两个不同的工作线程中运行两个任务

  26. 26

    如何使用VBA从变量Excel工作簿复制数据?

  27. 27

    如何比较两个工作簿

  28. 28

    使用Excel VBA修改另一个工作簿中的.zoom属性

  29. 29

    使用联接中的多行联接两个表

热门标签

归档