2015-11-05 155 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