Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

2 Schleifen - Wo ist mein Code fehlerhaft?

Betrifft: 2 Schleifen - Wo ist mein Code fehlerhaft? von: Michael
Geschrieben am: 16.11.2014 18:55:59

Hallo,

ich habe eine Excel-Datei mir folgendem Inhalt:

Zelle B1: Zelle zur Pfadeingabe
Zellen B2 bis E2: Ländernamen
Zellen B3 bis E3: Zusatzinformation

Ziel soll es sein, wenn ich in irgend eine Zelle (außer die oben aufgeführten) ein Datum eintrage, soll im Pfad, der in Zelle "B1" steht, eine PDF-Datei geöffnet werden, die als Dateinamen Land+Zusatz hat.

folgender Code funktioniert 100%ig, wenn ich nur die erste Zele von "Land" und "Zusatz" ansteuere:

#If Win64 Then
Private Declare PtrSafe Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As LongPtr) As LongPtr
Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr

#Else
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As _
String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
#End If

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
Dim lngR As Long
Dim lngC As Long
  
lngR = ActiveCell.Row
lngC = ActiveCell.Column
If IsDate(Range(Cells(lngR, lngC), Cells(lngR, lngC))) = True Then Call plan01

End Sub
Private Sub plan01()

 Dim lngR As Long
 Dim lngC As Long
 lngR = ActiveCell.Row
 lngC = ActiveCell.Column
    
Pfad = Range("B1")
Land = Range("B2")
Zusatz = Range("B3")

 xxx = "" & Pfad & "\" & Land & Zusatz & ".pdf"
 If Dir(xxx) <> "" Then
 ShellExecute 0, "open", xxx, "", "", SHOWMAXIMIZED
 
 Else
 MsgBox "Falsch"
 
End If

End Sub

  

Betrifft: AW: 2 Schleifen - Wo ist mein Code fehlerhaft? von: Michael
Geschrieben am: 16.11.2014 18:57:14


Möchte ich das Ganze nun mit 2 Variabel erstellen, komme ich m.M.n. zu folgender Lösung:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
Dim lngR As Long
Dim lngC As Long
  
lngR = ActiveCell.Row
lngC = ActiveCell.Column
If IsDate(Range(Cells(lngR, lngC), Cells(lngR, lngC))) = True Then Call plan01

End Sub
Private Sub plan01()

 Dim lngR As Long
 Dim lngC As Long
 lngR = ActiveCell.Row
 lngC = ActiveCell.Column



Pfad = Range("B1")
Land = Range("2", i) 'Land wird ermittelt aus Zeile 2 und Spalte i (variabel)
Zusatz = Range("3", j) 'Land wird ermittelt aus Zeile 3 und Spalte j (variabel)

For i = 2 To 4 'Variable ist von (Spalte) 2 bis 4
For j = 2 To 4 'Variable ist von (Spalte) 2 bis 4


 xxx = "" & Pfad & "\" & Land & Zusatz & ".pdf"
 If Dir(xxx) <> "" Then
 ShellExecute 0, "open", xxx, "", "", SHOWMAXIMIZED
 
 
 Next i
 Next j
 
 Else
 MsgBox "Falsch"
 
End If

End Sub
Leider kommt nun die Fehlermeldung "NEXT OHNE FOR".
Ich weiss nicht was ich falsch mache, denn der Aufbau der Schleifen stimmt meiner Meinung nach mit den Beispielen überein, die ich im I-Net gefunden habe.

Ich bin schon ewig an Suchen und "basteln" aber trete nun nur noch auf der Stelle, da mir der entscheidende "Augenöffner" fehlt.
Kann mir bitte jemand helfen und den oben geschriebenen Code so anpassen, dass bei der Suche nach der PDF-Datei alle Land/Zusatz-Kombinationen abgerufen werden und wenn eine Datei gefunden wurde, soll die PDF-Datei geöffnet werden.

Schon jetzt ein großes Dank!

Michael


  

Betrifft: Erst die If-Abfrage beenden... von: {Boris}
Geschrieben am: 16.11.2014 19:01:42

Hi,

...und dann die For-Next-Schleife(n).

VG, Boris


  

Betrifft: AW: Erst die If-Abfrage beenden... von: Michael
Geschrieben am: 16.11.2014 19:18:01

Hallo,

wenn ich den Code umschreibe, also erst die IF-Abfrage beende und dann die SChleifen (next i, next j)
kommt folgende MEldung: Ungültiger Verweis auf next-Steuervariable.

Gruß

Michael

Private Sub plan01()

 Dim lngR As Long
 Dim lngC As Long
 lngR = ActiveCell.Row
 lngC = ActiveCell.Column



Pfad = Range("B1")
Land = Range("2", i) 'Land wir ermittelt aus Zeile 2 und Spalte i (variabel)
Zusatz = Range("3", j) 'Land wir ermittelt aus Zeile 3 und Spalte j (variabel)

For i = 2 To 4 'Variable ist von (Spalte) 2 bis 4
For j = 2 To 4 'Variable ist von (Spalte) 2 bis 4


 xxx = "" & Pfad & "\" & Land & Zusatz & ".pdf"
 If Dir(xxx) <> "" Then
 ShellExecute 0, "open", xxx, "", "", SHOWMAXIMIZED

 Else
 MsgBox "Falsch"
 
End If

 Next i
 Next j
End Sub



  

Betrifft: Erst Next j, dann Next i von: {Boris}
Geschrieben am: 16.11.2014 20:15:57

Hi,

denn die innere Schleife ist die j-Schleife - und die muss auch zunächst durchlaufen werden.

VG, Boris


  

Betrifft: AW: Erst Next j, dann Next i von: Michael
Geschrieben am: 16.11.2014 22:09:51

Hallo, selbst wenn ich
next i
und
next j
tausche kommt eine Fehlermeldung (next ohne for).
Ich habe hier einmal die Datei:
https://www.herber.de/bbs/user/93808.xls


Schönen Abend!

Michael


  

Betrifft: AW: Erst Next j, dann Next i von: Luschi
Geschrieben am: 16.11.2014 22:27:04

Hallo Michael,

würdest Du den Vba-Code einrücken, so das die korrespondierenden Befehle auf eine Stufe stehen,
dann hättest Du es selbst bemerkt:

For i = 2 To 4 'Variable ist von (Spalte) 2 bis 4
    For j = 2 To 4 'Variable ist von (Spalte) 2 bis 4
        xxx = "" & Pfad & "\" & Land & Zusatz & ".pdf"
        If Dir(xxx) <> "" Then
           ShellExecute 0, "open", xxx, "", "", SHOWMAXIMIZED
    Next j
Next i
 
        Else
               MsgBox "Falsch"
 
        End If
If / Else / End If sind durch die For-Schleifen getrennt und das meckert der Compiler an!

Gruß von Luschi
aus klein-Paris

PS: Diese Schreibweise (keine Einrückungen) ist so schlecht zu lesen, das es keinen Sinn macht,
hier Leerzeichen /Tab-Spürünge einzusparen!


  

Betrifft: AW: Erst Next j, dann Next i von: Michael
Geschrieben am: 17.11.2014 21:31:43

Hallo,
wenn ich den Code so umändere, dass erst

Next j

und dann

next i

steht, kommt die Meldung:

Next ohne for.

"Googlen" brachte mir leider so gar kein neuen Lösungsansatz, so dass mein Problem der nicht funktionstüchtigen SChleifen witerhin besteht.

Kann mir irgend jemand schreiben, woran es liegt?
Für jede Art von Hilfe bin ich sehr dankbar.


Schönen Abend!

Michael


  

Betrifft: AW: Erst Next j, dann Next i von: Crazy Tom
Geschrieben am: 17.11.2014 21:37:11

Hallo

    For i
        For j
            If
            
            Else
            
            End If
        Next j
    Next i

MfG Tom