首页 > 解决方案 > VBA - 此集合中未找到项目 - 找不到原因

问题描述

需要一些帮助。我不是程序员,也不是流利的 VBA,但不知何故最终试图自动化我公司每周手动运行的旧 Access 文件。手动运行需要 2 个多小时,因此自动化似乎值得。似乎已经完成了大部分工作,但现在在最后几个命令上失败了。在错误发生之前运行大约需要一个小时,因此故障排除需要很长时间。

老实说,我真的不知道我在做什么。到目前为止,我一直在使用我发现的其他类似问题的不同答案中的示例来自动执行此操作,并且前 5 个步骤运行没有问题。我已经尝试过这个错误的其他答案,但他们还没有为我修复它,因为我几乎只是把东西扔在墙上,看看有什么东西粘住了,我不确定如何继续。

这是给出错误的代码:

strSQL = ""
strSQL = strSQL & "SELECT Alla_Aktiva.LEVID AS [FINFO LEVERANTÖRSNR], Alla_Aktiva.FINFONR AS [FINFO ARTIKELNUMMER], Alla_Aktiva.LEVARTNR AS [LEVERANTÖRS ARTIKELNUMMER], Alla_Aktiva.PTISWEDISH AS INGRESS, Alla_Aktiva.PTKSWEDISH AS PRODUKTTEXT, Alla_Aktiva.PTTSWEDISH AS [TEKNISK BESKRIVNING], Alla_Aktiva.PTPSWEDISH AS PUNKTLISTA "
strSQL = strSQL & "FROM FINFO_ORDERS_GRBES00 INNER JOIN Alla_Aktiva ON FINFO_ORDERS_GRBES00.SUPPLIERFROM_BELNRF = Alla_Aktiva.LEVID "
strSQL = strSQL & "WHERE (((FINFO_ORDERS_GRBES00.SUBSCRIBERID_BEABN)=39221"
strSQL = strSQL & "));"

db.QueryDefs.Delete "ExportData2"
Set queData = db.CreateQueryDef("ExportData2", strSQL)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ExportData2", "G:\Finfo_Jobb\MCLankar\MC Stat\Utskick\Abo-" & 39221 & "" & Format$(Now(), "YYYYMMDDHHMMSS") & ".xlsx", True

db.QueryDefs.Delete "ExportData2" - 这被标记为错误,在此集合中找不到项目作为错误

因此,理论上,这应该生成每个供应商(瑞典语为 Leverantör)在其产品上拥有多少数据的统计报告,并将其放入一个 Excel 文件中,该文件位于我们的共享网络磁盘 (G:)

由于每次我尝试新事物都需要一个多小时的运行时间,我对此感到有些沮丧,并且只有 3 天的时间才能进行为期 3 周的假期,并且在此之前启动并运行它可以让我在那个假期不工作,生成报告。:p

任何帮助将不胜感激

(为什么我的公司使用 Access 从包含数百万种产品和每种产品数百个不同数据点的产品数据库中生成统计数据,这超出了我的能力范围:p(这是它一直以来的完成方式,并且没有财务激励来更新更多内容合适,但是是的...))

标签: vbams-access

解决方案


由于此时不需要 QueryDef(您正在删除它,但它实际上并不存在)。您只需要在删除它之前简单检查它是否存在。

如下修改您的代码应该可以为您解决问题。

strSQL = ""
strSQL = strSQL & "SELECT Alla_Aktiva.LEVID AS [FINFO LEVERANTÖRSNR], Alla_Aktiva.FINFONR AS [FINFO ARTIKELNUMMER], Alla_Aktiva.LEVARTNR AS [LEVERANTÖRS ARTIKELNUMMER], Alla_Aktiva.PTISWEDISH AS INGRESS, Alla_Aktiva.PTKSWEDISH AS PRODUKTTEXT, Alla_Aktiva.PTTSWEDISH AS [TEKNISK BESKRIVNING], Alla_Aktiva.PTPSWEDISH AS PUNKTLISTA "
strSQL = strSQL & "FROM FINFO_ORDERS_GRBES00 INNER JOIN Alla_Aktiva ON FINFO_ORDERS_GRBES00.SUPPLIERFROM_BELNRF = Alla_Aktiva.LEVID "
strSQL = strSQL & "WHERE (((FINFO_ORDERS_GRBES00.SUBSCRIBERID_BEABN)=39221"
strSQL = strSQL & "));"

' Modified Code below
    Dim qdf As DAO.QueryDef

    For Each qdf In CurrentDb.QueryDefs
      If qdf.Name = "ExportData2" Then
        CurrentDb.QueryDefs.Delete "ExportData2"
         Exit For
      End If
    Next
'End modified code

Set queData = db.CreateQueryDef("ExportData2", strSQL)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ExportData2", "G:\Finfo_Jobb\MCLankar\MC Stat\Utskick\Abo-" & 39221 & "" & Format$(Now(), "YYYYMMDDHHMMSS") & ".xlsx", True

推荐阅读