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

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

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

הדפסת ד''וח מאקסס על בסיס קובץ וורד

מתוזמן נעוץ נעול הועבר תוכנה
40 פוסטים 6 כותבים 1.3k צפיות 6 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    כתב ב נערך לאחרונה על ידי OdedDvir
    #19

    @בערל הנה הקוד הבסיסי (הסתמכתי על המקור הזה)

    Public Sub MergeWordDocument(inputFileName As String, outputFileName As String)
        
        'Open the templete document
        Dim wdDoc As Object
        Set wdDoc = GetObject(inputFileName, "Word.Document")
        wdDoc.Application.Visible = False
    
        With wdDoc.MailMerge
             .MainDocumentType = 0 ' wdFormLetters
             .Destination = 0 ' wdSendToNewDocument
             .SuppressBlankLines = True
             .Execute Pause:=False
        End With
    
        ' Save the output document
        wdDoc.Application.Visible = True
        wdDoc.Application.ActiveDocument.SaveAs outputFileName
        ' Cleanup
        wdDoc.Close SaveChanges:=False
        Set wdDoc = Nothing
    End Sub
    

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

    MergeWordDocument "D:\temp\myTemplete.docx", "d:\temp\output.docx"
    
    בערלב תגובה 1 תגובה אחרונה
    4
    • clickoneC clickone

      @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

      אז נשאר לכתוב רק את הקוד של הלחצן

      זה מה שעושה הקוד שלי

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

      MixDocToWord "", "tbl", Me!tFile, Me!bPrint, ppdf, False
      

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

      tbl= שם הטבלה או השאילתא שלך (כדי לפשט את הדוגמא קראתי לו ככה, אתה יכול להחליף אותו למה שבא לך)

      tFile = שם הקובץ - בדוגמא אני שם את שם הקובץ באופן אוטומטי מהתיקייה, אתה יכול לתת גם נתיב מוחלט לבחירתך (או מהגדרות בטבלה)

      bPrint = האם לשלוח למדפסת, בוליאני (כן ולא)

      ppdf = האם לסגור לקובץ PDF, בוליאני (כן ולא)

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

      מקווה שזה יעזור

      אם לא, @OdedDvir התותח כאן כדי להסביר איך לעשות את זה הכי טוב שיש

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

      @clickone

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

      @clickone אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

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

      הסתדרתי ע"י הוספת עמודה בשאילתא והמרה לטקסט ע"י הפונקציה Format
      d0444435-a0ab-4650-8fba-a3bfaa736cea-image.png

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

        @בערל הנה הקוד הבסיסי (הסתמכתי על המקור הזה)

        Public Sub MergeWordDocument(inputFileName As String, outputFileName As String)
            
            'Open the templete document
            Dim wdDoc As Object
            Set wdDoc = GetObject(inputFileName, "Word.Document")
            wdDoc.Application.Visible = False
        
            With wdDoc.MailMerge
                 .MainDocumentType = 0 ' wdFormLetters
                 .Destination = 0 ' wdSendToNewDocument
                 .SuppressBlankLines = True
                 .Execute Pause:=False
            End With
        
            ' Save the output document
            wdDoc.Application.Visible = True
            wdDoc.Application.ActiveDocument.SaveAs outputFileName
            ' Cleanup
            wdDoc.Close SaveChanges:=False
            Set wdDoc = Nothing
        End Sub
        

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

        MergeWordDocument "D:\temp\myTemplete.docx", "d:\temp\output.docx"
        
        בערלב מנותק
        בערלב מנותק
        בערל
        ניהול
        כתב ב נערך לאחרונה על ידי בערל
        #21

        @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

        @בערל הנה הקוד הבסיסי (הסתמכתי על המקור הזה)

        תודה רבה!
        זה עובד מעולה!

        האם יש אפשרות שישמור כPDF?
        ובנוסף, זה שומר קובץ עם כל השורות של הנתונים ולא רק הנתון הנוכחי שמופיע בטופס, יש משהו לעשות בנידון?

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

          @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

          @בערל הנה הקוד הבסיסי (הסתמכתי על המקור הזה)

          תודה רבה!
          זה עובד מעולה!

          האם יש אפשרות שישמור כPDF?
          ובנוסף, זה שומר קובץ עם כל השורות של הנתונים ולא רק הנתון הנוכחי שמופיע בטופס, יש משהו לעשות בנידון?

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

          @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

          האם יש אפשרות שישמור כPDF?

          בבקשה:

          Public Sub RunMailMerge(inputFileName As String, outputFileName As String, Optional saveAsPDF As Boolean = False)
              
              ' Open Template file
              Dim wdDoc As Object
              Set wdDoc = GetObject(inputFileName, "Word.Document")
                  
              With wdDoc
                  .Application.Visible = False
                  With .MailMerge
                      .MainDocumentType = 0                ' wdFormLetters
                      .Destination = 0                     ' wdSendToNewDocument
                      .SuppressBlankLines = True
                      .Execute Pause:=False
                  End With
          
                  ' Save output file
                  .Application.Visible = True
                  If saveAsPDF Then
                      .Application.ActiveDocument.ExportAsFixedFormat _
                                                      outputFileName:=outputFileName, _
                                                      ExportFormat:=17, _
                                                      OpenAfterExport:=True, _
                                                      OptimizeFor:=wdExportOptimizeForPrint, _
                                                      Range:=0, _
                                                      IncludeDocProps:=True, _
                                                      CreateBookmarks:=2, _
                                                      BitmapMissingFonts:=True
                  Else
                      .Application.ActiveDocument.SaveAs outputFileName
                  End If
                  ' Cleanup
                  .Close SaveChanges:=False
              End With
              Set wdDoc = Nothing
          End Sub
          
          

          כדי לייצא ל-PDF תוסיף בקריאה לפונקציה פרמטר שלישי ותתן לו ערך True:

          MergeWordDocument "D:\temp\myTemplete.docx", "d:\temp\output.PDF", True
          

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

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

          בערלב תגובה 1 תגובה אחרונה
          3
          • OdedDvirO OdedDvir

            @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

            האם יש אפשרות שישמור כPDF?

            בבקשה:

            Public Sub RunMailMerge(inputFileName As String, outputFileName As String, Optional saveAsPDF As Boolean = False)
                
                ' Open Template file
                Dim wdDoc As Object
                Set wdDoc = GetObject(inputFileName, "Word.Document")
                    
                With wdDoc
                    .Application.Visible = False
                    With .MailMerge
                        .MainDocumentType = 0                ' wdFormLetters
                        .Destination = 0                     ' wdSendToNewDocument
                        .SuppressBlankLines = True
                        .Execute Pause:=False
                    End With
            
                    ' Save output file
                    .Application.Visible = True
                    If saveAsPDF Then
                        .Application.ActiveDocument.ExportAsFixedFormat _
                                                        outputFileName:=outputFileName, _
                                                        ExportFormat:=17, _
                                                        OpenAfterExport:=True, _
                                                        OptimizeFor:=wdExportOptimizeForPrint, _
                                                        Range:=0, _
                                                        IncludeDocProps:=True, _
                                                        CreateBookmarks:=2, _
                                                        BitmapMissingFonts:=True
                    Else
                        .Application.ActiveDocument.SaveAs outputFileName
                    End If
                    ' Cleanup
                    .Close SaveChanges:=False
                End With
                Set wdDoc = Nothing
            End Sub
            
            

            כדי לייצא ל-PDF תוסיף בקריאה לפונקציה פרמטר שלישי ותתן לו ערך True:

            MergeWordDocument "D:\temp\myTemplete.docx", "d:\temp\output.PDF", True
            

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

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

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

            @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

            @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

            האם יש אפשרות שישמור כPDF?

            בבקשה:

            כדי לייצא ל-PDF תוסיף בקריאה לפונקציה פרמטר שלישי ותתן לו ערך True:

            MergeWordDocument "D:\temp\myTemplete.docx", "d:\temp\output.PDF", True
            

            מדהים!

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

            צודק, טעות שלי.

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

            כעת אני משנה לשאילתת עדכון שתכניס את החישובים לטבלה המקורית
            ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר? או יש דרך יותר מומלצת?).

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

              @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

              @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

              האם יש אפשרות שישמור כPDF?

              בבקשה:

              כדי לייצא ל-PDF תוסיף בקריאה לפונקציה פרמטר שלישי ותתן לו ערך True:

              MergeWordDocument "D:\temp\myTemplete.docx", "d:\temp\output.PDF", True
              

              מדהים!

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

              צודק, טעות שלי.

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

              כעת אני משנה לשאילתת עדכון שתכניס את החישובים לטבלה המקורית
              ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר? או יש דרך יותר מומלצת?).

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

              @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

              ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר?

              זה כנראה הכי פשוט. שאילתת קיבוץ עם הפונקציה Max על השדה ID.

              A בערלב 2 תגובות תגובה אחרונה
              1
              • OdedDvirO OdedDvir

                @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר?

                זה כנראה הכי פשוט. שאילתת קיבוץ עם הפונקציה Max על השדה ID.

                A מנותק
                A מנותק
                avi rz
                כתב ב נערך לאחרונה על ידי
                #25

                @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר?

                זה כנראה הכי פשוט. שאילתת קיבוץ עם הפונקציה Max על השדה ID.

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

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

                  @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                  ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר?

                  זה כנראה הכי פשוט. שאילתת קיבוץ עם הפונקציה Max על השדה ID.

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

                  @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                  @בערל אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                  ואז אעשה שאילתא חדשה שתביא לי רק את השורה האחרונה מהטבלה, (איך? ע''י בחירת ה-ID הגבוה ביותר?

                  זה כנראה הכי פשוט. שאילתת קיבוץ עם הפונקציה Max על השדה ID.

                  עשיתי ככה:
                  מקווה שלזה הכוונה

                  SELECT TOP 1 Table1.ID, Table1.FirstName, Table1.LastName, .....,....,..., 
                  FROM Table1
                  ORDER BY Table1.ID DESC;
                  




                  \

                  @avi-rz אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

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

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

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

                    ברוך השם המערכת עובדת מעולה
                    מה שבעבר היה לוקח לי כעשר דקות עכשיו מתבצע תוך דקה!

                    אפי' הוספתי ערך ברג'יסטרי שידלג על האזהרה של וורד בפתיחת המסמך על שימוש במיזוג נתונים.

                    תודה רבה @OdedDvir היה נחמד לחזור לאקסס אחרי תקופה שלא נגעתי...😕 🙄

                    תודה רבה לשאר החברים היקרים על ההתגייסות הנרחבת

                    אני רוצה לנסות לשפר קצת ולשפשף אז אל תבטלו את המעקב בבקשה... 😊

                    OdedDvirO תגובה 1 תגובה אחרונה
                    5
                    • בערלב בערל

                      ברוך השם המערכת עובדת מעולה
                      מה שבעבר היה לוקח לי כעשר דקות עכשיו מתבצע תוך דקה!

                      אפי' הוספתי ערך ברג'יסטרי שידלג על האזהרה של וורד בפתיחת המסמך על שימוש במיזוג נתונים.

                      תודה רבה @OdedDvir היה נחמד לחזור לאקסס אחרי תקופה שלא נגעתי...😕 🙄

                      תודה רבה לשאר החברים היקרים על ההתגייסות הנרחבת

                      אני רוצה לנסות לשפר קצת ולשפשף אז אל תבטלו את המעקב בבקשה... 😊

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

                      @בערל
                      א. השאילתא שכתבת מצויינת, פשוט חייכתי מאוזן לאוזן!
                      ב. כדי להדפיס את העמודה הנוכחית, אתה יכול ליצור שאילתא באקסס שמסננת את הטבלה לפי הערך של השדה ID הנוכחי בטופס, כמו שציין @avi-rz, ולבחור אותה כמקור הנתונים בוורד. משהו כזה:

                      SELECT *
                      FROM Table1
                      WHERE Table1.ID = Forms!YourFormName!ID
                      

                      זה היופי באקסס, שאפשר לשלב נתונים מהטופס ישירות בשאילתא.
                      ג. אהבתי את הפטנט ברג'יסטרי, לא חשבתי על זה 👏

                      היה נחמד לחזור לאקסס אחרי תקופה שלא נגעתי...

                      נחמד לראות שאתה משתמש בה לתועלת, וזו זריקת עידוד בשבילי להמשיך עם ההדרכה 🤞

                      בערלב תגובה 1 תגובה אחרונה
                      4
                      • OdedDvirO OdedDvir

                        @בערל
                        א. השאילתא שכתבת מצויינת, פשוט חייכתי מאוזן לאוזן!
                        ב. כדי להדפיס את העמודה הנוכחית, אתה יכול ליצור שאילתא באקסס שמסננת את הטבלה לפי הערך של השדה ID הנוכחי בטופס, כמו שציין @avi-rz, ולבחור אותה כמקור הנתונים בוורד. משהו כזה:

                        SELECT *
                        FROM Table1
                        WHERE Table1.ID = Forms!YourFormName!ID
                        

                        זה היופי באקסס, שאפשר לשלב נתונים מהטופס ישירות בשאילתא.
                        ג. אהבתי את הפטנט ברג'יסטרי, לא חשבתי על זה 👏

                        היה נחמד לחזור לאקסס אחרי תקופה שלא נגעתי...

                        נחמד לראות שאתה משתמש בה לתועלת, וזו זריקת עידוד בשבילי להמשיך עם ההדרכה 🤞

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

                        @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                        א. השאילתא שכתבת מצויינת, פשוט חייכתי מאוזן לאוזן!

                        😊

                        ב. כדי להדפיס את העמודה הנוכחית, אתה יכול ליצור שאילתא באקסס שמסננת את הטבלה לפי הערך של השדה ID הנוכחי בטופס, כמו שציין @avi-rz, ולבחור אותה כמקור הנתונים בוורד. משהו כזה:

                        SELECT *
                        FROM Table1
                        WHERE Table1.ID = Forms!YourFormName!ID
                        

                        זה היופי באקסס, שאפשר לשלב נתונים מהטופס ישירות בשאילתא.

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

                        אז יצרתי טבלה חדשה בשם MailMerge שתכיל תמיד את הנתון האחרון
                        והתיישבתי לחשוב איך להכין שאילתת עדכון מתאימה אבל הסתבכתי.
                        ולמרבה שמחתי גיליתי סוג שאילתא חדשה שלא הכרתי "Make Table", נראה שנוצרה בדיוק בשביל זה.

                        אבל לא הצלחתי לגרום לקוד VBA להריץ אותו, אני מקבל את השגיאה הבאה:
                        467f3c32-63bf-4991-9bf2-615c0e2ec2af-image.png

                        Debug מצביע על שורה 9

                        בתחתית הטופס יש לחצן שמכיל את הקוד הבא:

                        DoCmd.RunCommand (acCmdSaveRecord)
                        
                        On Error Resume Next
                        DoCmd.DeleteObject acTable, "MailMerge"
                        On Error GoTo 0
                        
                        CurrentDb.Execute "qryUpdate_Data", dbFailOnError
                        
                        CurrentDb.Execute "qryMake_MailMerge"
                        
                        DoCmd.GoToRecord , , acNext
                        
                        RunMailMerge "C:\Users\.....TEMPLATE.docx", "C:\Users......pdf", True
                        

                        יש לציין שהשאילתא עובדת מצוין בהרצה ידנית, רק לא דרך הקוד.
                        תחביר השאילתא:

                        
                        SELECT qrySelect_currentID.Data.ID, qrySelect_currentID.Data.FirstName, qrySelect_currentID.Data.LastName, INTO MailMerge
                        FROM qrySelect_currentID;
                        
                        

                        מה יכול להיות?

                        qrySelect_currentID = שאילתת קיבוץ שמביאה את נתוני הטופס שפתוח
                        Data = טבלת הנתונים המרכזית

                        ג. אהבתי את הפטנט ברג'יסטרי, לא חשבתי על זה 👏

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

                        היה נחמד לחזור לאקסס אחרי תקופה שלא נגעתי...

                        נחמד לראות שאתה משתמש בה לתועלת, וזו זריקת עידוד בשבילי להמשיך עם ההדרכה 🤞

                        בעז"ה אשתדל יותר לשתף פעולה...

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

                          @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                          א. השאילתא שכתבת מצויינת, פשוט חייכתי מאוזן לאוזן!

                          😊

                          ב. כדי להדפיס את העמודה הנוכחית, אתה יכול ליצור שאילתא באקסס שמסננת את הטבלה לפי הערך של השדה ID הנוכחי בטופס, כמו שציין @avi-rz, ולבחור אותה כמקור הנתונים בוורד. משהו כזה:

                          SELECT *
                          FROM Table1
                          WHERE Table1.ID = Forms!YourFormName!ID
                          

                          זה היופי באקסס, שאפשר לשלב נתונים מהטופס ישירות בשאילתא.

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

                          אז יצרתי טבלה חדשה בשם MailMerge שתכיל תמיד את הנתון האחרון
                          והתיישבתי לחשוב איך להכין שאילתת עדכון מתאימה אבל הסתבכתי.
                          ולמרבה שמחתי גיליתי סוג שאילתא חדשה שלא הכרתי "Make Table", נראה שנוצרה בדיוק בשביל זה.

                          אבל לא הצלחתי לגרום לקוד VBA להריץ אותו, אני מקבל את השגיאה הבאה:
                          467f3c32-63bf-4991-9bf2-615c0e2ec2af-image.png

                          Debug מצביע על שורה 9

                          בתחתית הטופס יש לחצן שמכיל את הקוד הבא:

                          DoCmd.RunCommand (acCmdSaveRecord)
                          
                          On Error Resume Next
                          DoCmd.DeleteObject acTable, "MailMerge"
                          On Error GoTo 0
                          
                          CurrentDb.Execute "qryUpdate_Data", dbFailOnError
                          
                          CurrentDb.Execute "qryMake_MailMerge"
                          
                          DoCmd.GoToRecord , , acNext
                          
                          RunMailMerge "C:\Users\.....TEMPLATE.docx", "C:\Users......pdf", True
                          

                          יש לציין שהשאילתא עובדת מצוין בהרצה ידנית, רק לא דרך הקוד.
                          תחביר השאילתא:

                          
                          SELECT qrySelect_currentID.Data.ID, qrySelect_currentID.Data.FirstName, qrySelect_currentID.Data.LastName, INTO MailMerge
                          FROM qrySelect_currentID;
                          
                          

                          מה יכול להיות?

                          qrySelect_currentID = שאילתת קיבוץ שמביאה את נתוני הטופס שפתוח
                          Data = טבלת הנתונים המרכזית

                          ג. אהבתי את הפטנט ברג'יסטרי, לא חשבתי על זה 👏

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

                          היה נחמד לחזור לאקסס אחרי תקופה שלא נגעתי...

                          נחמד לראות שאתה משתמש בה לתועלת, וזו זריקת עידוד בשבילי להמשיך עם ההדרכה 🤞

                          בעז"ה אשתדל יותר לשתף פעולה...

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

                          @בערל אני לא מבין את התחביר של השאילתא:

                          SELECT qrySelect_currentID.Data.ID, qrySelect_currentID.Data.FirstName, qrySelect_currentID.Data.LastName, INTO MailMerge
                          FROM qrySelect_currentID;
                          
                          1. איך יתכן שתי נקודות בשם שדה qrySelect_currentID.Data.ID, האם אתה משתמש בשדה עם ערכים מרובים?
                          2. אחרי LastName יש פסיק מיותר
                          בערלב תגובה 1 תגובה אחרונה
                          1
                          • OdedDvirO OdedDvir

                            @בערל אני לא מבין את התחביר של השאילתא:

                            SELECT qrySelect_currentID.Data.ID, qrySelect_currentID.Data.FirstName, qrySelect_currentID.Data.LastName, INTO MailMerge
                            FROM qrySelect_currentID;
                            
                            1. איך יתכן שתי נקודות בשם שדה qrySelect_currentID.Data.ID, האם אתה משתמש בשדה עם ערכים מרובים?
                            2. אחרי LastName יש פסיק מיותר
                            בערלב מנותק
                            בערלב מנותק
                            בערל
                            ניהול
                            כתב ב נערך לאחרונה על ידי בערל
                            #31

                            @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                            @בערל אני לא מבין את התחביר של השאילתא:

                            SELECT qrySelect_currentID.Data.ID, qrySelect_currentID.Data.FirstName, qrySelect_currentID.Data.LastName, INTO MailMerge
                            FROM qrySelect_currentID;
                            
                            1. איך יתכן שתי נקודות בשם שדה qrySelect_currentID.Data.ID, האם אתה משתמש בשדה עם ערכים מרובים?
                            2. אחרי LastName יש פסיק מיותר

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

                            בכל אופן יצרתי אותו מחדש ועדיין אותו בעיה, ידנית זה עובד ומהקוד אני מקבל שגיאה כנ"ל.

                            SELECT qrySelect_currentID.ID, qrySelect_currentID.FirstName, qrySelect_currentID.LastName
                            INTO MailMerge
                            FROM qrySelect_currentID
                            
                            

                            ניסיתי גם לקחת ישירות מטבלת הנתונים:

                            SELECT Data.ID, Data.FirstName, Data.LastName
                            INTO MailMerge
                            FROM Data
                            WHERE (((Data.ID)=[Forms]![frmData]![ID]));
                            
                            OdedDvirO תגובה 1 תגובה אחרונה
                            0
                            • בערלב בערל

                              @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                              @בערל אני לא מבין את התחביר של השאילתא:

                              SELECT qrySelect_currentID.Data.ID, qrySelect_currentID.Data.FirstName, qrySelect_currentID.Data.LastName, INTO MailMerge
                              FROM qrySelect_currentID;
                              
                              1. איך יתכן שתי נקודות בשם שדה qrySelect_currentID.Data.ID, האם אתה משתמש בשדה עם ערכים מרובים?
                              2. אחרי LastName יש פסיק מיותר

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

                              בכל אופן יצרתי אותו מחדש ועדיין אותו בעיה, ידנית זה עובד ומהקוד אני מקבל שגיאה כנ"ל.

                              SELECT qrySelect_currentID.ID, qrySelect_currentID.FirstName, qrySelect_currentID.LastName
                              INTO MailMerge
                              FROM qrySelect_currentID
                              
                              

                              ניסיתי גם לקחת ישירות מטבלת הנתונים:

                              SELECT Data.ID, Data.FirstName, Data.LastName
                              INTO MailMerge
                              FROM Data
                              WHERE (((Data.ID)=[Forms]![frmData]![ID]));
                              
                              OdedDvirO מנותק
                              OdedDvirO מנותק
                              OdedDvir
                              כתב ב נערך לאחרונה על ידי
                              #32

                              @בערל מה התחביר של qryUpdate_Data?
                              (אגב: סליחה על הדיליי בתגובה, אני תוך כדי שיחה עם מישהו...)

                              בערלב תגובה 1 תגובה אחרונה
                              2
                              • OdedDvirO OdedDvir

                                @בערל מה התחביר של qryUpdate_Data?
                                (אגב: סליחה על הדיליי בתגובה, אני תוך כדי שיחה עם מישהו...)

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

                                @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                                מה התחביר של qryUpdate_Data?

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

                                UPDATE Data SET Data.DobT = Format([dob],"dd/mm/yy"), 
                                Data.Age = IIf([age] Is Null,DateDiff("yyyy",[Dob],Now())+Int(Format(Now(),"mmdd")<Format([Dob],"mmdd")),[age]);
                                

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

                                
                                Private Sub cmdPrint_Click()
                                
                                CurrentDb.Execute "qryMake_MailMerge"
                                
                                End Sub
                                

                                @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                                אגב: סליחה על הדיליי בתגובה

                                😱 🤔

                                סליחה???
                                אני זה שצריך לבקש...

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

                                  @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                                  מה התחביר של qryUpdate_Data?

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

                                  UPDATE Data SET Data.DobT = Format([dob],"dd/mm/yy"), 
                                  Data.Age = IIf([age] Is Null,DateDiff("yyyy",[Dob],Now())+Int(Format(Now(),"mmdd")<Format([Dob],"mmdd")),[age]);
                                  

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

                                  
                                  Private Sub cmdPrint_Click()
                                  
                                  CurrentDb.Execute "qryMake_MailMerge"
                                  
                                  End Sub
                                  

                                  @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                                  אגב: סליחה על הדיליי בתגובה

                                  😱 🤔

                                  סליחה???
                                  אני זה שצריך לבקש...

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

                                  @בערל אוקי. הניחוש שלי הוא שהטבלה MailMerge לא מספיקה להימחק לפני שאתה מנסה לבנות אותה מחדש. זה בגלל שיש השהייה בקריאה ל: "DoCmd.DeleteObject acTable, "MailMerge. ככה זה באקסס.

                                  תוסיף את שתי הפונקציות השימושיות הבאות למודל חדש:

                                  Public Function TableExist(TableName As String) As Boolean
                                      TableExist = Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'"))
                                  End Function
                                  
                                  Public Sub TableDelete(TableName As String)
                                      If TableExist(TableName) Then CurrentDb.TableDefs.Delete (TableName)
                                  End Sub
                                  

                                  ובקוד של הלחצן תמחק את הטבלה כך:

                                  TableDelete "MailMerge"
                                  CurrentDb.Execute "qryMake_MailMerge"
                                  
                                  בערלב תגובה 1 תגובה אחרונה
                                  2
                                  • OdedDvirO OdedDvir

                                    @בערל אוקי. הניחוש שלי הוא שהטבלה MailMerge לא מספיקה להימחק לפני שאתה מנסה לבנות אותה מחדש. זה בגלל שיש השהייה בקריאה ל: "DoCmd.DeleteObject acTable, "MailMerge. ככה זה באקסס.

                                    תוסיף את שתי הפונקציות השימושיות הבאות למודל חדש:

                                    Public Function TableExist(TableName As String) As Boolean
                                        TableExist = Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'"))
                                    End Function
                                    
                                    Public Sub TableDelete(TableName As String)
                                        If TableExist(TableName) Then CurrentDb.TableDefs.Delete (TableName)
                                    End Sub
                                    

                                    ובקוד של הלחצן תמחק את הטבלה כך:

                                    TableDelete "MailMerge"
                                    CurrentDb.Execute "qryMake_MailMerge"
                                    
                                    בערלב מנותק
                                    בערלב מנותק
                                    בערל
                                    ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #35

                                    @odeddvir

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

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

                                      @odeddvir

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

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

                                      @בערל אני חושב שהבנתי הפעם.
                                      השגיאה הנ"ל פירושה ששדה מסויים בשאילתא לא נמצא.
                                      כאשר אתה רוצה לקחת שדה מתוך טופס, הכל טוב ויפה כל עוד הדברים נשארים בתוך השאילתא.
                                      אבל אם רוצים להריץ על ידי Execute שאילתא שמשתמשת בנתון מתוך טופס, זה גורם בעייה תחבירית, כי שם השדה [Forms]![frmData]![ID] לא תקין.

                                      מה שאתה צריך לעשות הוא לחשב את הערך ואחר כך להכניס אותו לתחביר ה-SQL. כך:

                                      TabeDelete "MailMerge"
                                      Dim SQL as String
                                      SQL = "SELECT Data.ID, Data.FirstName, Data.LastName " _
                                          & "INTO MailMerge " _
                                          & "FROM Data " _
                                          & "WHERE (Data.ID = " & Me.ID & ");"
                                      CurrentDb.Execute SQL
                                      

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

                                      בערלב 2 תגובות תגובה אחרונה
                                      2
                                      • OdedDvirO OdedDvir

                                        @בערל אני חושב שהבנתי הפעם.
                                        השגיאה הנ"ל פירושה ששדה מסויים בשאילתא לא נמצא.
                                        כאשר אתה רוצה לקחת שדה מתוך טופס, הכל טוב ויפה כל עוד הדברים נשארים בתוך השאילתא.
                                        אבל אם רוצים להריץ על ידי Execute שאילתא שמשתמשת בנתון מתוך טופס, זה גורם בעייה תחבירית, כי שם השדה [Forms]![frmData]![ID] לא תקין.

                                        מה שאתה צריך לעשות הוא לחשב את הערך ואחר כך להכניס אותו לתחביר ה-SQL. כך:

                                        TabeDelete "MailMerge"
                                        Dim SQL as String
                                        SQL = "SELECT Data.ID, Data.FirstName, Data.LastName " _
                                            & "INTO MailMerge " _
                                            & "FROM Data " _
                                            & "WHERE (Data.ID = " & Me.ID & ");"
                                        CurrentDb.Execute SQL
                                        

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

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

                                        @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

                                        @בערל אני חושב שהבנתי הפעם.
                                        השגיאה הנ"ל פירושה ששדה מסויים בשאילתא לא נמצא.
                                        כאשר אתה רוצה לקחת שדה מתוך טופס, הכל טוב ויפה כל עוד הדברים נשארים בתוך השאילתא.
                                        אבל אם רוצים להריץ על ידי Execute שאילתא שמשתמשת בנתון מתוך טופס, זה גורם בעייה תחבירית, כי שם השדה [Forms]![frmData]![ID] לא תקין.

                                        מה שאתה צריך לעשות הוא לחשב את הערך ואחר כך להכניס אותו לתחביר ה-SQL. כך:

                                        TabeDelete "MailMerge"
                                        Dim SQL as String
                                        SQL = "SELECT Data.ID, Data.FirstName, Data.LastName " _
                                            & "INTO MailMerge " _
                                            & "FROM Data " _
                                            & "WHERE (Data.ID = " & Me.ID & ");"
                                        CurrentDb.Execute SQL
                                        

                                        👍 👍 👏 👏

                                        ת
                                        עובד מעולה!!!
                                        תודה ענקית על הכל!

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

                                          @בערל אני חושב שהבנתי הפעם.
                                          השגיאה הנ"ל פירושה ששדה מסויים בשאילתא לא נמצא.
                                          כאשר אתה רוצה לקחת שדה מתוך טופס, הכל טוב ויפה כל עוד הדברים נשארים בתוך השאילתא.
                                          אבל אם רוצים להריץ על ידי Execute שאילתא שמשתמשת בנתון מתוך טופס, זה גורם בעייה תחבירית, כי שם השדה [Forms]![frmData]![ID] לא תקין.

                                          מה שאתה צריך לעשות הוא לחשב את הערך ואחר כך להכניס אותו לתחביר ה-SQL. כך:

                                          TabeDelete "MailMerge"
                                          Dim SQL as String
                                          SQL = "SELECT Data.ID, Data.FirstName, Data.LastName " _
                                              & "INTO MailMerge " _
                                              & "FROM Data " _
                                              & "WHERE (Data.ID = " & Me.ID & ");"
                                          CurrentDb.Execute SQL
                                          

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

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

                                          @odeddvir אמר בהדפסת ד''וח מאקסס על בסיס קובץ וורד:

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

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

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


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

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

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