-
אני עומד לפני סיום השלב הראשון בס"ד
יצרתי טבלה שבכותרות ישנם
ברכות
,שבת
, וכו' ובעמודה הראשונה,ב.
,ב:
,ג.
, וכו'.הצורה לשלוף את המפתח היא על ידי 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 אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
אפשר באותה המידה להשאר לגמרי באקסל, ולהפריד לשני אקסלים, אחד לנתונים ואחד לתצוגה.
אם בהמשך זה יגדל בעז"ה גם לשו"ע ועוד - באמת צריך לשקול להשתמש כאן בבסיס נתונים.אני אישית יותר מתחבר למסד נתונים נפרד. השאלה האם ניתן להשתמש בחוברת עבודה נפרדת לגמרי והיא לא תקפוץ בכל הפעלה של החוברת של התצוגה.
כמו כן אשמח לשמוע על החסרונות של השיטה הזאת (אם יש...)
-
העצות שם בעיקרן נוגעות לשאלה איך אפשר לפתוח ברקע, לבצע מאקרו ולסגור.
לאחר מעבר על העצות שם (לפי רמת הבנתי), עדיין לא ברור לי באיזה אופן אני יכול להשאיר את החוברת פתוחה לאורך כל זמן הריצה של התוכנה, כאשר התוכנה ברקע ואינה מופיעה.האופציה של
Application.ScreenUpdating = False
להבנתי אינה גורמת שלא יוצג כלל אלא היא מופיעה בזמן הריצה בלי גישה. -
@פלורידה תשתמש במשתנים גלובליים.
צור מודול ובו תצהיר על משתנה גלובלי (ציבורי) שיכיל את חוברת הנתונים: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 אמר בהתייעצות | בניית מסד נתונים לתכנת "הדרן עלך" | אקסל:
Application.Windows(1).Caption = "שמוליק"
אם אני מבין נכון, החלון הפעיל נחשב (1) וכן הלאה.
סביר להניח שכאשר אני פותח חלון על ידי vba הוא לא נחשב פעיל, ולכן הוא מקבל את הערך האחרון מבין החלונות הקיימיםבהתחשב בכך, צריך לחשב כמה חלונות פעילים, ולתת לחלון של המסד את הערך האחרון.
כאשר הוא יהפך לפעיל הוא יחזור להיות (1) וכל הקוד ישתבש? ואם נתתי לו שם, זה ישנה את העובדה הזו?
הפיתרון לתת כותרת, גם היא צריכה קודם לדעת את המיקום באינדקס
אני מרגיש שדיברתי יותר מידי... מה חסר לי בהבנה?
-
@odeddvir בוודאי יש לך גירסת אופיס 365
לי יש 2019הצורה שהכנסתי את זה היא כך:
Sub open1() Set DataWB = GetObject("C:\Desktop\Hadran_Data.xlsx") DataWB.Visible = True End Sub
וכך
Sub סגור() DataWB.Visible = True DataWB.Close SaveChanges:=True End Sub
בריצה בחלון המיידי מתקבלת השגיאה הבאה:
Run-time error '424':
Object required
-
@פלורידה אני בספק אם גרסת האופיס משנה כאן.
אני לא מבין מה אתה מנסה לעשות. לפי הקוד שצירפת, אתה רוצה להציג את חלון הדאטא מתוך התוכנה. אני הבנתי שלא.
אם כן, פשוט תפתח את החוברת כרגיל:Sub open1() Set DataWB = Workbooks.Open("C:\Desktop\Hadran_Data.xlsx") End Sub
ותו לא מידי.