根据导出的Access数据中的条件,在两个工作簿之间复制和粘贴Excel行



在过去一个月通过这些论坛自学之前,我没有Access、VBA编码或Excel宏方面的经验。感谢论坛和贡献者。到目前为止,我很享受我的Access学习,它所带来的挑战,并感谢我能得到的任何帮助。因此,到目前为止,我使用的代码和方法可能会令人费解和困惑。我将尽我所能提供相关细节和准确的术语。

我在实验室工作,正在创建一个用于半自动报告的访问表单。从客户端接收样本,并将其记录到Excel表R&D Log中。工作表为InProcess。样本根据其来源地进行分类,并在单独的Excel列中给出一个或两个字母的地点代码(G、D、WH等)和ID"yy-000"(即D 18-096)。样本可能会被提交进行多种分析(金属、水、土壤等),如果样本中发现多种分析物,甚至可能有多行报告。还有其他几列,如收货日期、报告日期、单位等。一旦报告了样本,我会手动将其复制并粘贴到Archived工作表中,并从InProcess工作表中删除记录和空行。由于一个样本可能有多个分析,甚至更多的潜在结果,每个记录都会报告在一个新的Excel行上(具有相同的D18-096 ID号)。因此,对于当前格式中的每个样本,没有一个唯一的标识符或主键。R&D Log由实验室技术人员手动更新,工作表InProcess是Access数据库中的链接表。

Access数据库使用表单frmInProcess上的两个组合框来筛选链接表的查询qryInProcess。组合框过滤报告目的地(一个客户端可能接收多个站点代码)和分析(根据分析类型将报告分开)。查询还过滤掉了空白结果和空白日期,因此只有完成的样本才会出现在过滤后的表单上。到目前为止,我已经生成了VBA代码,该代码将表单导出为.pdf,用唯一的文件名保存文件,并打开outlook以邮寄报告。我还设法将筛选后的FormfrmInProcess导出到Excel文件Access Test(而不是链接文件)。

我现在想做的是自动将已完成的测试结果从Excel工作表R&D Log: InProcess转移到R&D Log: Archived,并从InProcess工作表中删除记录。我不确定是否可以将筛选后的表单导出到链接的Excel表中,或者是否必须使用单独的Excel文件(或者这是否对代码的简单性很重要?)。我现在想阅读ExcelAccess Test中导出的筛选表单,根据几个条件(站点、ID、分析、分析、报告日期)在R&D Log中查找匹配行,并自动在R&D Log工作表之间传输记录。最终结果是Access为已完成的测试生成报告,并且这些记录从InProcess测试中删除,并在Excel中传输到Archived测试中。我猜我可能需要关闭Access应用程序并在Excel中执行此操作。希望这很容易理解。

谢谢。

根据我的经验,将Excel文档导入临时的NEW(或完全为空)Access表通常是最简单的方法。这样就不必像在ExcelVBA中那样担心单元格引用了。即使Excel文档中有旧数据,每次只有几次新更改,将其导入临时Access表可能是最简单的方法,因为这样您就可以将此表中的数据与另一个永久Access表中的信息进行比较,并根据前者更新后者。

对于原始Excel文件,如果您需要删除其中的行,则可以更快地导出一个新的Excel文件,其中只包含旧文件最终应该包含的数据,然后使用VBA删除(或更安全!-重命名)旧文件。

所以开发过程是这样的:

  1. 保存导入步骤首先通过Access的功能区选项"外部数据"(选项卡)->"Excel"导入Excel文件,完成后,请务必选中"保存导入步骤"框,并记下您为"保存的导入"指定的名称,因为您在VBA代码中需要该名称。

  2. 在Access中,编写一个用于删除表的函数。VBA代码为:

    Const cTable = "MyExcelTempTable"
    If TableExists(cTable) Then
    DoCmd.DeleteObject acTable, cTable
    End If
    

    现在,您可以在导入的数据上测试删除功能。

  3. 编写VBA代码导入相同的电子表格以创建相同的表格:

    Const cSavedImport = "Import-MyExcelTempTable"
    ' Import the Excel file
    DoCmd.RunSavedImportExport cSavedImport
    
  4. 编写更多VBA函数以检查导入的表中是否存在错误数据,然后将其复制到永久表中。您可能正在更新现有记录或添加新记录。无论哪种方式,都可以使用Access查询或SQL执行此操作,并从VBA运行它们。

  5. 编写VBA函数以重命名旧Excel文件。(如果Excel文件名每次都不一样,你可以使用InputBox。我这样做是为了导入Excel文件,我设置了一个默认值,这样我就不必键入那么多了。)

  6. 编写VBA函数以导出Excel文件的新版本。

  7. 使自己成为窗体上的一个按钮,单击该按钮时将运行VBA函数。在该函数中,运行上面的步骤2到6。

我不确定我的答案是否与您想要做的完全匹配,但希望您对工作流程有足够的了解,以了解您需要的细节。