מיזוג דואר מטבלת אקסס
-
@ארי אני שמח שהנקודה הזו הובהרה. אין בעיה עקרונית למזג מבסיס נתונים פתוח. (למעשה, יכולת מיזוג הדואר היתה מאוד עלובה אם היתה מגבלה כזו...)
השאלה המתבקשת כעת היא: האם יש בכלל צורך לקשר שוב בקוד את הוורד לאקסס? אם הוא מקושר כבר לאקסס ואתה מנסה לקשר שוב לאותו הקובץ, זה אכן יכול לגרום את השגיאה.עצתי לך:
- אם אתה לא צריך לקשר את הוורד באופן דינמי לאקסס, פשוט תדלג על כל השורות של הקישור:
With OW.ActiveDocument.MailMerge .MainDocumentType = 0 .OpenDataSource Name:=StrPath, SQLStatement:="SELECT * FROM מכתב" .ViewMailMergeFieldCodes = 9999998 .ShowWizard InitialState:=6, ShowDataStep:=False, ShowTemplateStep:=False End With
- אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.
@OdedDvir אמר במיזוג דואר מטבלת אקסס:
אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.
מיזוג דואר תמיד זה דינאמי. לא?
איך אני מכניס רק סימניות בלי לקשר לקובץ אקסס, כשאני לא בוחר קובץ למיזוג השורת כותרת נראית כך:
אין אפשרות להכניס שדות למיזוג.
תודה רבה!עריכה: אני מצרף כאן את קבצי האקסס והוורד, תודה.
מינהל_האוכלוסין.doc
למיזוג - עותק.accdb -
@OdedDvir אמר במיזוג דואר מטבלת אקסס:
אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.
מיזוג דואר תמיד זה דינאמי. לא?
איך אני מכניס רק סימניות בלי לקשר לקובץ אקסס, כשאני לא בוחר קובץ למיזוג השורת כותרת נראית כך:
אין אפשרות להכניס שדות למיזוג.
תודה רבה!עריכה: אני מצרף כאן את קבצי האקסס והוורד, תודה.
מינהל_האוכלוסין.doc
למיזוג - עותק.accdb@ארי אמר במיזוג דואר מטבלת אקסס:
מיזוג דואר תמיד זה דינאמי. לא?
כוונתי הייתה אם מיקום מקור הנתונים אינו קבוע, ויש צורך לקבוע אותו באופן דינמי בזמן ריצה. אם זה לא המקרה, אפשר ליצור קובץ עם שדות ולבטל את הקישור לאחר מכן.
אין אפשרות להכניס שדות למיזוג.
נכון. בהתחלה אתה באמת צריך לקשר למקור הנתונים, למקם את השדות ולשמור. אחר כך פתח את הקובץ שוב, ובדיאלוג ששואל האם ברצונך לקשר למקור הנתונים, בחר לא. ושמור את הקובץ.
-
אני לא מצליח
@OdedDvir אני לא אוהב לבקש קודים, כי אני אוהב ללמוד לבד. אבל במקרה זה אולי יש מצב לדוגמת קוד בבקשה?
ממש תודה על הכל! -
@ארי אני לא מצליח להבין את הבעיה.
אם הקובץ וורד מוצג כראוי בפתיחה, ומבצע מיזוג דואר כמצופה, כל מה שנותר לעשות בצד של אקסס הוא לכתוב קוד שפותח ומדפיס את הקובץ, אין צורך לטפל במיזוג דואר בקוד. -
@OdedDvir גם לי זה נשמע פשוט.
אבל כשניסיתי לעשות קוד שרק מדפיס הוא לא עדכן את הנתונים, אלא הדפיס את הנתונים שהיו בפעם האחרונה שפתחו את הקובץ. -
זה מידרדר....
עכשיו ניסיתי שוב עם הקוד הבא שרק מדפיס את הקובץ. והוא הדפיס אותו עם השדות למיזוג...
זה הקוד:Set objWord = CreateObject("Word.Application") objWord.Visible = True Set objDoc = objWord.Documents.Add() objWord.PrintOut , , , , , , , , , , , , "C:\Users\1\מכתב.doc" objWord.Quit
וזו התוצאה (דוגמא מתוך הקובץ PDF):
-
זה מידרדר....
עכשיו ניסיתי שוב עם הקוד הבא שרק מדפיס את הקובץ. והוא הדפיס אותו עם השדות למיזוג...
זה הקוד:Set objWord = CreateObject("Word.Application") objWord.Visible = True Set objDoc = objWord.Documents.Add() objWord.PrintOut , , , , , , , , , , , , "C:\Users\1\מכתב.doc" objWord.Quit
וזו התוצאה (דוגמא מתוך הקובץ PDF):
@ארי טעיתי, למרות שאחר הפתיחה אין צורך לקשר את הקובץ, מכל מקום צריך להפעיל את מיזוג הדואר כדי ליצור את הפלט הסופי.
באקסס תוסיף את הפונקציה הציבורית הבאה:
Public Sub PrintDocument(templateFileName As String, sourceTable As String, sql As String) Dim wordApp As New Word.Application wordApp.Documents.Open fileName:=templateFileName, ReadOnly:=True With wordApp.ActiveDocument.MailMerge .OpenDataSource _ Name:=Application.CurrentProject.Path & "\" & Application.CurrentProject.Name, _ LinkToSource:=False, _ Connection:="TABLE " & sourceTable, _ SQLStatement:=sql .Destination = wdSendToPrinter .Execute End With wordApp.Quit False Set wordApp = Nothing End Sub
הפונקציה מצפה לשלושה פרמטרים:
- שם קובץ הוורד למיזוג
- טבלת מקור הנתונים
- שאילתת SQL
הפונקציה מריצה את מיזוג הדואר, ופולטת את המסמך הממוזג למדפסת ברירת המחדל.
קריאה לדוגמא:
PrintDocument Application.CurrentProject.Path & "\" & "מינהל_האוכלוסין.doc", "מכתב", "SELECT * FROM [מכתב]"
-
@ארי טעיתי, למרות שאחר הפתיחה אין צורך לקשר את הקובץ, מכל מקום צריך להפעיל את מיזוג הדואר כדי ליצור את הפלט הסופי.
באקסס תוסיף את הפונקציה הציבורית הבאה:
Public Sub PrintDocument(templateFileName As String, sourceTable As String, sql As String) Dim wordApp As New Word.Application wordApp.Documents.Open fileName:=templateFileName, ReadOnly:=True With wordApp.ActiveDocument.MailMerge .OpenDataSource _ Name:=Application.CurrentProject.Path & "\" & Application.CurrentProject.Name, _ LinkToSource:=False, _ Connection:="TABLE " & sourceTable, _ SQLStatement:=sql .Destination = wdSendToPrinter .Execute End With wordApp.Quit False Set wordApp = Nothing End Sub
הפונקציה מצפה לשלושה פרמטרים:
- שם קובץ הוורד למיזוג
- טבלת מקור הנתונים
- שאילתת SQL
הפונקציה מריצה את מיזוג הדואר, ופולטת את המסמך הממוזג למדפסת ברירת המחדל.
קריאה לדוגמא:
PrintDocument Application.CurrentProject.Path & "\" & "מינהל_האוכלוסין.doc", "מכתב", "SELECT * FROM [מכתב]"