תנאי בVBA לפי רשימה
-
אני רוצה לכתוב תנאי ב VBA באקסל לדוגמא שהערך של INPUTBOX יהיה ערך אחד מתוך רשימה, לדוגמא יש לי רשימה של א' ב' ג' וכו', וערך הנכנס לתוך הINPUTBOX חייב להיות משהו מתוך הרשימה, וכן אותו דבר לגבי שדה ב USERFROM.
לא יעזור לי בחירה מתוך רשימה, כי שם אפשר גם לכתוב לבד מה שרוצים, אני רוצה שבסופו של דבר אם הוא לא כתב משהו מהרשימה, אז... וכו'תודה לעוזרים.
-
@חנון-המרבה באימות נתונים באקסל אפשר להגביל רק לרשימת ערכים סגורה.
הנה דוגמא:
-
-
@חנון-המרבה
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
אבל אני רוצה לדעת בכללי איך עושים את זה, תודה רבה.
-
אפשר לכתוב פונקצית מעטפת (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
או ילחץ על לחצן הביטול.
אם רוצים לאפשר גם אי-בחירה, אפשר כמובן להוסיף בדיקה כזו.