צהריים טובים.
יש לי טבלה עם נתונים וכן קובץ וורד של מכתב עם מיזוג דואר שמקור הנתונים שלו זו הטבלה הנ"ל.
אני רוצה לעשות קוד VBA שפשוט ידפיס את הקובץ עם הנתונים העדכניים מהטבלה (יש בה רק שדה אחד כל פעם).
הבעיה היא ששמתי לב שכאשר קובץ האקסס פתוח אי אפשר לעשות מקור נתונים אליו.
כרגע מה שעשיתי זה שהקוד קודם מייצא את הטבלה לאקסל, ואז מגדיר את המקור נתונים של הוורד לאקסל.
הבעיה בזה היא, א' זה ארוך ולוקח קצת זמן, וב' אני לא מצליח לכתוב לו למחוק את הקובץ אקסל לאחר הפעולה, כנראה כי זה נשאר לו פתוח בזכרון.
יש למישהו פתרון יותר טוב?
תודה.
זה הקוד הנוכחי:
Public Function Export()
MixToWord "מכתב", "C:\Users\1\Downloads\מכתב.docx", True
End Function
Public Function MixToWord(StrTbl As String, strFile As String, Printer As Boolean)
On Error Resume Next
Dim OW As Object
Dim StrPath As String
If IsNothing(Dir(strFile)) Then MsgBox "!הקובץ אינו קיים" & vbCrLf & ":מיקום קובץ" & vbCrLf & strFile, vbMsgBoxRight + vbInformation, "מיקום קובץ שגוי": Exit Function
Err.Clear
StrPath = Environ("TEMP") & "\מכתב.xlsx"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, StrTbl, StrPath, True
Set OW = CreateObject("Word.Application") ' New Word.Application
If Err <> 0 Then MsgBox "הייתה בעיה באיתחול וורד!" & vbCrLf & "אנא פנה לתמיכה (" & Err.Number & ")": Exit Function
OW.Documents.Open strFile
OW.ActiveDocument.MailMerge.MainDocumentType = 0
OW.ActiveDocument.MailMerge.OpenDataSource Name:=StrPath, SQLStatement:="SELECT * FROM `מכתב`"
OW.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = 9999998
OW.ActiveDocument.MailMerge.ShowWizard InitialState:=6, ShowDataStep:=False, ShowTemplateStep:=False
If Printer = True Then
' APrint = PrintrDef
' OW.ActivePrinter = APrint
With OW.ActiveDocument.MailMerge
.Destination = 1 ' wdSendToPrinter
.SuppressBlankLines = True
With .DataSource
.FirstRecord = 1 ' wdDefaultFirstRecord
.LastRecord = -16 ' wdDefaultLastRecord
End With
.Execute Pause:=False
End With
OW.Quit False
Else
OW.Visible = True
OW.AppActivate OW.Caption
OW.Activate
End If
End Function