דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. מיזוג דואר מטבלת אקסס

מיזוג דואר מטבלת אקסס

מתוזמן נעוץ נעול הועבר תכנות
24 פוסטים 2 כותבים 511 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א ארי

    @OdedDvir ניסיתי קוד כזה:

    Public Function Export()
    MixToWord "מכתב", "C:\Users\1\מכתב.doc", 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
    
    StrPath = CurrentProject.Path & "\" & CurrentProject.Name
    
    Set OW = CreateObject("Word.Application")
    If Err <> 0 Then MsgBox "הייתה בעיה באיתחול וורד!" & vbCrLf & "אנא פנה לתמיכה (" & Err.Number & ")": Exit Function
    
    OW.Documents.Open strFile
    With OW.ActiveDocument.MailMerge
        .MainDocumentType = 0
        .OpenDataSource Name:=StrPath, SQLStatement:="SELECT * FROM מכתב"
        .ViewMailMergeFieldCodes = 9999998
        .ShowWizard InitialState:=6, ShowDataStep:=False, ShowTemplateStep:=False
    End With
    
    If Printer = True Then
        With OW.ActiveDocument.MailMerge
            .Destination = 1
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = 1
                .LastRecord = -16
            End With
            .Execute Pause:=False
        End With
        OW.Quit False
    Else
        OW.Visible = True
        OW.AppActivate OW.Caption
        OW.Activate
    End If
    
    End Function
    

    קבלתי את השגיאה הבאה:
    שגיאה.png

    OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    כתב ב נערך לאחרונה על ידי OdedDvir
    #8

    @ארי אמר במיזוג דואר מטבלת אקסס:
    בתור התחלה נסה להוסיף את הדגל ReadOnly:=True בפתיחה, כך:

    .OpenDataSource Name:=StrPath, ReadOnly:=True, SQLStatement:="SELECT * FROM מכתב"
    
    א תגובה 1 תגובה אחרונה
    0
    • OdedDvirO OdedDvir

      @ארי אמר במיזוג דואר מטבלת אקסס:
      בתור התחלה נסה להוסיף את הדגל ReadOnly:=True בפתיחה, כך:

      .OpenDataSource Name:=StrPath, ReadOnly:=True, SQLStatement:="SELECT * FROM מכתב"
      
      א מנותק
      א מנותק
      ארי
      כתב ב נערך לאחרונה על ידי
      #9

      @OdedDvir לא עוזר.

      OdedDvirO תגובה 1 תגובה אחרונה
      0
      • א ארי

        @OdedDvir לא עוזר.

        OdedDvirO מנותק
        OdedDvirO מנותק
        OdedDvir
        כתב ב נערך לאחרונה על ידי
        #10

        @ארי יתכן ויש Handle פתוח שלא נסגר כמו שצריך.

        1. סגור לגמרי את האקסס.
        2. תוודא שאין בתיקיית קובץ האקסס קובץ נעילה (שמו כמו שם קובץ האקסס רק עם סיומת .laccdb)
        3. בדוק כעת אם הוורד נפתח בצורה תקינה והמיזוג עובד.
        א תגובה 1 תגובה אחרונה
        0
        • OdedDvirO OdedDvir

          @ארי יתכן ויש Handle פתוח שלא נסגר כמו שצריך.

          1. סגור לגמרי את האקסס.
          2. תוודא שאין בתיקיית קובץ האקסס קובץ נעילה (שמו כמו שם קובץ האקסס רק עם סיומת .laccdb)
          3. בדוק כעת אם הוורד נפתח בצורה תקינה והמיזוג עובד.
          א מנותק
          א מנותק
          ארי
          כתב ב נערך לאחרונה על ידי
          #11

          @OdedDvir אין קובץ כזה.
          לא אמור להיות בעיה במיזוג לקובץ פתוח?

          OdedDvirO תגובה 1 תגובה אחרונה
          0
          • א ארי

            @OdedDvir אין קובץ כזה.
            לא אמור להיות בעיה במיזוג לקובץ פתוח?

            OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            כתב ב נערך לאחרונה על ידי
            #12

            @ארי אמר במיזוג דואר מטבלת אקסס:

            לא אמור להיות בעיה במיזוג לקובץ פתוח?

            במיזוג לקובץ פתוח - יכולה להיות בעיה. אבל זה לא המקרה כאן.
            כאן המיזוג הוא מקובץ פתוח.
            האם כשאתה סוגר את האקסס ופותח רק את הוורד, הנתונים מוצגים כראוי?

            א תגובה 1 תגובה אחרונה
            0
            • OdedDvirO OdedDvir

              @ארי אמר במיזוג דואר מטבלת אקסס:

              לא אמור להיות בעיה במיזוג לקובץ פתוח?

              במיזוג לקובץ פתוח - יכולה להיות בעיה. אבל זה לא המקרה כאן.
              כאן המיזוג הוא מקובץ פתוח.
              האם כשאתה סוגר את האקסס ופותח רק את הוורד, הנתונים מוצגים כראוי?

              א מנותק
              א מנותק
              ארי
              כתב ב נערך לאחרונה על ידי
              #13

              @OdedDvir אוקיי.
              כשאני פותח את הוורד ואקסס סגור הוא עובד מצוין.
              גם אם אקסס פתוח הוא עובד.
              רק בקוד יש בעיה.

              OdedDvirO תגובה 1 תגובה אחרונה
              1
              • א ארי

                @OdedDvir אוקיי.
                כשאני פותח את הוורד ואקסס סגור הוא עובד מצוין.
                גם אם אקסס פתוח הוא עובד.
                רק בקוד יש בעיה.

                OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                כתב ב נערך לאחרונה על ידי OdedDvir
                #14

                @ארי אני שמח שהנקודה הזו הובהרה. אין בעיה עקרונית למזג מבסיס נתונים פתוח. (למעשה, יכולת מיזוג הדואר היתה מאוד עלובה אם היתה מגבלה כזו...)
                השאלה המתבקשת כעת היא: האם יש בכלל צורך לקשר שוב בקוד את הוורד לאקסס? אם הוא מקושר כבר לאקסס ואתה מנסה לקשר שוב לאותו הקובץ, זה אכן יכול לגרום את השגיאה.

                עצתי לך:

                1. אם אתה לא צריך לקשר את הוורד באופן דינמי לאקסס, פשוט תדלג על כל השורות של הקישור:
                With OW.ActiveDocument.MailMerge
                    .MainDocumentType = 0
                    .OpenDataSource Name:=StrPath, SQLStatement:="SELECT * FROM מכתב"
                    .ViewMailMergeFieldCodes = 9999998
                    .ShowWizard InitialState:=6, ShowDataStep:=False, ShowTemplateStep:=False
                End With
                
                1. אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.
                א תגובה 1 תגובה אחרונה
                0
                • OdedDvirO OdedDvir

                  @ארי אני שמח שהנקודה הזו הובהרה. אין בעיה עקרונית למזג מבסיס נתונים פתוח. (למעשה, יכולת מיזוג הדואר היתה מאוד עלובה אם היתה מגבלה כזו...)
                  השאלה המתבקשת כעת היא: האם יש בכלל צורך לקשר שוב בקוד את הוורד לאקסס? אם הוא מקושר כבר לאקסס ואתה מנסה לקשר שוב לאותו הקובץ, זה אכן יכול לגרום את השגיאה.

                  עצתי לך:

                  1. אם אתה לא צריך לקשר את הוורד באופן דינמי לאקסס, פשוט תדלג על כל השורות של הקישור:
                  With OW.ActiveDocument.MailMerge
                      .MainDocumentType = 0
                      .OpenDataSource Name:=StrPath, SQLStatement:="SELECT * FROM מכתב"
                      .ViewMailMergeFieldCodes = 9999998
                      .ShowWizard InitialState:=6, ShowDataStep:=False, ShowTemplateStep:=False
                  End With
                  
                  1. אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.
                  א מנותק
                  א מנותק
                  ארי
                  כתב ב נערך לאחרונה על ידי ארי
                  #15

                  @OdedDvir אמר במיזוג דואר מטבלת אקסס:

                  אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.

                  מיזוג דואר תמיד זה דינאמי. לא?
                  איך אני מכניס רק סימניות בלי לקשר לקובץ אקסס, כשאני לא בוחר קובץ למיזוג השורת כותרת נראית כך:
                  3d96c972-1b17-4dd3-9482-5b114b56abdd-image.png
                  אין אפשרות להכניס שדות למיזוג.
                  תודה רבה!

                  עריכה: אני מצרף כאן את קבצי האקסס והוורד, תודה.
                  מינהל_האוכלוסין.doc
                  ‏‏למיזוג - עותק.accdb

                  OdedDvirO תגובה 1 תגובה אחרונה
                  0
                  • א ארי

                    @OdedDvir אמר במיזוג דואר מטבלת אקסס:

                    אם יש צורך לקשר את הוורד באופן דינמי, הכי פשוט הוא לפתוח את הוורד בלי לקשר לבסיס הנתונים, ולשמור אותו כך (רק עם הסימניות של השדות). לאחר מכן הקוד יוכל לעבוד כצפוי.

                    מיזוג דואר תמיד זה דינאמי. לא?
                    איך אני מכניס רק סימניות בלי לקשר לקובץ אקסס, כשאני לא בוחר קובץ למיזוג השורת כותרת נראית כך:
                    3d96c972-1b17-4dd3-9482-5b114b56abdd-image.png
                    אין אפשרות להכניס שדות למיזוג.
                    תודה רבה!

                    עריכה: אני מצרף כאן את קבצי האקסס והוורד, תודה.
                    מינהל_האוכלוסין.doc
                    ‏‏למיזוג - עותק.accdb

                    OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי
                    #16

                    @ארי אמר במיזוג דואר מטבלת אקסס:

                    מיזוג דואר תמיד זה דינאמי. לא?

                    כוונתי הייתה אם מיקום מקור הנתונים אינו קבוע, ויש צורך לקבוע אותו באופן דינמי בזמן ריצה. אם זה לא המקרה, אפשר ליצור קובץ עם שדות ולבטל את הקישור לאחר מכן.

                    אין אפשרות להכניס שדות למיזוג.

                    נכון. בהתחלה אתה באמת צריך לקשר למקור הנתונים, למקם את השדות ולשמור. אחר כך פתח את הקובץ שוב, ובדיאלוג ששואל האם ברצונך לקשר למקור הנתונים, בחר לא. ושמור את הקובץ.

                    תגובה 1 תגובה אחרונה
                    0
                    • א מנותק
                      א מנותק
                      ארי
                      כתב ב נערך לאחרונה על ידי
                      #17

                      אני לא מצליח 😕
                      @OdedDvir אני לא אוהב לבקש קודים, כי אני אוהב ללמוד לבד. אבל במקרה זה אולי יש מצב לדוגמת קוד בבקשה?
                      ממש תודה על הכל!

                      OdedDvirO תגובה 1 תגובה אחרונה
                      1
                      • א ארי

                        אני לא מצליח 😕
                        @OdedDvir אני לא אוהב לבקש קודים, כי אני אוהב ללמוד לבד. אבל במקרה זה אולי יש מצב לדוגמת קוד בבקשה?
                        ממש תודה על הכל!

                        OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי OdedDvir
                        #18

                        @ארי אני לא מצליח להבין את הבעיה.
                        אם הקובץ וורד מוצג כראוי בפתיחה, ומבצע מיזוג דואר כמצופה, כל מה שנותר לעשות בצד של אקסס הוא לכתוב קוד שפותח ומדפיס את הקובץ, אין צורך לטפל במיזוג דואר בקוד.

                        א תגובה 1 תגובה אחרונה
                        0
                        • OdedDvirO OdedDvir

                          @ארי אני לא מצליח להבין את הבעיה.
                          אם הקובץ וורד מוצג כראוי בפתיחה, ומבצע מיזוג דואר כמצופה, כל מה שנותר לעשות בצד של אקסס הוא לכתוב קוד שפותח ומדפיס את הקובץ, אין צורך לטפל במיזוג דואר בקוד.

                          א מנותק
                          א מנותק
                          ארי
                          כתב ב נערך לאחרונה על ידי
                          #19

                          @OdedDvir גם לי זה נשמע פשוט.
                          אבל כשניסיתי לעשות קוד שרק מדפיס הוא לא עדכן את הנתונים, אלא הדפיס את הנתונים שהיו בפעם האחרונה שפתחו את הקובץ.

                          OdedDvirO תגובה 1 תגובה אחרונה
                          1
                          • א ארי

                            @OdedDvir גם לי זה נשמע פשוט.
                            אבל כשניסיתי לעשות קוד שרק מדפיס הוא לא עדכן את הנתונים, אלא הדפיס את הנתונים שהיו בפעם האחרונה שפתחו את הקובץ.

                            OdedDvirO מנותק
                            OdedDvirO מנותק
                            OdedDvir
                            כתב ב נערך לאחרונה על ידי
                            #20

                            @ארי אתה בטוח ששמרת את השינויים בטבלת המקור באקסס לפני פתיחת הוורד?

                            א תגובה 1 תגובה אחרונה
                            0
                            • OdedDvirO OdedDvir

                              @ארי אתה בטוח ששמרת את השינויים בטבלת המקור באקסס לפני פתיחת הוורד?

                              א מנותק
                              א מנותק
                              ארי
                              כתב ב נערך לאחרונה על ידי
                              #21

                              @OdedDvir למיטב זכרוני כן.
                              אני יבדוק מחר שוב.

                              תגובה 1 תגובה אחרונה
                              0
                              • א מנותק
                                א מנותק
                                ארי
                                כתב ב נערך לאחרונה על ידי
                                #22

                                זה מידרדר....
                                עכשיו ניסיתי שוב עם הקוד הבא שרק מדפיס את הקובץ. והוא הדפיס אותו עם השדות למיזוג...
                                זה הקוד:

                                Set objWord = CreateObject("Word.Application")
                                objWord.Visible = True
                                Set objDoc = objWord.Documents.Add()
                                 
                                objWord.PrintOut , , , , , , , , , , , , "C:\Users\1\מכתב.doc"
                                 
                                objWord.Quit
                                

                                וזו התוצאה (דוגמא מתוך הקובץ PDF):
                                c62c36c6-cd84-431b-baee-2e52951b10f1-image.png

                                OdedDvirO תגובה 1 תגובה אחרונה
                                0
                                • א ארי

                                  זה מידרדר....
                                  עכשיו ניסיתי שוב עם הקוד הבא שרק מדפיס את הקובץ. והוא הדפיס אותו עם השדות למיזוג...
                                  זה הקוד:

                                  Set objWord = CreateObject("Word.Application")
                                  objWord.Visible = True
                                  Set objDoc = objWord.Documents.Add()
                                   
                                  objWord.PrintOut , , , , , , , , , , , , "C:\Users\1\מכתב.doc"
                                   
                                  objWord.Quit
                                  

                                  וזו התוצאה (דוגמא מתוך הקובץ PDF):
                                  c62c36c6-cd84-431b-baee-2e52951b10f1-image.png

                                  OdedDvirO מנותק
                                  OdedDvirO מנותק
                                  OdedDvir
                                  כתב ב נערך לאחרונה על ידי
                                  #23

                                  @ארי טעיתי, למרות שאחר הפתיחה אין צורך לקשר את הקובץ, מכל מקום צריך להפעיל את מיזוג הדואר כדי ליצור את הפלט הסופי.

                                  באקסס תוסיף את הפונקציה הציבורית הבאה:

                                  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
                                  

                                  הפונקציה מצפה לשלושה פרמטרים:

                                  1. שם קובץ הוורד למיזוג
                                  2. טבלת מקור הנתונים
                                  3. שאילתת SQL
                                    הפונקציה מריצה את מיזוג הדואר, ופולטת את המסמך הממוזג למדפסת ברירת המחדל.

                                  קריאה לדוגמא:

                                  PrintDocument Application.CurrentProject.Path & "\" & "מינהל_האוכלוסין.doc", "מכתב", "SELECT * FROM [מכתב]"
                                  
                                  א תגובה 1 תגובה אחרונה
                                  2
                                  • OdedDvirO OdedDvir

                                    @ארי טעיתי, למרות שאחר הפתיחה אין צורך לקשר את הקובץ, מכל מקום צריך להפעיל את מיזוג הדואר כדי ליצור את הפלט הסופי.

                                    באקסס תוסיף את הפונקציה הציבורית הבאה:

                                    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
                                    

                                    הפונקציה מצפה לשלושה פרמטרים:

                                    1. שם קובץ הוורד למיזוג
                                    2. טבלת מקור הנתונים
                                    3. שאילתת SQL
                                      הפונקציה מריצה את מיזוג הדואר, ופולטת את המסמך הממוזג למדפסת ברירת המחדל.

                                    קריאה לדוגמא:

                                    PrintDocument Application.CurrentProject.Path & "\" & "מינהל_האוכלוסין.doc", "מכתב", "SELECT * FROM [מכתב]"
                                    
                                    א מנותק
                                    א מנותק
                                    ארי
                                    כתב ב נערך לאחרונה על ידי
                                    #24

                                    @OdedDvir עובד!
                                    תודה רבה!!!

                                    תגובה 1 תגובה אחרונה
                                    0
                                    תגובה
                                    • תגובה כנושא
                                    התחברו כדי לפרסם תגובה
                                    • מהישן לחדש
                                    • מהחדש לישן
                                    • הכי הרבה הצבעות


                                    • 1
                                    • 2
                                    בא תתחבר לדף היומי!
                                    • התחברות

                                    • אין לך חשבון עדיין? הרשמה

                                    • התחברו או הירשמו כדי לחפש.
                                    • פוסט ראשון
                                      פוסט אחרון
                                    0
                                    • דף הבית
                                    • קטגוריות
                                    • פוסטים אחרונים
                                    • משתמשים
                                    • חיפוש
                                    • חוקי הפורום