האם אפשר לעשות עיצוב מותנה לפקד באקסס?
-
@OdedDvir
סליחה אבל לא הבנתי מה לעשות בדיוק
א. איך להפוך לציבורית
ב. האם אני אמור לשנות את זה?("<form-name>")
-
@אוריי אמר בהאם אפשר לעשות עיצוב מותנה לפקד באקסס?:
א. איך להפוך לציבורית
רשמתי לך למעלה (לשנות את המילה Private למילה Public)
ב. האם אני אמור לשנות את זה?
כן, תכניס שם את שם הטופס שמכיל את הפקדים, למשל:
Forms("Shelves").SetColors()
-
@אוריי זו שגיאה כי הקומפיילר לא מזהה את הפונקציה.
תוכל לעקוף את השגיאה על ידיForms("as").Form.SetColors()
או על ידי
Forms!as.SetColors()
-
@אוריי אההה, זו לא באמת שגיאה, אלא מוגבלות של השפה:
תשנה את הקוד ל:Forms!as.SetColors או Forms("as").Form.SetColors
דהיינו בלי סוגריים, או אם דווקא אתה רוצה סוגריים תוסיף את המילה Call בהתחלה
Call Forms("as").Form.SetColors()
@OdedDvir
משום מה לא מצליח
יכול להיות שאני לא כותב את זה במקום הנכון
אני אסביר מה יש לי ואיפה אני כותב כעת
לי יש שאילתה לפי מס' מדף השאילתה מוצגת בתוך טופס והטופס הזה בתוך טופס אחר
אני ניסתי לכתוב את זה באירוע לאחר עידכון של הטופס האמצעי (המקשר בין השאילתה לטופס המוצג)
ושם כתבתי כךPrivate Sub Form_AfterUpdate() Call Forms("as").Form.SetColors End Sub
וזה לא עובד.
-
@OdedDvir
משום מה לא מצליח
יכול להיות שאני לא כותב את זה במקום הנכון
אני אסביר מה יש לי ואיפה אני כותב כעת
לי יש שאילתה לפי מס' מדף השאילתה מוצגת בתוך טופס והטופס הזה בתוך טופס אחר
אני ניסתי לכתוב את זה באירוע לאחר עידכון של הטופס האמצעי (המקשר בין השאילתה לטופס המוצג)
ושם כתבתי כךPrivate Sub Form_AfterUpdate() Call Forms("as").Form.SetColors End Sub
וזה לא עובד.
-
@אוריי הקוד צריך להמצא בטופס שמציג את השאילתא על ShelfCharacteristics
העובדה שהטופס הנ"ל נמצא בעוד טופס אחר לא משנה.י יש שאילתה לפי מס' מדף השאילתה מוצגת בתוך טופס
נקרא לו A
והטופס הזה בתוך טופס אחר
נקרא לו B
הקוד צריך להיות בטופס A
-
@OdedDvir
נראה לי שלא הוא נתקע בקוד הזהCall Forms("as").Form.SetColors()
ובלחיצה על F8 הוא מחזיר שגיאה כזו
-
@OdedDvir
עכשיו עובד
אבל נוצרה בעיה אחרת שאם אני מוריד את הסימון הוא לא מחזיר את העיצוב הקודם@אוריי זה בגלל שמעיקרא הפונקציה סורקת רק את הפקדים שמסומנים
אפשר לשנות שתסרוק הכל ולעדכן את כולם, כךPublic Sub SetColors() Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("ShelfCharacteristics", dbOpenSnapshot, dbReadOnly) rs.MoveFirst While Not rs.EOF If rs!ClosedShelf Then Me.Controls(CStr(rs!ShelfNumber)).ForeColor = vbRed Else Me.Controls(CStr(rs!ShelfNumber)).ForeColor = vbBlack End If rs.MoveNext Wend rs.Close End Sub
-
@אוריי זה בגלל שמעיקרא הפונקציה סורקת רק את הפקדים שמסומנים
אפשר לשנות שתסרוק הכל ולעדכן את כולם, כךPublic Sub SetColors() Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("ShelfCharacteristics", dbOpenSnapshot, dbReadOnly) rs.MoveFirst While Not rs.EOF If rs!ClosedShelf Then Me.Controls(CStr(rs!ShelfNumber)).ForeColor = vbRed Else Me.Controls(CStr(rs!ShelfNumber)).ForeColor = vbBlack End If rs.MoveNext Wend rs.Close End Sub
-
תוכל להוסיף בין שורה 1 לשורה 2 את הקוד
On Error Resume Next
שזה אומר להתעלם מכל השגיאות בפונקציה.
שים לב, לא הייתי משתמש בקוד כזה כלל בגרסת הפצה של תוכנה, כי באופן כללי זה דבר לא מומלץ להתעלם משגיאות בלי הבחנה, והנכון הוא לטפל בכל שגיאה לפי הקוד שלה.
אבל זה כבר נושא בפני עצמו.
למקרה שלך שבה הפונקציה רק משנה עיצוב - זה לא נורא... -
תוכל להוסיף בין שורה 1 לשורה 2 את הקוד
On Error Resume Next
שזה אומר להתעלם מכל השגיאות בפונקציה.
שים לב, לא הייתי משתמש בקוד כזה כלל בגרסת הפצה של תוכנה, כי באופן כללי זה דבר לא מומלץ להתעלם משגיאות בלי הבחנה, והנכון הוא לטפל בכל שגיאה לפי הקוד שלה.
אבל זה כבר נושא בפני עצמו.
למקרה שלך שבה הפונקציה רק משנה עיצוב - זה לא נורא...