עזרה במאקרו

עזרה במאקרו

מדוע הקוד הזה אינו עובד על מס' גיליונות ?
על גיליון אחד, ללא הלולאה זה עובד.
Sub ccc()

For Each Sh In ActiveWorkbook.Windows(1).SelectedSheets
Selection.SpecialCells(xlCellTypeComments).Select
Selection.ClearComments
Next

End Sub

הערה : השורות בעת כתיבת ההודעה מסודרות 'בשלשות' , אבל בתצוגה מקדימה זה מתבלגן...
(7,2010)
 

ziv98

Member
מה בדיוק לא עובד ?

אתה פונה לגיליונות שנבחרו (SelectedSheets), ושם לאזור שנבחר (Selection):
ה - Selection השני מתייחס לתאים לא לגיליונות.
זו כוונתך ?
בכל מקרה הבעיה לא בלולאה, כיוון ש:
קוד:
Sub bbb()


For Each sh In ActiveWorkbook.Windows(1).SelectedSheets
    MsgBox sh.Name
Next
End Sub
עובד מצויין.


* קוד כותבים בתוך מסגרת code snippet - האייקון השמאלי בעורך ההודעה.
 
מצורף...

קוד aaa - עובד על כל גיליון בנפרד.
לקוד ccc - הוספתי לולואה , בחרתי 2 גיליונות ומתקבלת שגיאה.
  1. נדמה שאני מבין, חלקית.., את מה שהעורך אומר בהודעה...
  2. בכל מקרה, לא יודע כיצד לפתור.
תודה על העזרה ואשמח גם להסבר קצר
 

מיכאל אבידן

Member
מנהל
חשוב לי לדעת אם אתה יודע ומבין . . .


מדוע לא הגבתי ולא הייתי מגיב על השאלה שנשאלה ב- 03:06


וכעת, כשהתעלמתי מהראשונה, אתייחס לעכשווית:
קוד:
Sub ccc()
    For Each SH In ActiveWorkbook.Sheets
          SH.Cells.SpecialCells(xlCellTypeLastCell).ClearComments
    Next
End Sub
 
לגמרי...

באמת שחשבתי שאפשר לראות מיד את הטעות בקוד כזה קצר.
וגם הלאות בשעה הנקובה...
ועכשיו אנא ממך, הסבר לי...
אני רואה את השינויים בתחביר, גם ב For Each וגם בפקודת הקוד עצמו.
אבל לא מצליח להבין את המהות.
ובכל זאת :
  • הלולאה :
    פונה אל חוברת העבודה הפעילה בווינדוס, ושם פונה אל הגיליונות הנבחרים.
    בקוד שלך הושמט Windows , כנראה העורך מבין זאת לבד...
    (עדיין לא מבין מה תפקידו של 1 בתוך הסוגריים)
  • הקוד :
    הפקודה שלי פונה לאובייקט - 'בחירה' ..., למיוחד, להערות - ובוחרת.
    בשורה השניה פונה לבחירה (הפעם לנ"ל) - ומוחקת.
    לעומת זאת, הקוד שלך לבש פורמט אחר...
    אז מה ההבדל ?
תודה !
 

מיכאל אבידן

Member
מנהל
הקוד שלי "לובש פראבדה" . . .


&nbsp
אני לא מבזבז מידי הרבה אנרגיה על ש****ת.
&nbsp
אני כותב/משתמש בפקודות VBA שהן התחביר הנכון/המקובל (ממעט להשתמש ב- Select) - וגם משתדל, מאוד, "לא להמציא את הגלגל מחדש..."
&nbsp
 
רבה !

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

ziv98

Member
הקוד שלך

לא "הפקודה שלי פונה לאובייקט - 'בחירה' ..., למיוחד, להערות - ובוחרת.
בשורה השניה פונה לבחירה (הפעם לנ"ל) - ומוחקת."

הוא פונה לאזור התאים שנבחר מראש (selection).
 
לא הבנתי תגובתך... :)

השורה השניה בקוד שלי (Selection.ClearComments), פונה לאזור/תאים שנבחרו בשורה הראשונה.
עד כאן נדמה לי שגם אתה התכוונת לזה ("פונה לאזור התאים שנבחר מראש") .
השאלה שלי היא מדוע אחרי Next העורך נתקע ולא ממשיך לגיליון הבא ?
 

ziv98

Member
ומה בדיוק עושה השורה הקודמת ?

אחרי שתבדוק. לא מה אתה חושב שהיא עושה...
 
בדקתי...

השורה הראשונה פונה לטווח X (תאים עם הערות) ו- בוחרת אותו.
השורה השנייה פונה לאותו הטווח X ו- מוחקת אותו.
בדוק 100% .
ועכשיו... לאן זה מוביל אותנו ?
האמת, יש לי איזו תאוריה למה זה לא עובד בלופ, אבל אנ'לא בטוח...ולא בא לי שמיכאל 'יתהפך' עלי שוב...:)
אז ממתין לכריש שיכה בפטיש...
 

ziv98

Member
כדי לסגור את הפינה

קח חוברת ריקה עם יותר מגיליון אחד.
הצב את הסמן בכל גיליון במקום אחר.
הרץ את 2 המאקרואים הבאים:
קוד:
 Sub ccc()
   For Each sh In ActiveWorkbook.Sheets
          sh.Activate
          MsgBox Selection.Address
   Next
End Sub


 Sub ccc1()
   For Each sh In ActiveWorkbook.Sheets
       ' without activate
          MsgBox Selection.Address
   Next
End Sub
עכשיו ברור ?
 
אתה גדול !


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

מיכאל אבידן

Member
מנהל
"...מיקי לא אוהב"
. . .


תתלווה אליי למפגש MVPs בספטמבר, הקרוב, ותרגיש את נחת זרועם ו/או את סקילתם, אותך, באבנים למשמע המילה: Select.
 

iyyi

New member
דרך אגב, מה אומרים החברים על השימוש ב - Dim להצהרת המשתנים?

 

u333

New member
רק תשובה לשאלה המקורית - ללא הבעת דעה....

מעבר לכך שכדי למחוק הערות:
  1. אין צורך לבחור גיליון גיליון.
  2. אין צורך לבחור טווח טווח
  3. אין צורך להכנס לתאים בהם יש הערות
אבל אם אתה דווקא מתעקש לבצע את כל הפעולות המיותרות שלעיל - נסה בקוד המקורי שלך 'ccc' לשנות כך:
קוד:
Sub ccc()
   For Each sh In ActiveWorkbook.Sheets
          sh.Activate
          Selection.SpecialCells(xlCellTypeComments).Select
          Selection.ClearComments
   Next
End Sub

ובמקום כל הריצה המיותרת בין הגיליונות שלעיל - הקוד הבא יעשה הכל ללא תזזיות מיותרות:
קוד:
Sub ClearComm_U333()
    For Each sh In ActiveWorkbook.Sheets
          sh.UsedRange.ClearComments
    Next
End Sub
 
גדולה...

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