-
@פלורידה הכי קל להסביר על ידי דוגמא.
רק בוא נקבע שקוראים למחרוזת הזוabbccddde
מעכשיו בשם: מפתח.
פיענוח המפתח הוא כך:
A
= סדר
BB
= מסכת
CC
= פרק
DDD
= דף
E
= עמודכדי לשמור את נתוני החזרות, אני צריך שהתוכנה תייצר לי טבלת חזרות.
מבנה הטבלה הוא של זוגות:מפתח תאריך מפתח תאריך מפתח תאריך מפתח תאריך זו הטבלה היחידה שאני צריך לגבות \ לשחזר.
בכל הקלקה על תא, אני צריך פונקציה שתייצר את המפתח המתאים לתא, לפי המיקום שבו לחצתי.
לאחר מכן אני בודק אם המפתח כבר קיים בטבלה:- אם כן אני מעדכן את השורה המתאימה בטבלה. את הלוגיקה אתה צריך לקבוע, האם למחוק את השורה, לעדכן תאריך וכו'.
- אם לא, אני מוסיף שורה חדשה עם התאריך הנוכחי.
אין לי כעת זמן להמשיך, אבל זו ההתחלה.
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
הכי קל להסביר על ידי דוגמא.
רק בוא נקבע שקוראים למחרוזת הזו abbccddde מעכשיו בשם: מפתח.
פיענוח המפתח הוא כך:
A = סדר
BB = מסכת
CC = פרק
DDD = דף
E = עמודאשמח אם תפנה אותי למידע שיהיה עבורי לכל הפחות קצה חוט להבין כיצד ליצור מפתח
-
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
הכי קל להסביר על ידי דוגמא.
רק בוא נקבע שקוראים למחרוזת הזו abbccddde מעכשיו בשם: מפתח.
פיענוח המפתח הוא כך:
A = סדר
BB = מסכת
CC = פרק
DDD = דף
E = עמודאשמח אם תפנה אותי למידע שיהיה עבורי לכל הפחות קצה חוט להבין כיצד ליצור מפתח
@פלורידה אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
אשמח אם תפנה אותי למידע שיהיה עבורי לכל הפחות קצה חוט להבין כיצד ליצור מפתח
אני מפנה אותך לעצמך...
כבר יצרת רשימת מפתחות עבור כל הש"ס, וצירפת אותה לעיל:מספרי קטגוריה.xlsm
-
אני רואה שאני ממש שאינו יודע לשאול.
אז אנסה כך:
האם הצורה הנכונה הוא לתת לו רשימה של שלושים ותשעה תנאים כמניין המסכתות, שאם תנאי ברכות מתקיים, הוא יעשה בחר לאיזור במפתח ששם נמצא המידע על המסכת ברכות , ואז "חיפוש" הדף באיזור הזה, ואז לבדוק מה המפתח שלו?
עריכה: אולי יותר נכון לשאול כך:
האם יש אפשרות ליצור פונקצייה באקסל שלפי:- גליון
- שם הדף בעמודה הראשונה בטבלה
הוא יידע איך מאיזה תא לשלוף את המפתח?
במידה וישנה אפשרות שכזו, אשמח לקבל קצה מידע היכן ניתן ללמוד עליה.
-
אני רואה שאני ממש שאינו יודע לשאול.
אז אנסה כך:
האם הצורה הנכונה הוא לתת לו רשימה של שלושים ותשעה תנאים כמניין המסכתות, שאם תנאי ברכות מתקיים, הוא יעשה בחר לאיזור במפתח ששם נמצא המידע על המסכת ברכות , ואז "חיפוש" הדף באיזור הזה, ואז לבדוק מה המפתח שלו?
עריכה: אולי יותר נכון לשאול כך:
האם יש אפשרות ליצור פונקצייה באקסל שלפי:- גליון
- שם הדף בעמודה הראשונה בטבלה
הוא יידע איך מאיזה תא לשלוף את המפתח?
במידה וישנה אפשרות שכזו, אשמח לקבל קצה מידע היכן ניתן ללמוד עליה.
@פלורידה יש כאן צורך בשני פונקציות, כל אחת בכיוון הפוך:
1. המרת מיקום בגליון כלשהו למחרוזת מפתח
בהנתן מיקום מסויים בגיליון כלשהו, הפונקציה תתרגם את המיקום למפתח המתאים.שימוש:
כשהמשתמש ילחץ על משבצת כלשהיא, נדע לאיזה דף הוא התכוון, וכך נוכל לעדכן את הערך המתאים בטבלת החזרות.2. המרת מחרוזת מפתח למיקום בגליון
בהנתן מפתח כלשהו, הפונקציה תתרגם את מחרוזת המפתח למיקום המתאים בגליון המתאים.שימוש:
כשנרצה לבנות את הגליון על פי טבלת החזרות, נסרוק את טבלת החזרות, ועבור כל מפתח נסמן בגליון המתאים את המשבצת המתאימה.עריכה:
המימוש בפועל של הפונקציות (כלומר כתיבת הקוד עבורן) תלוי מאוד בשיטת העיצוב של הגליון.דוגמא למימוש הפונקציה השניה:
חישוב מספר המסכת:
חיפוש של שם הגליון בטבלת המסכתות.
חישוב מספר הדף:
ניתן לקבל את מספר הדף לפי מספר השורה, עם היסט מסויים בגלל העיצוב.
חישוב מספר הפרק:
אם החלטנו לאפשר מספר עמודות קבוע לכל פרק, למשל 4, החישוב הוא די פשוט, לפי מספר העמודה לחלק ל4 + היסט מסויים.
בעוד שאם מספר העמודות משתנה עבור כל פרק, זה יותר מורכב, ודורש סריקה יותר חכמה של הגליון.חישוב מספר החזרה:
נגזר מחישוב מספר הפרק + חישוב היסט העמודות שמאלה.
-
אני עומד לפני סיום השלב הראשון בס"ד
יצרתי טבלה שבכותרות ישנם
ברכות
,שבת
, וכו' ובעמודה הראשונה,ב.
,ב:
,ג.
, וכו'.הצורה לשלוף את המפתח היא על ידי index + matsh.
הדרך לקבל את המידע היא לפי נתוני המסכת, והדף בטבלה שמקבלת את הדבל קליק, היא על ידי VLookUp עם הסיט שלילי.
כל הקוד יחד:
Public Function m_kata(wordText As String) As Variant masecet = ActiveSheet.Range("A6") ActiveColumn = ActiveCell.Column - ActiveCell.ListObject.DataBodyRange.Column + 1 tanivchar = Selection ActiveTable = ActiveCell.ListObject amuda1 = ActiveSheet.ListObjects(ActiveTable).ListColumns(1).DataBodyRange amudanivchar = ActiveSheet.ListObjects(ActiveTable).ListColumns(ActiveColumn).DataBodyRange daf = Application.VLookup(tanivchar, Application.Choose(Array(1, 2), amudanivchar, amuda1), 2, 0) m_kata = Application.Index(Sheets("מקט").Range("T6:BF356"), Application.Match(daf, Sheets("מקט").Range("S6: S356"), 0), Application.Match(masecet, Sheets("מקט").Range("T6:BF6"), 0)) End Function
כעת נותר להחליט, האם כדאי ליצור את המסד בחוברת עבודה נפרדת, או באותה חוברת עבודה.
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
אפשר באותה המידה להשאר לגמרי באקסל, ולהפריד לשני אקסלים, אחד לנתונים ואחד לתצוגה.
אם בהמשך זה יגדל בעז"ה גם לשו"ע ועוד - באמת צריך לשקול להשתמש כאן בבסיס נתונים.אני אישית יותר מתחבר למסד נתונים נפרד. השאלה האם ניתן להשתמש בחוברת עבודה נפרדת לגמרי והיא לא תקפוץ בכל הפעלה של החוברת של התצוגה.
כמו כן אשמח לשמוע על החסרונות של השיטה הזאת (אם יש...)
-
אני עומד לפני סיום השלב הראשון בס"ד
יצרתי טבלה שבכותרות ישנם
ברכות
,שבת
, וכו' ובעמודה הראשונה,ב.
,ב:
,ג.
, וכו'.הצורה לשלוף את המפתח היא על ידי index + matsh.
הדרך לקבל את המידע היא לפי נתוני המסכת, והדף בטבלה שמקבלת את הדבל קליק, היא על ידי VLookUp עם הסיט שלילי.
כל הקוד יחד:
Public Function m_kata(wordText As String) As Variant masecet = ActiveSheet.Range("A6") ActiveColumn = ActiveCell.Column - ActiveCell.ListObject.DataBodyRange.Column + 1 tanivchar = Selection ActiveTable = ActiveCell.ListObject amuda1 = ActiveSheet.ListObjects(ActiveTable).ListColumns(1).DataBodyRange amudanivchar = ActiveSheet.ListObjects(ActiveTable).ListColumns(ActiveColumn).DataBodyRange daf = Application.VLookup(tanivchar, Application.Choose(Array(1, 2), amudanivchar, amuda1), 2, 0) m_kata = Application.Index(Sheets("מקט").Range("T6:BF356"), Application.Match(daf, Sheets("מקט").Range("S6: S356"), 0), Application.Match(masecet, Sheets("מקט").Range("T6:BF6"), 0)) End Function
כעת נותר להחליט, האם כדאי ליצור את המסד בחוברת עבודה נפרדת, או באותה חוברת עבודה.
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
אפשר באותה המידה להשאר לגמרי באקסל, ולהפריד לשני אקסלים, אחד לנתונים ואחד לתצוגה.
אם בהמשך זה יגדל בעז"ה גם לשו"ע ועוד - באמת צריך לשקול להשתמש כאן בבסיס נתונים.אני אישית יותר מתחבר למסד נתונים נפרד. השאלה האם ניתן להשתמש בחוברת עבודה נפרדת לגמרי והיא לא תקפוץ בכל הפעלה של החוברת של התצוגה.
כמו כן אשמח לשמוע על החסרונות של השיטה הזאת (אם יש...)
-
@פלורידה למקם את כל הנתונים באקסל נפרד, זו באמת הדרך המומלצת, כי כך ניתן לעדכן את הממשק בנפרד.
ניתן לגשת אליו בצורה שקטה מתוך הקוד, כאשר הפתיחה שלו תהיה מוסתרת מהמשתמש. -
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
ניתן לגשת אליו בצורה שקטה מתוך הקוד, כאשר הפתיחה שלו תהיה מוסתרת מהמשתמש.
כלומר: הוא פתוח בכל עת בלי שהמשתמש רואה אותו?
או שכל פעולה הוא נגש לשם? -
@פלורידה מטעמי יעילות עדיף שיהיה פתוח כל זמן שהתוכנה פעילה, כך הגישה אליו תהיה יותר מהירה, כי הפתיחה לוקחת זמן.
-
אני אשמח לשמוע פרטים איך ניתן להריץ את הקובץ בצורה מוסתרת.
לפחות לשמוע איך התכונה הזו נקראת, גוגל כבר יסביר לי איך עושים -
העצות שם בעיקרן נוגעות לשאלה איך אפשר לפתוח ברקע, לבצע מאקרו ולסגור.
לאחר מעבר על העצות שם (לפי רמת הבנתי), עדיין לא ברור לי באיזה אופן אני יכול להשאיר את החוברת פתוחה לאורך כל זמן הריצה של התוכנה, כאשר התוכנה ברקע ואינה מופיעה.האופציה של
Application.ScreenUpdating = False
להבנתי אינה גורמת שלא יוצג כלל אלא היא מופיעה בזמן הריצה בלי גישה. -
העצות שם בעיקרן נוגעות לשאלה איך אפשר לפתוח ברקע, לבצע מאקרו ולסגור.
לאחר מעבר על העצות שם (לפי רמת הבנתי), עדיין לא ברור לי באיזה אופן אני יכול להשאיר את החוברת פתוחה לאורך כל זמן הריצה של התוכנה, כאשר התוכנה ברקע ואינה מופיעה.האופציה של
Application.ScreenUpdating = False
להבנתי אינה גורמת שלא יוצג כלל אלא היא מופיעה בזמן הריצה בלי גישה.@פלורידה תשתמש במשתנים גלובליים.
צור מודול ובו תצהיר על משתנה גלובלי (ציבורי) שיכיל את חוברת הנתונים:Public DataWB As Workbook
כעת בפתיחת החוברת שלך, תריץ את הקוד הבא:
Set DataWB = GetObject("Hadran_Data.xlsx")
ולפני הסגירה תריץ:
DataWB.Close SaveChanges:=True
כי מסתמא תרצה לשמור את השינויים שביצעת בקובץ הדאטא.
בין לבין, תוכל לגשת לקובץ הדאטא מכל מקום בקוד על ידי האובייקט
DataWB
. -
@פלורידה תשתמש במשתנים גלובליים.
צור מודול ובו תצהיר על משתנה גלובלי (ציבורי) שיכיל את חוברת הנתונים:Public DataWB As Workbook
כעת בפתיחת החוברת שלך, תריץ את הקוד הבא:
Set DataWB = GetObject("Hadran_Data.xlsx")
ולפני הסגירה תריץ:
DataWB.Close SaveChanges:=True
כי מסתמא תרצה לשמור את השינויים שביצעת בקובץ הדאטא.
בין לבין, תוכל לגשת לקובץ הדאטא מכל מקום בקוד על ידי האובייקט
DataWB
. -
אני מנסה לכתוב איליו כך:
Application.Goto Workbooks(DataWB).Sheets("גיליון1").Range("a1") = Range("a1").Value
מקבל שגיאה
Type mismatch
-
@פלורידה תשתמש במשתנים גלובליים.
צור מודול ובו תצהיר על משתנה גלובלי (ציבורי) שיכיל את חוברת הנתונים:Public DataWB As Workbook
כעת בפתיחת החוברת שלך, תריץ את הקוד הבא:
Set DataWB = GetObject("Hadran_Data.xlsx")
ולפני הסגירה תריץ:
DataWB.Close SaveChanges:=True
כי מסתמא תרצה לשמור את השינויים שביצעת בקובץ הדאטא.
בין לבין, תוכל לגשת לקובץ הדאטא מכל מקום בקוד על ידי האובייקט
DataWB
. -
@odeddvir
כל קובץ שפתחתי אותו פעם אחת על ידיGetObject
יותר לא נפתח לי כרגיל, כלומר הוא ירוץ (אני אראה קובץ מוסתר בשולחן העבודה,) אך אינו מוצג.ניסיתי להגדיר ככה:
DataWB.Visible = True
אך קיבלתי שגיאה: Object doesn't support this property or method
-
@odeddvir
כל קובץ שפתחתי אותו פעם אחת על ידיGetObject
יותר לא נפתח לי כרגיל, כלומר הוא ירוץ (אני אראה קובץ מוסתר בשולחן העבודה,) אך אינו מוצג.ניסיתי להגדיר ככה:
DataWB.Visible = True
אך קיבלתי שגיאה: Object doesn't support this property or method
-
@פלורידה מעניין... לא הצלחתי לשחזר את התופעה אצלי.
בכל מקרה, פתח את הקובץ דאטא, עבור לעורך ה-VBA על ידי מקש F11 ובחלון ה- Immediate למטה תריץ:ThisWorkbook.Windows(1).Visible = True
האם כעת מוצג?
-
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
האם כעת מוצג?
אכן מוצג
מה המספר(1)
מבטא?
על מנת שאדע כיצד לשלב אותו בקוד