Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Access 2013 select查询的结果导出到Excel 2013工作表中,而不创建新工作表或中断引用_Excel_Ms Access_Vba - Fatal编程技术网

将Access 2013 select查询的结果导出到Excel 2013工作表中,而不创建新工作表或中断引用

将Access 2013 select查询的结果导出到Excel 2013工作表中,而不创建新工作表或中断引用,excel,ms-access,vba,Excel,Ms Access,Vba,这个问题相当简单,但它让我感到困惑,特别是因为这段代码在我制作的另一个应用程序中工作得非常好,所以我怀疑在某个地方有某种隐藏的设置导致了这个问题 我需要将Access select查询的结果传输到模板Excel工作表的副本中。此模板中还有一些其他工作表,这些工作表引用将接收Access查询数据的工作表,然后这些工作表将对其进行一些格式化和计算。我所需要的只是将这个查询的结果传输到正确的工作表中,而不使用任何格式或任何东西。覆盖整张纸也可以 我的问题是,它没有复制到工作表“qryLineItems

这个问题相当简单,但它让我感到困惑,特别是因为这段代码在我制作的另一个应用程序中工作得非常好,所以我怀疑在某个地方有某种隐藏的设置导致了这个问题

我需要将Access select查询的结果传输到模板Excel工作表的副本中。此模板中还有一些其他工作表,这些工作表引用将接收Access查询数据的工作表,然后这些工作表将对其进行一些格式化和计算。我所需要的只是将这个查询的结果传输到正确的工作表中,而不使用任何格式或任何东西。覆盖整张纸也可以

我的问题是,它没有复制到工作表“qryLineItemsExportBuffer”,而是创建了一个名为“qryLineItemsExportBuffer1”的新工作表,并将查询结果放在那里-因此工作簿中的所有引用都在错误的位置查找。我也不能使用DoCmd.TransferSpreadsheet[Range]参数定义目标工作表

这是我的代码-它是1。打开模板2。使用新名称3保存副本。传输查询结果,然后4。打开副本并重新计算/重建链接:

Private子cmdExportInvoiceRequestForm_Click()
将模板设置为对象
Dim xlsxInvoiceRequestTemplate作为Excel.工作簿
Dim xlsxInvoiceRequestNewName作为字符串
Dim xlsxInvoiceRequestCopy作为Excel.工作簿
xlsxInvoiceRequestNewName=Application.CurrentProject.Path&“\”&CustomerName&“-InvoiceRequest-”&Format(日期,“dd-mm-yyyy”)&“.xlsx””创建新发票报告的名称
MsgBox xlsxInvoiceRequestNewName'用户显示名称和日期
MsgBox Application.CurrentProject.Path“用户”显示在目标文件夹中
'启动Excel实例并打开模板工作簿。
设置instExcelTemplate=CreateObject(“Excel.Application”)
设置xlsxInvoiceRequestTemplate=instExcelTemplate.Workbooks.Open(Application.CurrentProject.Path&“\Templates\CustomerInvoiceRequestFormTemplate.xlsx”)'打开发票报告模板
xlsxInvoiceRequestTemplate.SaveAs文件名:=(xlsxInvoiceRequestNewName)'将模板另存为正确目录中的新文件
instExcelTemplate.Workbooks.Close'关闭Excel实例。
'将qryLineItemsExportBuffer结果传输到新创建的工作簿。
DoCmd.TransferSpreadsheet acExport,10,“qryLineItemsExportBuffer”,xlsxInvoiceRequestNewName
'启动excel实例并打开新工作簿。
设置instExcelCopy=CreateObject(“Excel.Application”)
设置xlsxInvoiceRequestCopy=instExcelCopy.Workbooks.Open(xlsxInvoiceRequestNewName)
instExcelCopy.CalculativelRebuild“重新计算工作簿中的所有值并重新生成链接。这是必要的,因为它在手动打开时不会执行此操作。可以在Excel中使用CTRL+SHIFT+ALT+F9完成。
xlsxInvoiceRequestCopy.Save“保存副本”
instExcelCopy.Workbooks.Close'关闭Excel实例。
设置xlsxInvoiceRequestCopy=Nothing
Set instExcelCopy=Nothing
xlsxInvoiceRequestNewName=“”
端接头
我也不能将任何代码放入Excel模板本身,因此我不能让它从新工作表复制数据


我缺少什么?

我找到了正确的方法,可以使用DoCmd.TransferSpreadsheet方法将Access查询结果导出到Excel工作表中的特定工作表或区域,而无需创建新工作表。强烈建议您不能为从Access导出到Excel设置范围参数,我还没有在网上找到任何其他提到此功能的来源。但实际上,您可以使用Excel的名称管理器有效地为DoCmd.TransferSpreadsheet设置目标范围

假设我们希望将Access查询“qryItemsExport”的结果传输到与Access数据库位于同一文件夹中名为“DestinationWorkbook.xlsx”的工作簿中的工作表

首先,进入工作簿的名称管理器,并将一个名为“qryItemsExport”的命名范围设置为您希望数据进入的位置。然后,在Access项目中使用以下VBA:

Dim xlsxDestinationWorkbook as String

xlsxDestinationWorkbook = Application.CurrentProject.Path & "\" & "DestinationWorkbook.xlsx"

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryItemsExport", xlsxDestinationWorkbook

第一行将工作簿名称变量声明为字符串。第二行将工作簿名称变量指定给当前与Access项目位于同一文件夹中的版本。第三行以Excel 2010+格式将数据从查询导出到目标工作簿。由于该命令试图导出到目标“qryItemsExport”,这将转到先前命名的范围,并将数据放置在该位置,从左上角开始。它不会创建新工作表或重命名现有工作表,因此对要复制到的工作表的引用将保持不变。

我找到了正确的方法,可以使用DoCmd.TransferSpreadsheet方法将Access查询的结果导出到Excel工作表中的特定工作表或范围,而无需创建新工作表。强烈建议您不能为从Access导出到Excel设置范围参数,我还没有在网上找到任何其他提到此功能的来源。但实际上,您可以使用Excel的名称管理器有效地为DoCmd.TransferSpreadsheet设置目标范围

假设我们希望将Access查询“qryItemsExport”的结果传输到与Access数据库位于同一文件夹中名为“DestinationWorkbook.xlsx”的工作簿中的工作表

首先,进入工作簿的名称管理器,并将一个名为“qryItemsExport”的命名范围设置为您希望数据进入的位置。然后,在Access项目中使用以下VBA:

Dim xlsxDestinationWorkbook as String

xlsxDestinationWorkbook = Application.CurrentProject.Path & "\" & "DestinationWorkbook.xlsx"

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryItemsExport", xlsxDestinationWorkbook
第一行将工作簿名称变量声明为字符串。第二行将工作簿名称变量指定给当前与Access项目位于同一文件夹中的版本。第三行以Excel 2010+格式将数据从查询导出到目标工作簿。因为该命令试图导出到目标