@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
האם כעת מוצג?
אכן מוצג
מה המספר (1) מבטא?
על מנת שאדע כיצד לשלב אותו בקוד
הפורום כעת לקריאה בלבד, לקריאה נוספת.
@odeddvir אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
האם כעת מוצג?
אכן מוצג
מה המספר (1) מבטא?
על מנת שאדע כיצד לשלב אותו בקוד
למה לא תשתמש ב"תיקון שגיאות אוטומטי"?
העצות שם בעיקרן נוגעות לשאלה איך אפשר לפתוח ברקע, לבצע מאקרו ולסגור.
לאחר מעבר על העצות שם (לפי רמת הבנתי), עדיין לא ברור לי באיזה אופן אני יכול להשאיר את החוברת פתוחה לאורך כל זמן הריצה של התוכנה, כאשר התוכנה ברקע ואינה מופיעה.
האופציה של Application.ScreenUpdating = False להבנתי אינה גורמת שלא יוצג כלל אלא היא מופיעה בזמן הריצה בלי גישה.
@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 אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
אפשר באותה המידה להשאר לגמרי באקסל, ולהפריד לשני אקסלים, אחד לנתונים ואחד לתצוגה.
אם בהמשך זה יגדל בעז"ה גם לשו"ע ועוד - באמת צריך לשקול להשתמש כאן בבסיס נתונים.
אני אישית יותר מתחבר למסד נתונים נפרד. השאלה האם ניתן להשתמש בחוברת עבודה נפרדת לגמרי והיא לא תקפוץ בכל הפעלה של החוברת של התצוגה.
כמו כן אשמח לשמוע על החסרונות של השיטה הזאת (אם יש...)
אני צריך לבחור את העמודה בטבלה שבה נמצא התא הנבחר.
לגבי לבחור את הטבלה הפעילה עשיתי ככה:
ActiveTable = ActiveCell.ListObject
amudanivchar = ActiveSheet.ListObjects(ActiveTable).ListColumns(3).DataBodyRange
אך את העמודה לא הצלחתי לבחור. לכן הזכרתי מפורש (3)
זה לא טוב לי, אני צריך שישאר עמום, כלומר "העמודה הפעילה"
אין משהו דומה לזהactiveListColumns ?
אין לי שגיאה ברוך ה'.
אלא שהתוצאה של הפונקציה היא: #N/A.
מבדיקה שערכתי הבעיה היא בשורות 4,6
(החלופות שנתתי להם בשורות 5,7 פועלות כראוי.)
Public Function m_kata(wordText As String) As Variant
masecet = ActiveSheet.Range("A6")
tanivchar = Selection
amuda1 = ActiveSheet.ListObjects("טבלה24").ListColumns(1)
'amuda1 = Sheets("מקט").Range("c25:c35")
amudanivchar = ActiveSheet.ListObjects("טבלה24").ListColumns(3)
'amudanivchar = Sheets("מקט").Range("e25:e35")
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
הסיבה שאני לא משתמש בחלופות, משום שאני צריך שהפונקציה שלי תדע לבד, מהי הטבלה שאני עומד בה, ומהי העמודה שאני עומד בה.
זה הקוד שלי.
הבעיה בשורה 6 שאני משתמש בסוגריים מסולסלים (כמו שהייתי משתמש בפונקציה בתוך הגליון.)
כנראה שאי אפשר ב-vba
יש משהו במקום??
Public Function m_kata(wordText As String) As Variant
מסכת= ActiveSheet.Range("A6")
tanivchar = Selection
amuda1 = ActiveSheet.ListObjects("טבלה2").ListColumns(1)
amudanivchar = ActiveSheet.ListObjects("טבלה2").ListColumns(3)
דף= Application.VLookup(tanivchar, Application.Choose({1, 2}, amudanivchar, amuda1), 2, 0)
m_kata = Application.Index(Sheets("מקט").Range("T6:BF356"), Application.Match(דף, Sheets("מקט").Range("S6: S356"), 0), Application.Match(מסכת, Sheets("מקט").Range("T6:BF6"), 0))
End Function
בגליון אני משתמש בזה ככה: (כמובן הפוך LTR)
=VLOOKUP(A1,CHOOSE({1,2}, טבלה2[עמודה3], טבלה2[עמודה1]), 2, 0)