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

时间:2018-09-14 16:44:52

标签: excel ms-access access-vba copy-paste delete-row

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

根据我的经验,将Excel文档导入到临时NEW(或完全为空)Access表中通常是最简单的方法。这样,您就不必像在Excel VBA中一样担心单元格引用。即使Excel文档中的旧数据每次仅做了一些新更改,将其导入到临时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。

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