2015-11-05 67 views
1

我有一个查询在一周的指定日期运行。在那一天,如果任何记录被标记为“需要订购”,那么订单窗口将通过命令按钮打开。命令按钮应该将查询数据导出到excel模板(已经格式化为它应该看起来的样子),然后附加到电子邮件模板以发送。我可以让查询附加到电子邮件,我似乎无法弄清楚如何让它使用Excel模板,而不是每次创建一个新的Excel工作簿。有什么建议尝试?将查询从Access导出到Excel模板

Dim myolapp As Object 
Dim myitem As Object 

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "BoxOrder", "C:\Users\Database Design\Desktop\BoxOrder.xlsx", True 

Set myolapp = CreateObject("Outlook.Application") myolapp.Session.Logon 
Set myitem = myolapp.CreateItemFromTemplate("F:\BOX ORDER FOR PC CONNECTION.oft") 
Set myAttachments = myitem.attachments 

myAttachments.Add "C:\Users\Database Design\Desktop\BoxOrder.xlsx" 
myitem.Display 'or send 
DoCmd.Close acForm, "OrderForm" 

BoxOrder查询:

SELECT '' AS [Quantity Needed], [BoxOrder].[Box Size], [BoxOrder].Comments, 
     [BoxOrder].[Certified/Stamped Boxes], [BoxOrder].[Box Type] 
FROM BoxOrder; 

回答

1

你不能。 DoCmd.OutputToTemplateFile参数仅适用于HTML(和类似)导出。

使用DoCmd.OutputToDoCmd.TransferSpreadsheet后有两种可能性。这些都可以用VBA进行:

  • 打开导出的文件和模板文件,复制&从出口到模板粘贴数据,保存为新的文件。
  • 打开导出文件,使用VBA应用格式。
    使用Excel宏录像机给你一个开始。

这取决于你的模板的复杂性,哪一个更好。

+0

该模板非常基础。第一行有我需要的所有标题。没有其他的。最终用户将会使用这种方式对excel不是很熟悉,所以我正在尽量让他尽可能简单。 – Mouse

+0

然后您应该使用'DoCmd.TransferSpreadsheet acExport,...,HasFieldNames:= True'。如有必要,编辑你的查询列以获得你想要的列名('SELECT Fieldname AS [Column Header],...')。那么你可能不需要任何进一步的格式。 @Mouse – Andre

+0

如果我需要添加一个没有字段的列,该怎么办?我需要将Excel的数量添加到Excel电子表格中,用户将手动输入数量。如果必须,我想我可以打开另一个窗口来询问数量。我只是想避免打开几个窗口来发送订单。 @ Andre451 – Mouse