2016-04-11 1 views
1

Ich habe versucht, ein VBS-Skript für eine Weile mit msgbox zu arbeiten. Wenn ich eine einzelne msgbox-Anweisung verwende, funktioniert es. Sobald ich bedingte Eingabeoptionen hinzufüge, funktioniert es nicht.Wie konfiguriere ich bedingte Aktionen mit Benutzereingaben in VBS mit MsgBox richtig?

Ich schrieb diese Frage auf Super User und ich wurde aufgefordert, die "Dim" -Anweisung zu verwenden, und auf dieser Website zu veröffentlichen, und ich habe beide jetzt getan. Hier ist ein Teil des Codes, den ich versuche, der funktioniert. (Bitte ignorieren Sie meinem Beispiel.)

Option Explicit 
Dim vbsmsg, vbsyes, vbsno 
vbsmsg=MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", 1+48, "Format Drive C:") 

Wenn ich den obigen Code über eine Verknüpfung ausführen bekomme ich einen Dialog wie folgt aus: enter image description here

Aber wenn ich folgendes hinzufügen, erhalte ich einen Laufzeitfehler wenn "OK" oder "Abbrechen"

If vbsmsg=1 Then 
    vbsyes=MsgBox("The contents of your C: Drive could not be successfully deleted.", 0+64, "Error Formatting Drive C: - System Error 5") 
If vbsmsg=2 Then 
    vbsno=MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", 0+64, "Error Formatting Drive C: - System Error 303") 

enter image description here

die Zeile/Zeichen in dem Fehler Klick zwischen dem "0" einem d "3" in "Systemfehler 303"

Ich habe schon eine Menge Fehlersuche versucht. Ich habe versucht, die Dim-Anweisung zu ändern, die Option explizit hinzuzufügen, 1 und 2 anstelle von 6 und 8 usw. zu verwenden ... nichts scheint zu funktionieren. Als ich den zweiten Teil auskommentiert habe, anstatt einen Fehler nach dem Ausführen der Datei zu bekommen, hat es mich einfach geschlossen. Ich bin sicher, dass meine ganze Syntax korrekt und im richtigen Format ist. Ich änderte 1 und 2 zu vbOK und vbCancel und als ich es zurück änderte, würde es überhaupt nicht funktionieren und gab mir sofort den Fehler auf dieser Seite.

Wenn jemand weiß, was mit meinen Beispielen falsch ist, würde ich es sehr schätzen. Ich bin ziemlich neu in der Arbeit mit VBS-Dateien, aber ich habe mit .bat-Dateien für eine lange Zeit gearbeitet und keiner dieser Prinzipien scheint hier zu arbeiten,

Ich würde jede Unterstützung schätzen, auch wenn es klein ist,

+1

Wenn Sie eine If-Anweisung in mehr als einer Zeile schreiben, wie Sie, dann müssen Sie End If verwenden. Überprüfen Sie die [MSDN-Seite] (https://msdn.microsoft.com/en-us/library/5h27x7e9%28v=vs.84%29.aspx). –

+0

Ich habe versucht, EndIf hinzuzufügen, es gab mir nur einen anderen Fehler – InterLinked

+0

@HansPassant könnte '_' nach dem 'Then' verwendet haben, um die Notwendigkeit für 'End If' zu vermeiden. – Lankymart

Antwort

2

diesem Beispiel probieren Sie:

Option Explicit 
Dim Title,Question 
Title = "user input in VBS with MsgBox" 
Question = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed ?",vbYesNo+vbQuestion, Title) 
If Question = vbYes Then 
    MsgBox "We proceed wipping your C:\ drive",vbExclamation,Title 
    'Call your sub here to continue proceeding your script 
Else 
    MsgBox "Canceling the operation !",vbCritical,Title 
    Wscript.Quit() 
End If 

weitere Informationen über MsgBox Constants

+0

Nur eine Frage nach dem Ausführen, wissen Sie, wie ich die 1 + 48 in meinem ursprünglichen VBS-Skript hatte? Wohin würde das jetzt in dieser neuen Version gehen, wenn es nicht auf einer Linie ist? Gerade jetzt, ich bekomme die? Wenn Sie auf "Ja" klicken, wird das Symbol "Achtung" angezeigt, wenn Sie auf "Ja" klicken, und das Symbol "Kritisch", wenn Sie auf "Nein" klicken. – InterLinked

+1

UPDATE: Egal. Ich sehe jetzt, danke für Ihre Hilfe! – InterLinked

+0

Es erklärt nicht wirklich, warum @InterLinked den 'Expected 'End''-Kompilierungsfehler bekommen hat. Das Hinzufügen der benannten Konstanten korrigiert das nicht, aber ich stimme zu, dass sie verwendet werden sollten, das Problem war eine "If" -Anweisung, die mehrere Zeilen ohne ein "End If" oder ein Fortsetzungszeichen "_" überspannt. – Lankymart

1

Während @Hackoo'sanswer t echnisch korrekt beantwortet es nicht die initial question, also werde ich versuchen, hier.

Der Grund für den Fehler

Microsoft VBScript compilation error: Expected 'End'

ist aufgrund der If Aussage über mehr dann eine Zeile ohne End If den Anweisungsblock zu beenden, wie in @Hackoo's Beispiel End If Zugabe wird diesen Fehler korrigieren.

Wenn Sie aus irgendeinem Grund die Syntax verdichten wollten, waren Sie nicht weit entfernt. Sie hatten zwei Möglichkeiten;

  1. Setzen Sie die If Aussagen auf einer Zeile

    Option Explicit 
    Dim vbsmsg 
    vbsmsg = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", vbYesNo + vbQuestion, "Format Drive C:") 
    
    If vbsmsg = vbYes Then Call MsgBox("The contents of your C: Drive could not be successfully deleted.", vbExclamation, "Error Formatting Drive C: - System Error 5") 
    If vbsmsg = vbNo Then Call MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", vbCritical, "Error Formatting Drive C: - System Error 303") 
    

    , die ein wenig hässlich Blick auf manchmal schwer zu folgen sein können (aber das ist nur meine Meinung).

  2. Verwenden Sie das Linienfortsetzungszeichen (_) eine einzige Aussage zu ermöglichen, auch bekannt wird dies als Statement Break in VBScript mehrere Zeilen, zu überspannen.

    Option Explicit 
    Dim vbsmsg 
    vbsmsg = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", vbYesNo + vbQuestion, "Format Drive C:") 
    
    If vbsmsg = vbYes Then _ 
        Call MsgBox("The contents of your C: Drive could not be successfully deleted.", vbExclamation, "Error Formatting Drive C: - System Error 5") 
    If vbsmsg = vbNo Then _ 
        Call MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", vbCritical, "Error Formatting Drive C: - System Error 303") 
    

Wie bereits erwähnt ist es selbstverständlich, dass Sie die VBScript benannte Konstanten in Code zu verwenden, sollten sich bemühen, statt hart codierten Zahlenwerte, wo immer möglich.

+0

Wow, schnelle Abstimmung, dann Abstimmung ... funktionieren die Beispiele nicht, habe ich die Frage nicht beantwortet? – Lankymart

+0

Ich frage mich, warum meine Antwort downvoted ist ??? – Hackoo

+0

Ich falle nichts runter? so was ist los ? – Hackoo

Verwandte Themen