在过去一个月通过这些论坛自学之前,我没有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删除(或更安全!-重命名)旧文件。
所以开发过程是这样的:
-
保存导入步骤首先通过Access的功能区选项"外部数据"(选项卡)->"Excel"导入Excel文件,完成后,请务必选中"保存导入步骤"框,并记下您为"保存的导入"指定的名称,因为您在VBA代码中需要该名称。
-
在Access中,编写一个用于删除表的函数。VBA代码为:
Const cTable = "MyExcelTempTable" If TableExists(cTable) Then DoCmd.DeleteObject acTable, cTable End If
现在,您可以在导入的数据上测试删除功能。
-
编写VBA代码导入相同的电子表格以创建相同的表格:
Const cSavedImport = "Import-MyExcelTempTable" ' Import the Excel file DoCmd.RunSavedImportExport cSavedImport
-
编写更多VBA函数以检查导入的表中是否存在错误数据,然后将其复制到永久表中。您可能正在更新现有记录或添加新记录。无论哪种方式,都可以使用Access查询或SQL执行此操作,并从VBA运行它们。
-
编写VBA函数以重命名旧Excel文件。(如果Excel文件名每次都不一样,你可以使用InputBox。我这样做是为了导入Excel文件,我设置了一个默认值,这样我就不必键入那么多了。)
-
编写VBA函数以导出Excel文件的新版本。
-
使自己成为窗体上的一个按钮,单击该按钮时将运行VBA函数。在该函数中,运行上面的步骤2到6。
我不确定我的答案是否与您想要做的完全匹配,但希望您对工作流程有足够的了解,以了解您需要的细节。