שימוש ב- if instr מרובה

Dragonuv5

New member
שימוש ב- if instr מרובה

שלום יש לי את הפקודה
Private Sub Command2_Click() If InStr("123", "1") Then MsgBox "lalala" If InStr("123", "2") Then MsgBox "lalala" If InStr("123", "3") Then MsgBox "lalala" If InStr("123", "4") Then MsgBox "lalala" End Sub​
הייתי מעוניין לדעת אם במקום לעשות 4 שורות לעשות שורה אחת למשל
If InStr("123", "1","2","3,"4") Then MsgBox "lalala"​
אבל בגלל שזה לא עובד לי אני כנראה לא יודע איך עושים את הדבר הנכון, אשמח אם תתקנו אותי
 

נוייברט

New member
דיייייייייייייייייייייייייייייייייי

Private Sub Form_Load() Dim aa, dd As String aa = "f123" dd = InStr(aa, "123") End Sub​
 

ארזירון

New member
לא הבנתי

איך זה עונה על השאלה? אפשר להשתמש באובייקט RegEx אבל זה יהיה הרבה יותר מסובך....
 

Dragonuv5

New member
אין משהו יותר קל?

בדיוק ראיתי את הפרסומת של cal למעלה :)
 

davidea

New member
הבהרה בבקשה:

אם מדובר בשורה אחת אז האם כוונתך: אם לפחות אחד מהמספרים 1,2,3,4 נמצא בתוך 123 אז הקפץ הודעה או שכוונתך: הקפץ הודעות כמספר הפעמים שאחד המספרים 1,2,3,4 מופיע ב 123? בדוגמה שלך, קיבלת שלש הודעות ובשורה הרביעית כמובן שלא. בנסיון שלך (שאינו תקין כידוע לך) אם הוא היה תקין, היתה מקבל רק הודעה אחת. מה באמת אתה רוצה?
 

davidea

New member
ועד שתבהיר, שתי דוגמאות

'Check to see if one of the numbers 1,2,3,4 is in 123 If InStr("123", "1") Or InStr("123", "2") Or InStr("123", "3") Or InStr("123", "4") Then MsgBox "One of the numbers 1,2,3,4 is in 123" 'Which of the numbers 1,2,3,4 is in 123? Dim MyAnswer as String MyAnswer = "Numbers: " If InStr("123", "1") Then MyAnswer = MyAnswer & "1 " If InStr("123", "2") Then MyAnswer = MyAnswer & "2 " If InStr("123", "3") Then MyAnswer = MyAnswer & "3 " If InStr("123", "4") Then MyAnswer = MyAnswer & "4 " MyAnswer = MyAnswer & "are in 123" MsgBox MyAnswer​
תעשה לכל הקוד העתק הדבק, תראה את הההבדל. לא בהכרח קצר יותר...
 

Dragonuv5

New member
תודה רבה

התכוונתי שאם לפחות אחד מהמספרים נמצא שם. וה-4 היה בכוונה כדי לקבל 3 הודעות ולא 4
 

טרמפיסט

New member
אז לא עדיף ככה?:

Private Sub Whatever() Dim i As Integer Dim sStr As String sStr = "sdjhg12qhg123" For i = 1 To 4 If InStr(1, sStr, Cstr$(i)) > 0 Then MsgBox Cstr$(i) & " found in string" Exit For End If Next i End Sub​
 

טרמפיסט

New member
לא מסובך

הלולאה סופרת מ-1 עד 4 כשבכל פעם היא בודקת אם הספרה נמצאת. ברגע שהיא מוצאת את הספרה הראשונה היא מודיעה על כך ויוצאת מהלולאה.
 

Dragonuv5

New member
../images/Emo53.gif

מה זה
CStr(i) ?​
ואפשר לעשות במקום מ 1-4 לעשות אותיות עבריות ולועזיות?
 

טרמפיסט

New member
בנאדם

אתה חייב לעבור קודם כל קצת על העזרה של VB לפני שאתה זורק שאלות לפורום... CStr הופך את הביטוי שבין הסוגריים לטקסט, וכך VB מתייחס אליו באותו רגע. כמו כן יש גם פקודות המרה אחרות לטיפוסים אחרים: CInt וכו'. לשאלת ה-0: הפונקציה InStr מחזירה את המקום בו מופיע הסימן בתוך המחרוזת הגדולה. אם הסימן לא נמצא הפונקציה מחזירה 0. המשמעות של הבדיקה "גדול מ-0" היא האם נמצא הסימן במחרוזת או לא. תוכל להחליף את המספרים בכל מה שתרצה, אך לא תוכל לבצע זאת בשיטה סדרתית באמצעות לולאה. מקסימום תוכל להריץ לולאה שה-i שלה מצייג ערך ASCII של הסימנים אותם אתה רוצה למצוא. אפשרות נוספת היא להזין את הסימנים השונים (במידה ואין קשר סדרתי בניהם) למערך של בייטים ולרוץ על תאי המערך אחד אחד כש-i של הלולאה מייצג את האינדקס במערך.
 
למעלה