Hilfe bei VB 6 Quellcode

Mit meinen Laien Kenntnissen habe ich dieses VB PRG geschrieben. Mein Problem ist das abfangen der möglichen zwei Fehler und falls andere auftreten diese ganz zu ignorieren und auf die Maske zurück zu kehren.

Ich möchte ein Menue erstellen um 8 Punkte auswählen zu können und somit verschiedene Aufgaben (PRG) zu starten.

Es können zwei Fehler auftreten:

  1. Es wurde kein Punkt gesetzt bzw. kein gewünschtes PRG zum Aufruf gewählt (Fehler = MsgBox(„Bitte Version wählen“, vbOKOnly + vbInformation, "Information)

  2. Das gewählte PRG welches ausgewählt wurde ist aus welchem Grund auch immer auf dem Datentreäger (CD/DVD) nicht vorhanden (Fehler = MsgBox(„Diese Version ist nicht verfügbar“, vbOKOnly + vbInformation, „Information“)

Der Code den ich geschrieben habe sieht wie folgt aus:

Private Sub cmdDeutschok_Click()

On Error GoTo ErrorHandler

Select Case True

Case opt1
x = Shell("\setup1.exe", 1)
Case opt2
x = Shell("\setup2.exe_", 1)
Case opt3
x = Shell("\setup3.exe", 1)
Case opt4
x = Shell("\setup4.exe", 1)
Case opt5
x = Shell("\setup5.exe", 1)
Case opt6
x = Shell("\setup6.exe", 1)
Case opt7
x = Shell("\setup7.exe", 1)
Case opt8
x = Shell("\setup8.exe", 1)
Case Else
Fehler = MsgBox(„Bitte Version wählen“, vbOKOnly + vbInformation, „Information“)
End Select

Exit Sub

ErrorHandler:
Fehler = MsgBox(„Diese Version ist nicht verfügbar“, vbOKOnly + vbInformation, „Information“)
End Sub

Danke und Gruss, Herbi

Hallo Herbi,

deine Version dürfte so wie du sie geschrieben hast, funktionieren.

Du kannst dir aber auch meine Version durchsehen/probieren:


Private Sub cmdDeutschOk_Click()

Dim iMenOpt As Integer 'Menü-Option
Dim sMenPgm As String 'Programm das zum
'akt. Menü gestartet werden soll
Dim iProcID As Integer 'Process-ID
'(=Rückgabewert der Shell-Function)

On Local Error GoTo ErrHandler

'**************************************************
'*** Test-Zuweisungen ***
iMenOpt = 1
sMenPgm = „C:\Windows\System32\calc.exe“

'Hinweis: bei Win95, Win98 lautet der Pfad
'\Windows\System\
'bei WinNt, Win2000 lautet der Pfad
'\WinNT\System32\
'**************************************************

If (iMenOpt 8) Then
Call MsgBox(„Bitte Version wählen“, vbOKOnly + vbInformation,
„Information“)
Else
iProcID = Shell(sMenPgm, vbNormalFocus)
End If

Exit Sub

ErrHandler:

Select Case Err.Number
Case 53, 76
'53 = Datei nicht gefunden,
'76 = Pfad nicht gefunden
Call MsgBox(„Diese Version ist nicht verfügbar“,
vbOKOnly + vbInformation, „Information“)
Case Else 'anderer Fehler
'wenn Anzeige gewünscht, sonst weg lassen
Call MsgBox(Error(Err.Number), vbOKOnly +
vbInformation, „Information“)
End Select
Resume Next

End Sub

Die Menü-Option und den vollständigen Pfad und Namen
des aufzurufenden Programms habe ich den Variablen
iMenOpt bzw. sMenPgm zugewiesen.

Wenn du die Programmzeilen als Procedure ausführst,
kannst du diese beiden Variablen einfach an die Procedure übergeben.

Hoffe dir ein wenig geholfen zu haben.
Viel Erfolg noch für deine weitere Programmierzukunft

Gruß
Günther

Hallo Günther

meine Version funktioniert wie Du schreibst so weit prima nur mit der Fehlermeldung gibts Probleme denes werden immer beide Fehlermeldungen ausgegeben egal was ich auswähle oder aktiviere.

Etwas habe ich noch vergessen zu erwähnen: bei den 'opt1 - 8) sind vorab immer andere Pfade angegeben wie C:\33\3\setup3.exe oder c:\33\5\setup5.exe
Ist das mit Deinem Vorschlag auch möglich.

Danke und Gruss, Herbi

Hallo Herbi,

ich habe dir ein kleines Beispielprogramm zusammengestellt, an dem du deine gewünschten Funktionen ausprobieren und nachsehen kannst.

Du musst dazu ein neues Projekt erstellen und auf die leere Form eine Listbox und einen CommandButton platzieren.
Anschließend fügst du noch den folgenden Quellcode ein.


Option Explicit

Dim aPgmListe() As String

Private Sub Form_Load()

List1.FontSize = 12
List1.Height = 2500
List1.Width = 1950

Command1.Width = 1950
Command1.Caption = „Programm starten“

'Programmnamen in die Listbox eintragen
List1.AddItem („Taschenrechner“)
List1.AddItem („Texteditor“)
List1.AddItem („Programm 3“)
List1.AddItem („Programm 4“)
List1.AddItem („Programm 5“)
List1.AddItem („Programm 6“)
List1.AddItem („Programm 7“)
List1.AddItem („Programm 8“)

'Programmliste dimensionieren (8 mögliche Einträge)
ReDim aPgmListe(7)

'Programme zuweisen, die aufgerufen werden können
aPgmListe(0) = „C:\Windows\System32\calc.exe“
aPgmListe(1) = „C:\Windows\System32\notepad.exe“
aPgmListe(2) = „Programm 3“
aPgmListe(3) = „Programm 4“
aPgmListe(4) = „Programm 5“
aPgmListe(5) = „Programm 6“
aPgmListe(6) = „Programm 7“
aPgmListe(7) = „Programm 8“

End Sub

Private Sub Command1_Click()

ExecPgmAusw (List1.ListIndex)

End Sub

Private Sub ExecPgmAusw(iPgmIdx As Integer)

Dim iProcID As Integer 'Process-ID (Rückgabewert der Shell-Function)

On Local Error GoTo ErrHandler

If (iPgmIdx UBound(aPgmListe)) Then
'kein gültiger Programmlistenindex
Call MsgBox(„Bitte Version wählen“, vbOKOnly + vbInformation, „Information“)
Else
'Programm mit dem entsprechenden Index starten
iProcID = Shell(aPgmListe(iPgmIdx), vbNormalFocus)
End If

Exit Sub

ErrHandler:

Select Case Err.Number
Case 53, 76
'53 = Datei nicht gefunden,
'76 = Pfad nicht gefunden
Call MsgBox(„Diese Version ist nicht verfügbar“, vbOKOnly + vbInformation, „Information“)
Case Else
'alle anderen Fehler
'wenn Anzeige gewünscht, sonst weg lassen
Call MsgBox(Error(Err.Number), vbOKOnly + vbInformation, „Information“)
End Select
Resume Next

End Sub


Ich hoffe, du kannst damit dein Programm nach deinen Anforderungen anpassen.

PS:
Du hast bei deiner - Anweisung als Auswahlvariable „True“ stehen.
Eigentlich sollte dort eine Variable stehen, die eine der die möglichen Optionen vorgibt …

Gruß
Günther