VBA SUB bricht ab / Problem mit globaler Variable

Halli Hallo,

ich hab ein kleines Problem mit meinem VBA-Code und komme absolut nicht weiter.

Ich brauche die globale Variable

introw

Diese habe ich schon deklariert:

Public introw As Integer

Um diese Variable zu bilden, habe ich schon folgenden Code:

Sub LetzteLeereZelleSuchen() 

' letzte leere Zelle suchen
Dim introw As Integer
introw = 2 'ab 2. Zeile gehts los
 Do While Tabelle2.Cells(introw, 1) ""
 '(Zeile, Spalte)
 introw = introw + 1 'eine Zeile weiter
 Loop 
End Sub

Dieser Code sucht die letzte leere Zeile in einer Tabelle. Das muss auch jedesmal wieder passieren wenn der Button geklickt wird, denn die Zeile ändert sich immer.
Den Code habe ich in der entsprechenden SUB aufgerufen. Das funktioniert auch soweit.

hier das eigentliche Problem:
Im nächsten Schritt rufe ich dann eine andere Prozedur aus einem Modul auf, welche dann mit dem Wert

introw

arbeiten soll.

Das funktioniert aber nicht so richtig…

Hier der Auszug der Prozedur aus dem Modul:

Sub PruefenObEintragSchonVorhanden()

'Prüfen ob Eintrag schon vorhanden
 For i = 1 To introw Step 1
 With Tabelle2
 If .Cells(i, 1).Value = UserForm1.t3 \_
 And .Cells(i, 2).Value = UserForm1.t1 \_
 And .Cells(i, 3).Value = UserForm1.t2 \_
 And .Cells(i, 4).Value = UserForm1.t4 \_
 And .Cells(i, 5).Value = UserForm1.t5 \_
 And .Cells(i, 6).Value = UserForm1.t6 Then

 'Textfenster mit Hinweis + Auswahl Wiederholen / Abbrechen
 meldung = MsgBox("Diesen Eintrag gibts schonmal!" & vbLf & vbLf & \_
 "Wie soll es jetzt weiter gehen?" & vbLf & vbLf & \_
 "Wiedeholen löscht die aktuelle Eingabe," & vbLf & \_
 "Abbrechen schließt das ganze Fenster der Adresseingabe", \_
 vbInformation + vbRetryCancel, "Doppelt gemoppelt !")
 If meldung = vbRetry Then
 ' Zeilen löschen
 UserForm1.t1 = ""
 UserForm1.t2 = ""
 UserForm1.t3 = ""
 UserForm1.t4 = ""
 UserForm1.t5 = ""
 UserForm1.t6 = ""
 'Fokus setzen für neuen Versuch
 t1.SetFocus
 Else
 UserForm1.Hide


 'Tabelle1.Select
 End If
 End If
End With
 Next i

End Sub

Diese Prozedur bricht nach der Zeile 

    for i=1 to introw step 1


jedesmal ab und geht direkt zu end. Ich habe die Vermutung, dass kommt weil sie mit introw nix anfagen kann.? Anders kann ichs mir nicht erklären, denn der Code läuft eigentlich, wenn ich ihn lokal in die entsprechende SUB einfüge.

Bitte helft mir. Komm absolut nicht weiter.

LG Uschi

Hallo,

OK, zweite Version. :smile:

Du hattest die Variable doppelt deklariert, was nicht funktionieren sollte.

Nun hast Du die globale Deklaration entfernt und die lokale Deklaration gelassen, deshalb kommt der Wert nicht an. Lösche die lokale Deklaration und trage die Globale wieder ein, dann wird es gehen.

Ein Gedanke noch … hattest Du die globale Deklaration wirklich in einem Modul und nicht in der Userform? Fals doch, füge ein Modul hinzu und deklariere die Variable dort, auch wenn Du in das Modul keine Prozedur schreibst.

Schreibe über Dein Projekt ‚Option Explicit‘, dann wirst Du darauf aufmerksam gemacht, wenn eine Deklaration fehlt, wenn Du Dich bei einer Variablen vertippt hast …

Gruß, Rainer

Hey, erstmal danke für die schnelle Hilfe.
hab deine Ratschläge befolgt und nur global im Modul deklariert. Dann gings auch zwischendurch mal.
Nun durchläuft er die Schleife schon wieder nicht mehr.
Ich find aber auch keinen gravierenden Fehler, warum er das nicht mehr tun sollte.

Kannste vielleicht nochmal drüber gucken?

Sub PruefenObEintragSchonVorhanden()

'Prüfen ob Eintrag schon vorhanden
 For i = 1 To introw Step 1
 With Tabelle2
 If .Cells(i, 1).Value = UserForm1.t3 \_ '

Aufrufen tu ichs so (damit de mal die zusammenhänge siehst):



    Private Sub BOk\_Click()
    
    
    PruefeObNameEingetragen
    
    If bolEnde = True Then
    UserForm1.Hide
    Exit Sub
    End If
    
    
    LetzteLeereZelleSuchen
    
    PruefenObEintragSchonVorhanden
    
    If bolEnde = True Then
    UserForm1.Hide
    Exit Sub
    End If
    
    ' In leere Zelle den Wert aus Formular schreiben
    With Tabelle2
     .Cells(introw, 1).Value = t3
     .Cells(introw, 2).Value = t1
     .Cells(introw, 3).Value = t2
     .Cells(introw, 4).Value = t4
     .Cells(introw, 5).Value = t5
     .Cells(introw, 6).Value = t6
    ...hier gehts noch bissel weiter




lg uschi

Hi Uschi,
du schreibst,

If .Cells(i, 1).Value = UserForm1.t3 _ ’ 32xxx

Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi uschi,

Reinhard war schneller als ich. :smile: Nur eine Ergänzung noch, Du weißt, wovon Reinhard redet, kennst den Debugger?

Gruß, Rainer

Sorry Rainer und Reinhard, hatte grade viel Stress an der Arbeit. Hoffe Ihr meine Antwort erreicht euch noch

Rainer: Ich denke schon, dass ich den Debugger kenn. Das is wenn ich mit F8 die einzelnen zeilen durchlaufen lass oder bei der Fehlermeldung auf Debugg drück, um den Fehler anzeigen zu lassen, oder?

Reinhard:
Ich hab zwar keine Ahnung warum, aber plötzlich funktionierts… Ich hab nur den Typ bei introw von integer auf long geändert und schon gings…obwohl ich grad mal bei zeile 30 bin krass.

danke du zauberer :smile:

LG uschi

Hallo Uschi,

Sorry Rainer und Reinhard, hatte grade viel Stress an der
Arbeit. Hoffe Ihr meine Antwort erreicht euch noch

aber sicher doch. :smile:

Rainer: Ich denke schon, dass ich den Debugger kenn.
Das is wenn ich mit F8 die einzelnen zeilen durchlaufen lass
oder bei der Fehlermeldung auf Debugg drück, um den Fehler
anzeigen zu lassen, oder?

Ja. Wenn Du dann den Mauszeiger auf eine Variable stellst, geht ein ToolTippText auf, in dem der aktuelle Inhalt der Variablen steht und genau der interessierte uns.

plötzlich funktionierts…

Na wunderbar! :smile:

Gruß, Rainer

Ja. Wenn Du dann den Mauszeiger auf eine Variable stellst,
geht ein ToolTippText auf, in dem der aktuelle Inhalt der
Variablen steht und genau der interessierte uns.

Achso. Alles klar.
OK. Das wusst ich noch nt Wieder was gelernt :smile:

LG Uschi