פורום שאלות ותשובות

ברוכים הבאים לפורום שאלות ותשובות באופיס

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

א' שואלת:

האם יש פקודה שתבצע את הפעולות הבאות -

תעבור על רשימת ערכים בקובץ אקסל אחד ועבור כל ערך תייצר גיליון חדש בקובץ אקסל שני ע"ב גיליון תבנית ובנוסף תעדכן את הערך בראש הגיליון החדש?

תשובה:
 
אין פקודה אחת לביצוע הפעולות אבל ניתן ליישם זאת על ידי שיגרה (Sub procedure) ב-VBA.
 
מצ"ב דוגמה:
 
ניצור 2 קבצי אקסל - קובץ מקור עם רשימת ערכים וקובץ פלט עם גיליון תבנית.
 
 
 
 
 
 
 
 
לקובץ האקסל הראשון נקרא בשם source ונשמור אותו בפורמט xlsm המאפשר הגדרת והפעלת קוד VBA.
 
בעמודה A נגדיר את רשימת הערכים.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
לקובץ האקסל השני נקרא בשם target ונשמור אותו בפורמט xlsx.
 
נגדיר בקובץ גיליון בשם Template שבו בתא A1 יופיע הערך Item ותא B1 (שבו נעדכן את ערך ה-Item הרלוונטי) יהיה צבוע וישאר ריק.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
בקובץ source.xlsm נפתח את עורך VBA על ידי לחיצה על Alt+F11 ונגדיר מודול חדש עם השיגרה Generate_Sheet.
השגרה מגדירה שתי חוברות עבודה.
חוברת אחת היא קובץ האקסל הפעיל source.xlsm.
חוברת השנייה היא קובץ היעד target.xlsm שנפתח ע"י השיגרה (ההנחה היא שהקובץ סגור בהפעלת השיגרה).
לאחר מכן השיגרה עוברת על הערכים בעמודה A בקובץ source.xlsm החל מהערך האחרון עד לראשון (בשורה 2).
עבור כל ערך מבוצע שכפול של גיליון Template בקובץ target.xlsm ולאחר מכן שם הגיליון מעודכן לשם הערך הנוכחי והערך הנוכחי מעודכן בתא B1.
בסיום מבוצעת שמירה וסגירה של הקובץ target.xlsx ומוצגת הודעה שהפעולה הושלמה.
 
 
 
 
 
Public Sub Generate_Sheets()

Dim targetWB As Workbook, sourceWB As Workbook
Dim lngCurRow As Long, strCurItemCode As String

Set sourceWB = ActiveWorkbook
Set targetWB = Workbooks.Open("C:\target.xlsx")

With sourceWB
    With .ActiveSheet
        For lngCurRow = .UsedRange.Rows.Count To 2 Step -1
            strCurItemCode = .Cells(lngCurRow, 1)
            
            With targetWB
                .Activate
                Sheets("Template").Copy after:=Sheets("Template")
                With .ActiveSheet
                  .Name = strCurItemCode
                  .Cells(1, 2) = strCurItemCode
                End With
            End With
            
            sourceWB.Activate
            
        Next lngCurRow
    End With
End With

targetWB.Close True

MsgBox "Sheets creation completed successfully", vbInformation + vbOKOnly, ""

End Sub
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 

 

 
 
 
 
 
 
 
 
מצ"ב התוצאה בקובץ הפלט לאחר הפעלת השגרה. לכל Item ברשימה בקובץ source נוצר גיליון חדש (שכפול של גיליון Template) וערך ה-item עודכן בתא B1.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
בלחיצה על לחצן ימני כאשר העכבר מצביע על החיצים משמאל לשמות הגליונות תיפתח רשימת הגיליונות וניתן יהיה לעבור אליהם על ידי בחירת הגיליון ולחיצה על OK.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
בברכה,
צוות אניפיט