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

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

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

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

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

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

    יש למישהו פתרון יותר טוב?

    את האשכול הזה ראית?
    https://tchumim.com/topic/12095/הדפסת-ד-וח-מאקסס-על-בסיס-קובץ-וורד?page=1

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

    @OdedDvir כן.
    אבל לא ממש הצלחתי להוציא מתוכו משהו רלוונטי (קצת אריכות על דברים שלא רלוונטיים בשבילי).
    אתה יודע להגיד לי מה הרעיון לפתרון, בעז"ה את הדרך אני ימצא... (אולי עם עוד קצת עזרה 😉).
    תודה.

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

      צהריים טובים.
      יש לי טבלה עם נתונים וכן קובץ וורד של מכתב עם מיזוג דואר שמקור הנתונים שלו זו הטבלה הנ"ל.
      אני רוצה לעשות קוד 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
      
      OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      כתב ב נערך לאחרונה על ידי OdedDvir
      #4

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

      הבעיה היא ששמתי לב שכאשר קובץ האקסס פתוח אי אפשר לעשות מקור נתונים אליו.

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

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

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

        הבעיה היא ששמתי לב שכאשר קובץ האקסס פתוח אי אפשר לעשות מקור נתונים אליו.

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

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

        @OdedDvir במיזוג דואר רגיל בהתחלה, ואז עם הקוד לעיל.

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

          @OdedDvir במיזוג דואר רגיל בהתחלה, ואז עם הקוד לעיל.

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

          @ארי מיזוג דואר מתוכנן לעבוד גם כשמקור הנתונים פתוח. איזו שגיאה קיבלת?

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

            @ארי מיזוג דואר מתוכנן לעבוד גם כשמקור הנתונים פתוח. איזו שגיאה קיבלת?

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

            @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 תגובה 1 תגובה אחרונה
            0
            • א ארי

              @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
                                          תגובה
                                          • תגובה כנושא
                                          התחברו כדי לפרסם תגובה
                                          • מהישן לחדש
                                          • מהחדש לישן
                                          • הכי הרבה הצבעות


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

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

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