תנאי בVBA לפי רשימה
-
אני רוצה לכתוב תנאי ב VBA באקסל לדוגמא שהערך של INPUTBOX יהיה ערך אחד מתוך רשימה, לדוגמא יש לי רשימה של א' ב' ג' וכו', וערך הנכנס לתוך הINPUTBOX חייב להיות משהו מתוך הרשימה, וכן אותו דבר לגבי שדה ב USERFROM.
לא יעזור לי בחירה מתוך רשימה, כי שם אפשר גם לכתוב לבד מה שרוצים, אני רוצה שבסופו של דבר אם הוא לא כתב משהו מהרשימה, אז... וכו'תודה לעוזרים.
-
אני רוצה לכתוב תנאי ב VBA באקסל לדוגמא שהערך של INPUTBOX יהיה ערך אחד מתוך רשימה, לדוגמא יש לי רשימה של א' ב' ג' וכו', וערך הנכנס לתוך הINPUTBOX חייב להיות משהו מתוך הרשימה, וכן אותו דבר לגבי שדה ב USERFROM.
לא יעזור לי בחירה מתוך רשימה, כי שם אפשר גם לכתוב לבד מה שרוצים, אני רוצה שבסופו של דבר אם הוא לא כתב משהו מהרשימה, אז... וכו'תודה לעוזרים.
@חנון-המרבה באימות נתונים באקסל אפשר להגביל רק לרשימת ערכים סגורה.
הנה דוגמא:

-
@חנון-המרבה באימות נתונים באקסל אפשר להגביל רק לרשימת ערכים סגורה.
הנה דוגמא:

-
@חנון-המרבה
InputBoxהוא רכיב מאוד מיושן וזנוח, בעל יכולות מאוד מוגבלות. אין אפשרות להגביל מראש את ערכי הקלט האפשריים בו, ואפילו לא את סוג הנתונים.
אני מניח שאתה יודע לבדוק את הערך שהמשתמש הקליד, ולהשוות אותו לרשימה של ערכים. כך שאני לא מבין היכן הקושי.לגבי
UserFormניתן ליצור רשימה משולבת עם הגבלה על רשימת הערכים. פשוט תשנה את מאפיין הסגנוןStyleשל הרשימה לfmStyleDropDownListכך:myCombobox.Style = fmStyleDropDownList -
@חנון-המרבה
InputBoxהוא רכיב מאוד מיושן וזנוח, בעל יכולות מאוד מוגבלות. אין אפשרות להגביל מראש את ערכי הקלט האפשריים בו, ואפילו לא את סוג הנתונים.
אני מניח שאתה יודע לבדוק את הערך שהמשתמש הקליד, ולהשוות אותו לרשימה של ערכים. כך שאני לא מבין היכן הקושי.לגבי
UserFormניתן ליצור רשימה משולבת עם הגבלה על רשימת הערכים. פשוט תשנה את מאפיין הסגנוןStyleשל הרשימה לfmStyleDropDownListכך:myCombobox.Style = fmStyleDropDownList@odeddvir אני לא מנסה להגביל את הקלט של ׁInputBox, אני רוצה לקחת את הערך של ה
InputBoxואז לבדוק את זה אם זה תואם לקריטוריונים מסויימים.
עכשיו אם אני רוצה שזה יהיה תואם לאאובאוגוכו' אני צריך לכתוב כזה קוד: (הדוגמא הוא לגבי שדהComboBox1בUserForm)If Not (ComboBox1.Value = "א" Or ComboBox1.Value = "ב" Or ComboBox1.Value = "ג" Or ComboBox1.Value = "ד" Or ComboBox1.Value = "ה" Or ComboBox1.Value = "ו" Or ComboBox1.Value = "ז") Thenאני רוצה פשוט לקצר את הקוד או לחילופין לדעת על משהו יותר רשמי.
(ספיציפי ל
ComboBox1, ענית לי כברפשוט תשנה את מאפיין הסגנון
Styleשל הרשימה לfmStyleDropDownListאבל אני רוצה לדעת בכללי איך עושים את זה, תודה רבה.
-
@odeddvir אני לא מנסה להגביל את הקלט של ׁInputBox, אני רוצה לקחת את הערך של ה
InputBoxואז לבדוק את זה אם זה תואם לקריטוריונים מסויימים.
עכשיו אם אני רוצה שזה יהיה תואם לאאובאוגוכו' אני צריך לכתוב כזה קוד: (הדוגמא הוא לגבי שדהComboBox1בUserForm)If Not (ComboBox1.Value = "א" Or ComboBox1.Value = "ב" Or ComboBox1.Value = "ג" Or ComboBox1.Value = "ד" Or ComboBox1.Value = "ה" Or ComboBox1.Value = "ו" Or ComboBox1.Value = "ז") Thenאני רוצה פשוט לקצר את הקוד או לחילופין לדעת על משהו יותר רשמי.
(ספיציפי ל
ComboBox1, ענית לי כברפשוט תשנה את מאפיין הסגנון
Styleשל הרשימה לfmStyleDropDownListאבל אני רוצה לדעת בכללי איך עושים את זה, תודה רבה.
אפשר לכתוב פונקצית מעטפת (wrapper) ל-InputBox, שניתן להעביר אליה רשימת ערכים מותרים.
בדוגמא הבאה ניתן להעביר רשימת ערכים מותרים המופרדים על ידי צינור pipe
|.Public Function LimitedInputBox(prompt As String, title As String, valuesList As String) As String Dim userInput As String Dim done As Boolean: done = False Dim values As Variant values = Split(valuesList, "|") Do userInput = InputBox(prompt, title) If Len(userInput) > 0 Then Dim val As Variant For Each val In values If userInput = val Then done = True Exit For End If Next val End If Loop Until done LimitedInputBox = userInput End Functionכעת ניתן לקרוא לפונקציה כך:
selectedColor = LimitedInputBox ("Please enter a color (white, black, or blue):", "Color selection", "white|black|blue")או בדוגמא שלך (סדר הפרמטרים מוצג הפוך בגלל העברית...):
selectedClass = LimitedInputBox ("בחר כיתה מ-א עד ח:", "בחירת כיתה", "א|ב|ג|ד|ה|ו|ז|ח")שים לב שתיבת הקלט תמשיך לבקש קלט מהמשתמש גם אם הוא יבחר
Cancelאו ילחץ על לחצן הביטול.
אם רוצים לאפשר גם אי-בחירה, אפשר כמובן להוסיף בדיקה כזו.