בחלון הדו שיח של הגנת הגיליון באקסל יש חמש עשרה תיבות סימון. שתיים מהן נקראות מיון וסינון אוטומטי.
על פניו זה פשוט. מסמנים את שתיהן, נועלים את הגיליון, ושולחים אותו לצוות. הנוסחאות מוגנות מעריכה, והמיון ממשיך לעבוד.
אבל בתיעוד של מיקרוסופט, בהערה שמופיעה מיד מתחת לאותה תיבה, כתוב משפט שסותר את זה. משתמשים אינם יכולים למיין טווחים שמכילים תאים נעולים בגיליון מוגן, ללא קשר להגדרה הזו.
כלומר סימון התיבה אינו מבטל את החסימה. הוא מרשה מיון רק בטווח שאין בו אף תא נעול. ובקובץ כספי אמיתי, שבו עמודות הנוסחה נעולות ועמודות הקלט פתוחות באותה שורה, כמעט כל טווח מיון מכיל תא נעול.
עכשיו לכו לקובץ המוגן שאתם מפיצים בכל סגירת חודש, ושאלו את מי שעובד בו מתי מיין בו בפעם האחרונה. התשובה שאני שומע בשטח אינה אתמול. היא רגע, אני מבטל את ההגנה קודם.
וזה בדיוק הכשל. הגנה שחוסמת פעולה לגיטימית אינה מגינה על הקובץ, היא מאמנת את הצוות לבטל אותה.
התסמין, כפי שהוא מנוסח בקהילות
השאלה הזו חוזרת שוב ושוב, וניסוח אחד שלה מסכם אותה היטב. משתמש שאל איך אחרים מצליחים למיין טבלה שיש בה עמודות נעולות בגיליון מוגן, אחרי שאצלו הפעולה פשוט אינה זמינה.
שאלה קרובה מתארת את המבנה המדויק של קובץ כספי. חלק מהעמודות נעולות כי אסור לגעת בהן, חלק פתוחות לעריכה, והתאים הנעולים והפתוחים יושבים באותה שורה. המשתמש רצה שהצוות ימיין לפי העמודות הפתוחות בלבד.
זה אינו מקרה קצה. זה המבנה הרגיל של כל דוח שמופץ ליותר מאדם אחד.
למה התיבה לא עושה את מה ששמה אומר
הגנת גיליון באקסל בנויה סביב הבחנה אחת בלבד, בין תא נעול לתא משוחרר. כל השאר נגזר ממנה.
התיעוד של פעולת ההגנה בשפת המאקרו מנסח את הכלל בצורה החדה ביותר. כל תא בטווח המיון חייב להיות משוחרר מנעילה או לא מוגן.
שימו לב לניסוח. יש שם שתי אפשרויות ולא אחת, והשנייה היא זו שפותרת את הבעיה. נחזור אליה בהמשך.
בסינון הכלל שונה, ורוב האנשים מפספסים את ההבדל. בגיליון מוגן אי אפשר להפעיל סינון אוטומטי ואי אפשר לבטל אותו, ללא קשר לסימון התיבה. אבל אם הסינון כבר הופעל לפני שנעלתם, המשתמשים יכולים לפתוח את החץ ולשנות את הקריטריון.
ההבדל הזה שווה כסף. מי שמפעיל סינון אוטומטי לפני ההגנה נותן לצוות סינון עובד. מי ששוכח, נותן להם גיליון שבו החץ פשוט לא קיים.
ארבע הדרכים, ומה כל אחת עולה
לשחרר את הנעילה מעמודות המיון
הדרך הישירה. אם כל תא בטווח המיון משוחרר, המיון עובד.
המחיר ברור. העמודות האלה כבר אינן מוגנות, וכל מי שיכול למיין יכול גם לדרוס את התוכן שלהן. לעמודת תיאור זה סביר לגמרי. לעמודת נוסחה זה מבטל את הסיבה שנעלתם מלכתחילה.
טווחי עריכה מורשים
כאן נכנסת האפשרות השנייה שהופיעה בניסוח של מיקרוסופט. בתיעוד כתוב במפורש שתא נחשב לא מוגן כאשר הוא נעול בתיבת עיצוב התאים, אך נכלל בטווח שהוגדר בחלון טווחי עריכה מורשים, והמשתמש שחרר את הטווח בסיסמה או אושר דרך הרשאות המשתמש שלו.
זו נקודה עדינה ושווה לעצור עליה. התא נשאר נעול, ובכל זאת עומד בתנאי של המיון.
החלון נמצא בלשונית סקירה, והוא זמין רק כשהגיליון אינו מוגן. כלומר מגדירים את הטווחים קודם, ורק אחר כך נועלים. מי שניסה למצוא אותו בגיליון נעול חשב שהוא לא קיים.
היתרון הוא שאפשר לתת את ההרשאה לאנשים מסוימים בלבד, בסיסמה לטווח או לפי שמות משתמשים. החיסרון הוא שזה מנגנון הרשאות, וצריך לנהל אותו. ומכיוון שזו נקודה עדינה, בדקו אותה בקובץ שלכם ובמחשב של מישהו אחר לפני שאתם מסתמכים עליה בדוח שנשלח החוצה.
מאקרו שמגן על המשתמש ולא על הקוד
רגע, מה זה בכלל מאקרו
מאקרו הוא רצף פעולות שנכתב פעם אחת, ואקסל מריץ אותו שוב בלחיצה אחת. הוא יושב בתוך הקובץ עצמו, ולכן קובץ עם מאקרו נשמר בסיומת אחרת ודורש אישור בפתיחה.
לפעולת ההגנה יש הגדרה שנקראת הגנה על ממשק המשתמש בלבד. כשהיא פעילה, ההגנה חלה על מי שעובד בגיליון אבל לא על הקוד. כלומר המאקרו יכול למיין גם טווח נעול, בלי לבטל את ההגנה ובלי לחשוף את הנוסחאות לאיש.
וכאן האזהרה שהופכת את זה לתקלה נפוצה. מיקרוסופט מתעדת שההגדרה הזו אינה נשמרת עם הקובץ. אם תפעילו אותה ותשמרו, בפתיחה הבאה הגיליון יהיה מוגן במלואו והמאקרו יפסיק לעבוד. צריך להפעיל אותה מחדש בכל פתיחה.
זו הסיבה שקבצים כאלה עובדים מצוין אצל מי שבנה אותם ונשברים אצל כל השאר. הבודק פתח, הריץ, וראה שזה עובד. הוא לא סגר ופתח מחדש.
לא למיין בכלל
הדרך הרביעית מוותרת על המיון עצמו.
הפונקציה SORT ממיינת את תוכן הטווח ומחזירה מערך שנפרש לתאים שסביבה, בלי לשנות את סדר הנתונים במקור. כלומר אפשר להשאיר את טבלת הנתונים נעולה לחלוטין, ולתת לצוות גיליון תצוגה שממוין כרצונם.
הפונקציה זמינה במנוי Microsoft 365 ובגרסאות 2021 ו-2024. בגרסאות ישנות יותר היא אינה קיימת.
זו הדרך היחידה מהארבע שבה איש אינו נוגע בנתונים המוגנים, וזו הסיבה שאני מעדיף אותה בכל דוח שיוצא מהמחלקה החוצה.
סדר ההחלטה
אל תבחרו דרך לפי מה שנוח לבנות. בחרו לפי מי אמור לגעת במה, כי זו השאלה שההגנה אמורה לענות עליה מלכתחילה.
אם הטווח שממיינים אינו מכיל נוסחאות, שחררו את הנעילה וסיימתם. אל תסבכו קובץ פשוט.
אם הוא מכיל נוסחאות ורק חלק מהאנשים אמורים לגעת בהן, טווחי עריכה מורשים.
אם בקובץ ממילא יש מאקרו ויש בארגון מי שמתחזק אותו, ההגדרה של הגנה על ממשק המשתמש בלבד. אם אין מי שמתחזק, אל תבחרו בה. קובץ עם מאקרו שבור גרוע מקובץ בלי מיון.
ואם הקובץ יוצא להנהלה, לדירקטוריון או ללקוח, אל תאפשרו מיון בנתונים בכלל. תנו גיליון תצוגה והשאירו את המקור נעול.
הכלל
הגנה על גיליון אינה מתג בטיחות. היא הצהרה על מי מורשה לעשות מה.
וברגע שההצהרה חוסמת פעולה שהצוות חייב לבצע כדי לעבוד, הצוות ימצא דרך לעקוף אותה. הוא יבטל את ההגנה לפני כל פעולה, או ישמור לעצמו עותק פתוח, או יעבוד בקובץ צד ויעתיק בסוף. בשלושת המקרים הקובץ המוגן שלכם כבר אינו מגן על דבר.
מי שסימן את תיבת המיון והניח שסידר את זה, פשוט לא בדק.
והשאלה שנשארה פתוחה
נניח שבחרתם דרך ויישמתם אותה. המיון עובד, הנוסחאות מוגנות, ואף אחד לא מבטל כלום.
וכאן מתחילה השאלה שהמאמר הזה לא עונה עליה. איך בונים קובץ כספי שמופץ לכמה אנשים כך שההגנה לא תהיה מכשול מלכתחילה. איפה עובר הגבול בין נעילת תאים בגיליון לבין הפרדה מסודרת של הקלט מהחישוב לגיליונות נפרדים, מתי כדאי להוציא את הקלט לטופס או לשאילתה במקום לנעול תאים, ואיך מסבירים את המבנה הזה למי שרק רוצה להקליד מספר ולהמשיך הלאה.
את הדיון הזה אני מנהל בתוך מועדון The UNIQUE Way, ושם נמצא גם עץ ההחלטה המלא עם ארבע הדרכים, נוסח המאקרו להעתקה יחד עם המלכודת שמפילה אותו, ורשימת בדיקה של שבעה סעיפים שמוודאת שההגנה עובדת אצל מי שיקבל את הקובץ ולא רק אצלכם. ההצטרפות חינם.





