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

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

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

מחפש קוד של c# להפעלת מאקרו vba

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

    אני מחפש קוד ב C# של הפעלת מאקרו ללא הפעלה של האקסל
    בחיפוש בגוגל מצאתי את זה וזה אבל משום מה לא הצלחתי להסתדר איתם..
    אשמח לעזרה
    תודה מראש..

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

    @אוריי אמר במחפש קוד של c# להפעלת מאקרו vba:

    משום מה לא הצלחתי להסתדר איתם

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

    תפרק את הבעיה לרכיבים.

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

    שלב ב, זה להריץ את המאקרו.
    איך נסית? איזה שגיאה קיבלת?

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    אורייא תגובה 1 תגובה אחרונה
    5
    • yossizY yossiz

      @אוריי אמר במחפש קוד של c# להפעלת מאקרו vba:

      משום מה לא הצלחתי להסתדר איתם

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

      תפרק את הבעיה לרכיבים.

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

      שלב ב, זה להריץ את המאקרו.
      איך נסית? איזה שגיאה קיבלת?

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

      @yossiz
      ניסיתי בקוד vba בתוך קובץ vbs וזה עובד הבעיה היא שהוא לא סוגר את האקסל ברקע לאחר הפעולה (כך שלאחר כמה פתיחות השרת לא זז)
      א. אני צריך שהבקשה תגיע מקובץ קוד כי זה אמור להגיע לאחר פעולה
      ב. אני לא יכול לבקש מתוך אקסס כי א"כ אני מוכרך לפתוח את האקסס בשביל זה והרי אני רוצה שזה יעבוד באופן אוטומטי לחלוטין...
      ג. חוץ מזה יש לי קוד c# שעושה לי את הפעולה הקודמת של הורדת קבצים משרת ftp וב"ה עובד מעולה ... כ"כ חיפשתי ג"כ קוד המשך לפעולה הבאה במקום לסרבל את המערכת...

      לגבי הניסיונות שלי
      אני הכנסתי את הקוד הבא והוא לא מוצא את המחלקה של Excel

         public void WebTest_CodedStep()
          {
              // Object for missing (or optional) arguments.
              object oMissing = System.Reflection.Missing.Value;
      
              // Create an instance of Microsoft Excel
              Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
      
              // Make it visible
              oExcel.Visible = true;
      
              // Define Workbooks
              Excel.Workbooks oBooks = oExcel.Workbooks;
              Excel._Workbook oBook = null;
      
              // Get the file path
              string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
              path = path + "\\Worksheet02.csv";
      
              //Open the file, using the 'path' variable
              oBook = oBooks.Open(path, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,  oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
      
              // Run the macro, "First_Macro"
              RunMacro(oExcel, new Object[]{"Worksheet01.xlsm!First_Macro"});
      
              // Quit Excel and clean up.
              oBook.Close(false, oMissing, oMissing);
              System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook);
              oBook = null;
              System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks);
              oBooks = null;
              oExcel.Quit();
              System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel);
              oExcel = null;
      
              //Garbage collection
              GC.Collect();
          }
      
          private void RunMacro(object oApp, object[] oRunArgs)
          {
              oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs);
          }
      

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

      ניתן לפנות אלי גם ב al0548446188@gmail.com
      ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

        @yossiz
        ניסיתי בקוד vba בתוך קובץ vbs וזה עובד הבעיה היא שהוא לא סוגר את האקסל ברקע לאחר הפעולה (כך שלאחר כמה פתיחות השרת לא זז)
        א. אני צריך שהבקשה תגיע מקובץ קוד כי זה אמור להגיע לאחר פעולה
        ב. אני לא יכול לבקש מתוך אקסס כי א"כ אני מוכרך לפתוח את האקסס בשביל זה והרי אני רוצה שזה יעבוד באופן אוטומטי לחלוטין...
        ג. חוץ מזה יש לי קוד c# שעושה לי את הפעולה הקודמת של הורדת קבצים משרת ftp וב"ה עובד מעולה ... כ"כ חיפשתי ג"כ קוד המשך לפעולה הבאה במקום לסרבל את המערכת...

        לגבי הניסיונות שלי
        אני הכנסתי את הקוד הבא והוא לא מוצא את המחלקה של Excel

           public void WebTest_CodedStep()
            {
                // Object for missing (or optional) arguments.
                object oMissing = System.Reflection.Missing.Value;
        
                // Create an instance of Microsoft Excel
                Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
        
                // Make it visible
                oExcel.Visible = true;
        
                // Define Workbooks
                Excel.Workbooks oBooks = oExcel.Workbooks;
                Excel._Workbook oBook = null;
        
                // Get the file path
                string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                path = path + "\\Worksheet02.csv";
        
                //Open the file, using the 'path' variable
                oBook = oBooks.Open(path, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,  oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
        
                // Run the macro, "First_Macro"
                RunMacro(oExcel, new Object[]{"Worksheet01.xlsm!First_Macro"});
        
                // Quit Excel and clean up.
                oBook.Close(false, oMissing, oMissing);
                System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook);
                oBook = null;
                System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks);
                oBooks = null;
                oExcel.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel);
                oExcel = null;
        
                //Garbage collection
                GC.Collect();
            }
        
            private void RunMacro(object oApp, object[] oRunArgs)
            {
                oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs);
            }
        

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

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

        @אוריי אמר במחפש קוד של c# להפעלת מאקרו vba:

        הבעיה היא שהוא לא סוגר את האקסל ברקע לאחר הפעולה

        Application.Quit

        והוא לא מוצא את המחלקה של Excel

        צריך להוסיף למעלה

        using Microsoft.Office.Interop.Excel;
        

        ולהוסיף Reference בפרוייקט ל-DLL של זה.

        זה בגדול, יותר בפרטות אני לא יודע.

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        אורייא תגובה 1 תגובה אחרונה
        6
        • yossizY yossiz

          @אוריי אמר במחפש קוד של c# להפעלת מאקרו vba:

          הבעיה היא שהוא לא סוגר את האקסל ברקע לאחר הפעולה

          Application.Quit

          והוא לא מוצא את המחלקה של Excel

          צריך להוסיף למעלה

          using Microsoft.Office.Interop.Excel;
          

          ולהוסיף Reference בפרוייקט ל-DLL של זה.

          זה בגדול, יותר בפרטות אני לא יודע.

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

          @yossiz 👍
          הרבה תודה ב"ה התקדמתי נחמד ב #C

          @yossiz אמר במחפש קוד של c# להפעלת מאקרו vba:

          להוסיף Reference בפרוייקט ל-DLL של זה.

          אשמח לקבל איזה הסבר קצר איך אני מוסיף את זה

          ניתן לפנות אלי גם ב al0548446188@gmail.com
          ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

            @yossiz 👍
            הרבה תודה ב"ה התקדמתי נחמד ב #C

            @yossiz אמר במחפש קוד של c# להפעלת מאקרו vba:

            להוסיף Reference בפרוייקט ל-DLL של זה.

            אשמח לקבל איזה הסבר קצר איך אני מוסיף את זה

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

            @אוריי
            https://stackoverflow.com/questions/15285880/how-to-reference-microsoft-office-interop-excel-dll

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

              יש ספרייה לעבוד מול excel בשם epplus, היא לא תומכת ב vba. אבל אפשר בקלות להפוך את הקוד של ה vba ל c#

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

                יש ספרייה לעבוד מול excel בשם epplus, היא לא תומכת ב vba. אבל אפשר בקלות להפוך את הקוד של ה vba ל c#

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

                @aharon-0
                אם היה מדובר ב קוד vba קטן הייתי חושב על המהלך הזה
                הנקודה היא שמדובר בקוד באורך של מאות שורות (למעלה מ 1900 )עם כמויות פונקציות וכו'
                שזמן ריצה של כל הקוד בממוצע כ 50 שניות במחשב I5 8GR

                ניתן לפנות אלי גם ב al0548446188@gmail.com
                ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

                  @aharon-0
                  אם היה מדובר ב קוד vba קטן הייתי חושב על המהלך הזה
                  הנקודה היא שמדובר בקוד באורך של מאות שורות (למעלה מ 1900 )עם כמויות פונקציות וכו'
                  שזמן ריצה של כל הקוד בממוצע כ 50 שניות במחשב I5 8GR

                  Aharon 0A מנותק
                  Aharon 0A מנותק
                  Aharon 0
                  כתב ב נערך לאחרונה על ידי
                  #9

                  @אוריי עבודה מול excel בסגנון הישן כ dll. מתכון לצרות.
                  א. אסור לעבוד עם אקסל בזמן שהקוד רץ. כי זה מפריע לקוד לרוץ.
                  ב. לצורך סגירת האקסל צריך לקרוא 3 פעמים ל GC לרוקן אובייקטים של אקסל. (כמובן לאחר ששיחררו אותם)
                  ג. צריך להזהר לא לקמפל ב netcore

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

                    @אוריי עבודה מול excel בסגנון הישן כ dll. מתכון לצרות.
                    א. אסור לעבוד עם אקסל בזמן שהקוד רץ. כי זה מפריע לקוד לרוץ.
                    ב. לצורך סגירת האקסל צריך לקרוא 3 פעמים ל GC לרוקן אובייקטים של אקסל. (כמובן לאחר ששיחררו אותם)
                    ג. צריך להזהר לא לקמפל ב netcore

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

                    @aharon-0
                    אני לא מפעיל ישירות מה #C את ה vba
                    אלא מפעיל vbs שמפעיל את ה vba
                    זה האופציה היחידה כרגע והכי אופציונלית..
                    עיין כאן

                    ניתן לפנות אלי גם ב al0548446188@gmail.com
                    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

                      @aharon-0
                      אני לא מפעיל ישירות מה #C את ה vba
                      אלא מפעיל vbs שמפעיל את ה vba
                      זה האופציה היחידה כרגע והכי אופציונלית..
                      עיין כאן

                      Aharon 0A מנותק
                      Aharon 0A מנותק
                      Aharon 0
                      כתב ב נערך לאחרונה על ידי Aharon 0
                      #11

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

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

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

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

                        @aharon-0 אמר במחפש קוד של c# להפעלת מאקרו vba:

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

                        כתבתי את זה כאן

                        ניתן לפנות אלי גם ב al0548446188@gmail.com
                        ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

                          @aharon-0 אמר במחפש קוד של c# להפעלת מאקרו vba:

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

                          כתבתי את זה כאן

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

                          @אוריי
                          קצת התבלבלתי, אם הקוד שמוריד את הקבצים ב powershell. למה לא להמשיך להריץ את ה vbs ב powershell ? מה הצורך ב c#?

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

                            @אוריי
                            קצת התבלבלתי, אם הקוד שמוריד את הקבצים ב powershell. למה לא להמשיך להריץ את ה vbs ב powershell ? מה הצורך ב c#?

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

                            @aharon-0
                            אני יעשה לך קצת סדר
                            עם הפאוורשאל לא הסתדרתי
                            אז עברתי להשתמש ב #C
                            תכלס יש לי קוד #C שמוריד בהצלחה את כל הקבצים מה FTP
                            חוץ מזה בניתי קובץ VBS שמפעיל את המאקרו של האקסל
                            מה שכרגע חסר לי הוא להפעיל את ה VBS דרך ה#C
                            מקווה שהייתי ברור...

                            ניתן לפנות אלי גם ב al0548446188@gmail.com
                            ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

                              @aharon-0
                              אני יעשה לך קצת סדר
                              עם הפאוורשאל לא הסתדרתי
                              אז עברתי להשתמש ב #C
                              תכלס יש לי קוד #C שמוריד בהצלחה את כל הקבצים מה FTP
                              חוץ מזה בניתי קובץ VBS שמפעיל את המאקרו של האקסל
                              מה שכרגע חסר לי הוא להפעיל את ה VBS דרך ה#C
                              מקווה שהייתי ברור...

                              Aharon 0A מנותק
                              Aharon 0A מנותק
                              Aharon 0
                              כתב ב נערך לאחרונה על ידי
                              #15

                              @אוריי הבנתי. האקסל שמותקן על המחשב גרסת 32bit או 64bit ?

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

                                @אוריי הבנתי. האקסל שמותקן על המחשב גרסת 32bit או 64bit ?

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

                                @aharon-0
                                64

                                ניתן לפנות אלי גם ב al0548446188@gmail.com
                                ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

                                  @aharon-0
                                  64

                                  Aharon 0A מנותק
                                  Aharon 0A מנותק
                                  Aharon 0
                                  כתב ב נערך לאחרונה על ידי Aharon 0
                                  #17

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

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

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

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

                                    @aharon-0
                                    זה לא קשור אחד לשני
                                    יש לי קובץ xlsm שלוקח נתונים מ csv

                                    ניתן לפנות אלי גם ב al0548446188@gmail.com
                                    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

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

                                      @aharon-0
                                      זה לא קשור אחד לשני
                                      יש לי קובץ xlsm שלוקח נתונים מ csv

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

                                      @אוריי
                                      דוגמא שמצאתי באינטרנט(אני מסמארטפון וקשה להקליד):
                                      Process scriptProc = new Process();
                                      scriptProc.StartInfo.FileName = @"cscript";
                                      scriptProc.StartInfo.WorkingDirectory = @"c:\scripts"; //<---very important
                                      scriptProc.StartInfo.Arguments ="//B //Nologo vbscript.vbs";
                                      scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //prevent console window from popping up
                                      scriptProc.Start();
                                      scriptProc.WaitForExit(); // <-- Optional if you want program running until your script exit
                                      scriptProc.Close

                                      עדיין חסר בדיקת ExitCode שאתה יכול להחזיר מ VBS שאומר אם ההרצה נכשלה או הצליחה.
                                      ואפשר להוסיף קריאה של הדפסות ל console שתוכל לטפל באירועים.

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


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

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

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