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

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

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

מאקרו שכותב מאקרו אחר

מתוזמן נעוץ נעול הועבר תכנות
8 פוסטים 3 כותבים 300 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • חנון המרבהח מנותק
    חנון המרבהח מנותק
    חנון המרבה
    כתב ב נערך לאחרונה על ידי חנון המרבה
    #1

    אני רוצה ליצור מאקרו (XLSB) שעושה דברים מסויימים על הקובץ הפעיל, ואחד מהדברים הוא שיעשה קוד על הגליון

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    bla bla
    End Sub
    

    האם אפשרי כזה דבר?!

    Y.Excel.AccessY תגובה 1 תגובה אחרונה
    0
    • Y.Excel.AccessY מנותק
      Y.Excel.AccessY מנותק
      Y.Excel.Access
      השיב לחנון המרבה ב נערך לאחרונה על ידי
      #2

      @חנון-המרבה הכוונת למשהו כזה - יצירת מודול באמצעות מאקרו
      או להזרקת קוד?

      Y.Excel.Access @ gmail.com

      חנון המרבהח 3 תגובות תגובה אחרונה
      0
      • חנון המרבהח מנותק
        חנון המרבהח מנותק
        חנון המרבה
        השיב לY.Excel.Access ב נערך לאחרונה על ידי
        #3

        @Y-Excel-Access אני רוצה שקוד מאקרו ייצור קוד על הגליון
        0a3410ec-20ee-462d-9fcb-a0e4626d1edb-image.png
        (לא הצלחתי לגמרי להבין את הקישור שהבאת, בעיקר בגלל שכל התמונות אינן מפוענחות ע"י נטפרי. תודה רבה)

        OdedDvirO תגובה 1 תגובה אחרונה
        1
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          השיב לחנון המרבה ב נערך לאחרונה על ידי
          #4

          @חנון-המרבה רק שתדע, כיון שאופציה זו היא פירצה מאוד בעייתית מבחינת אבטחה, כברירת מחדל היא נעולה באקסל, והמשתמש צריך לאפשר גישה למודול VBA במרכז יחסי האמון:
          51551edc-bb99-4862-bffd-69fe53632c23-תמונה.png

          תגובה 1 תגובה אחרונה
          1
          • חנון המרבהח מנותק
            חנון המרבהח מנותק
            חנון המרבה
            השיב לY.Excel.Access ב נערך לאחרונה על ידי
            #5

            @Y-Excel-Access בבדיקה נוספת ראיתי שזה יוצר/מעתיק מודולים ולא קוד של גליון
            3c33ded9-b3a9-410e-88ad-6e328891ed2e-image.png

            תגובה 1 תגובה אחרונה
            0
            • חנון המרבהח מנותק
              חנון המרבהח מנותק
              חנון המרבה
              השיב לY.Excel.Access ב נערך לאחרונה על ידי
              #6

              @Y-Excel-Access מצאתי כזה קוד (אני שם את הקוד בקובץ XLSB בגליון1 ומשם אני מעתיק את זה)

              Public Sub CopyModule(SourceWB As Workbook, strModuleName As String, TargetWB As Workbook)
              
                  ' Description:  copies a module from one workbook to another
                  ' example: CopyModule Workbooks(ThisWorkbook), "Module2",
                  '          Workbooks("Food Specials Rolling Depot Memo 46 - 01.xlsm")
                  ' Notes:   If Module to be copied already exists, it is removed first,
                  '          and afterwards copied
              
                  Dim strFolder                       As String
                  Dim strTempFile                     As String
                  Dim FName                           As String
              
                  If Trim(strModuleName) = vbNullString Then
                      Exit Sub
                  End If
              
                  If TargetWB Is Nothing Then
                      MsgBox "Error: Target Workbook " & TargetWB.Name & " doesn't exist (or closed)", vbCritical
                      Exit Sub
                  End If
              
                  strFolder = SourceWB.Path
                  If Len(strFolder) = 0 Then strFolder = CurDir
              
                  ' create temp file and copy "Module2" into it
                  strFolder = strFolder & "\"
                  strTempFile = strFolder & "~tmpexport.bas"
              
                  On Error Resume Next
                  FName = Environ("Temp") & "\" & strModuleName & ".bas"
                  If Dir(FName, vbNormal + vbHidden + vbSystem) <> vbNullString Then
                      Err.Clear
                      Kill FName
                      If Err.Number <> 0 Then
                          MsgBox "Error copying module " & strModuleName & "  from Workbook " & SourceWB.Name & " to Workbook " & TargetWB.Name, vbInformation
                          Exit Sub
                      End If
                  End If
              
                  ' remove "Module2" if already exits in destination workbook
                  With TargetWB.VBProject.VBComponents
                      .Remove .Item(strModuleName)
                  End With
              
                  ' copy "Module2" from temp file to destination workbook
                  SourceWB.VBProject.VBComponents(strModuleName).Export strTempFile
                  TargetWB.VBProject.VBComponents.Import strTempFile
              
                  Kill strTempFile
                  On Error GoTo 0
              
              End Sub
              
              Public Sub Main()
              
              Dim WB1 As Workbook
              Dim WB2 As Workbook
              
              Set WB1 = ThisWorkbook
              Set WB2 = Workbooks("1324.xlsm")
              
              Call CopyModule(WB1, "גיליון1", WB2)
              
              End Sub
              

              (מקור)

              התוצאה היא שזה נכנס ל-Class Modules (הצהוב) ולא לגיליון1 (הירוק).
              77a4f619-38a5-4fb2-9f5a-8e52db82bb02-image.png
              יש לך פתרון

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לחנון המרבה ב נערך לאחרונה על ידי OdedDvir
                #7

                זה לא מפתיע שזו תהיה התוצאה. יש כאן רצף של בעיות:

                1. הקוד מנסה למחוק את הקלאס של גיליון1, אני בספק אם בכלל אפשר למחוק קלאס כזה.
                2. גם אם כן, בודאי שאי אפשר להריץ קוד כזה מתוך גיליון1. זו תהיה התאבדות...
                3. יתכן ושם הקוד של גיליון1 הוא בכלל Sheet1...
                4. כיון שפעולת המחיקה לא הצליחה, ממילא פעולת ההוספה יוצרת מודול חדש עם השם החדש גיליון11, כברירת מחדל במקרה שכבר קיים גיליון1.
                5. אגב, האם אתה באמת רוצה למחוק את כל הקוד שכבר קיים בגיליון1 ?

                נראה שהאופציה העדיפה כאן היא להוסיף שורות חדשות, על ידי המתודה AddFromString:

                Sub AddStringToSheetModule(sheetName As String, codeText As String)
                    With ActiveWorkbook.VBProject.VBComponents(Sheets(sheetName).CodeName).CodeModule
                        .AddFromString codeText
                    End With
                End Sub
                

                ואתה קורא לקוד כך:

                AddStringToSheetModule "גיליון1", "Dim foo As String" + vbNewLine + "Dim bar As String"
                

                הערות:

                • כדי לייבא קובץ טקסט שלם, תקרא אותו לתוך המחרוזת.
                • אין כאן שום בדיקות תקינות, האם הגליון קיים, והאם הקוד עדיין לא קיים במודול, וכו'
                חנון המרבהח תגובה 1 תגובה אחרונה
                5
                • חנון המרבהח מנותק
                  חנון המרבהח מנותק
                  חנון המרבה
                  השיב לOdedDvir ב נערך לאחרונה על ידי
                  #8

                  @OdedDvir אמר במאקרו שכותב מאקרו אחר:

                  Sub AddStringToSheetModule(sheetName As String, codeText As String)
                      With ActiveWorkbook.VBProject.VBComponents(Sheets(sheetName).CodeName).CodeModule
                          .AddFromString codeText
                      End With
                  End Sub
                  

                  ואתה קורא לקוד כך:

                  AddStringToSheetModule "גיליון1", "Dim foo As String" + vbNewLine + "Dim bar As String"
                  

                  אתה מלך!!! זה בדיוק בדיוק מה שאני צריך (כמו שכתבתי בכותרת מאקרו שכותב מאקרו אחר)

                  תגובה 1 תגובה אחרונה
                  1
                  • dovidD dovid העביר נושא זה מ-תכנות ב-

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

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

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