קוד מאקרו שאינו עובד
-
עשיתי איזה מאקרו ומשום מה זה לא עובד, מישהו יודע מה הבעיה?!
Sub הצג() Dim A, B, C A = InputBox("סיסמא", "הכנס סיסמא להצגה", , 13000, 6000) B = 900 / 3 C = B / 3 Application.Run "'חוברת1.xlsm'!Macro13" If A = C Then Range("R4").Select Selection.End(xlDown).Select ActiveCell.Offset(1, -8).Range("A1").Select ActiveCell.FormulaR1C1 = "הצג" Else Beep MsgBox ("הסיסמא אינה נכונה") End If MsgBox ("שלום ותודה!") ActiveCell.FormulaR1C1 = "אל תציג" End Sub
ובהזדמנות זו אשאל האם יש אפשרות ב'MsgBox' שההודעה תופיע זמן מסוים ולאחמ"כ היא תעלם?!
-
@חנון-המרבה המאקרו לא רץ בכלל? או שהוא נתקע איפשהו? כי א"כ היכן הוא נתקע? מה הודעת השגיאה שקופצת לך? (או שבכלל הוא נתקע בהרצה של הפונקציה השניה שאתה קורא לה מתוכה (מאקרו 13) שהקובץ המצוין לא זמין וכדו')
תוכל לתת יותר פרטים? -
@משחזר-מידע אמר בקוד מאקרו שאינו עובד:
@חנון-המרבה אמר בקוד מאקרו שאינו עובד:
ובהזדמנות זו אשאל האם יש אפשרות ב'MsgBox' שההודעה תופיע זמן מסוים ולאחמ"כ היא תעלם?!
createobject("wscript.shell").popup(...)
@משחזר-מידע תוכל לתת לי הסבר איך בדיוק עושים את זה (קצת יותר מפורט)
תודה מראש.. -
@חנון-המרבה
לא מבין איפה השאלה, כנראה שאכן הסיסמא אינה נכונה אתה מחפש בקוד האם Aשווה לC והיות שמה שהזנת לא שווה לC לכן הוא עובר לבלוק ההוראות הבא שאומר להדפיס הודעה כנ"ל,
תנסה להכניס את הסיסמא 100, תבדוק אם יעבוד. -
הבעיה היא בגלל שה100 הינו טקסט, היינו "100", וזה שונה מ100 שהוא מספר.
למשל הקוד הבאDim aNumber Dim bStr aNumber = 1000 bStr = "1000" If bStr = aNumber Then MsgBox "שווה" Else MsgBox "שונה" End If
יקפיץ את התיבה "שונה" (זאת למרות שכאשר בקוד עצמו יש השוואת מספר לטקסט זהה התנאי מתקיים, כנראה בגלל שלפני ההשוואה מתבצעת המרה).
אז הפתרון הוא לכתוב ככה:
If bStr = ("" & aNumber) Then
או אלגנטית לפי הספר, המרה לטקסט
If bStr = CStr(aNumber) Then
שזה אומר במקרה שלנו לכתוב
If A = CStr(C) Then
-
@dovid אמר בקוד מאקרו שאינו עובד:
הבעיה היא בגלל שה100 הינו טקסט, היינו "100", וזה שונה מ100 שהוא מספר.
בVBA
100="100"?100="100" True
לא עברתי על הקוד כדי לדעת מה הבעייה, אבל לכאורה לא זו הבעייה
סליחה, זו אכן הבעייה ואני לא מבין למה, כי לפי הכללים של השפה אפשר להשתמש בזה וזה אמור לעבודבכל מקרה, כמו ש @dovid כתב, הפיתרון הוא להמיר לסטרינג
If A = CStr(C) Then
-
@clickone הצדק איתך, זכרת טוב. גם במשתנים זה עובד יופי.
ניסיתי להבין מה ההבדל בין 100="100" לבין משתנים, וההבדל היחיד שחשבתי זה שהמפרש ממיר את המספר לטקסט לפני ההשוואה, כי הוא רואה שזה טיפוסים שונים. נו ולמה הוא לא רואה במשתנים? הסתכלתי על הקוד והבנתי! המשתנים הם חסרי סוג!כלומר הפתרון הוא לכתוב:
Dim A As String Dim B, C As Integer
ואז זה עובד...
-
@חנון-המרבה תשתדל לפתוח כל פעם נושא נפרד לכל שאלה.