Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

EXCEL - VBA For-Schleifen Problem

Frage Microsoft Microsoft Office

Mitglied: Avalon1

Avalon1 (Level 1) - Jetzt verbinden

22.06.2010 um 17:12 Uhr, 4414 Aufrufe, 3 Kommentare

Meine For-Schleife läuft trotz Überschreitung der Prüfwerte einfach weiter !?!

Hello

und zwar habe ich folgenden Code:



Private Sub Daten_bereinigen()

Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Activate

Dim AktuelleZelle As Long

Dim LetzteZelle As Long
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row


For AktuelleZelle = 2 To LetzteZelle

If Not IsNull(Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Range("A" + Trim(Str(AktuelleZelle)))) Then
If IsEmpty(Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Range("A" + Trim(Str(AktuelleZelle)))) Then
If AktuelleZelle < LetzteZelle Then
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row
Rows(AktuelleZelle).Delete
AktuelleZelle = AktuelleZelle - 1
End If
End If
End If

Next AktuelleZelle

End Sub



Mein Problem ist dass die For-Schleife nicht aufhört zu laufen,
obwohl ich bei jedem Durchlauf die LetzteZelle verringere
und die Aktuelle Zelle erhöhe.

Ich hoffe Ihr könnt mir hier helfen!

LG
Mitglied: bastla
22.06.2010 um 18:44 Uhr
Hallo Avalon1!

Den Wert der Schleifenvariablen oder den Endwert einer "laufenden" "For-Next"-Schleife zu verändern ist eigentlich niemals eine gute Idee - andere Schleifentypen eignen sich in solchen Fällen besser.

Neben einigen Vereinfachungen (das Tabellenblatt wird ja ohnehin schon vorweg aktiviert und muss deshalb nicht nochmals angegeben werden, und anstelle der "Zusammenbastelei" der Adresse für "Range" bietet sich in solchen Fällen "Cells" an) würde ich auf eine "Do-While"-Schleife umstellen (die Variablennamen mit "Zelle" anstatt des eher entsprechenden "Zeile" habe ich beibehalten):
01.
Private Sub Daten_bereinigen() 
02.
 
03.
Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Activate 
04.
 
05.
Dim AktuelleZelle As Long 
06.
 
07.
Dim LetzteZelle As Long 
08.
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row 
09.
AktuelleZelle = 2 
10.
 
11.
Do While AktuelleZelle <= LetzteZelle 
12.
    If Not IsNull(Cells(AktuelleZelle, "A")) Then 
13.
        If IsEmpty(Cells(AktuelleZelle, "A")) Then 
14.
            Rows(AktuelleZelle).Delete 
15.
            LetzteZelle = LetzteZelle - 1 
16.
            AktuelleZelle = AktuelleZelle - 1 
17.
        End If 
18.
    End If 
19.
    AktuelleZelle = AktuelleZelle + 1 
20.
Loop 
21.
End Sub
Grüße
bastla

P.S.: Hinsichtlich der Notwendigkeit der "IsNull"-Prüfung habe ich leichte Zweifel ...
Bitte warten ..
Mitglied: Avalon1
25.06.2010 um 21:21 Uhr
Super!!

Danke dir bastla

Habs hinbekommen mit deiner Hilfe!!

....das mit der "IsNull" Prüfung war ziemlich unnötig !!


Hätt da noch ein kleines Problem
und zwar hab ich jetzt eine Eingabe von Jahr und Monat.
Jahr darf nur über 2010 sein und beim Monat muss zB: Jänner so geschrieben werden Jaenner
sonst findet die Methode die Datei nicht!
Mein Code schaut bis dato so aus:



Private Sub TestEingabe()

EingabeJahr = Application.InputBox("Bitte eine Jahreszahl eingeben" & vbCrLf & vbCrLf & "Auswertung erst ab Jaenner 2010 moeglich!.", "Eingabe des Jahres (ab 2010 !!)")
EingabeMonat = Application.InputBox("Bitte einen Monatsnamen eingeben." & vbCrLf & vbCrLf & "!! ACHTUNG !!" & vbCrLf & "Eingabe von ä nicht möglich!" & vbCrLf & "Bitte Eingabe von ae ", "Eingabe des Monat")

If EingabeJahr >= 2010 Then
Select Case EingabeMonat
Case "Jaenner" Or "Februar" Or "Maerz" Or "April" Or "Mai" Or "Juni" Or "Juli" Or "August" Or "September" Or "Oktober" Or "November" Or "Dezember"
Jahr = EingabeJahr
Monat = EingabeMonat
Case Else
MsgBox "Monat nicht korrekt eingegeben" & vbCrLf & "Auswertung wird geschlossen", vbOKOnly, Title:="Fehleingabe"
End Select
Else
MsgBox "Jahr muss 2010 oder höher sein" & vbCrLf & "Auswertung wird geschlossen", vbOKOnly, Title:="Fehleingabe"
End If

Debug.Print Jahr
Debug.Print Monat

End Sub


Mein Problem ist dass die MsgBox bei dem Select Case nicht kommt wenn man den Monat falsch eingibt !!!

Ausserdem wäre es schöner wenn nach einer Fehleingabe die Eingabe nochmals gestartet wird
und man so oft Eingeben muss bis man "richtige" Werte gibt .. ich weiß da gibts bei Java einen Trick
aber ist schon ein paar Jahre her als ich dass gemacht habe und ich find nix im Google....
vielleicht kannst du mir hierbei auch einen kleinen Tipp geben.....wär dir dankbar!!

LG
ava

PS: frage wie machst du das dein Code in einer "box" angezeigt wird?
Bitte warten ..
Mitglied: bastla
25.06.2010 um 23:26 Uhr
Hallo Avalon1!

Ich würde als Eingabe des Monats einfach eine Zahl verlangen und dann daraus den Monatsnamen in der benötigten Form erzeugen - etwa so:
01.
Sub Eingabe() 
02.
Do 
03.
    OK = True 
04.
    Abbruch = False 
05.
    EingabeJahr = InputBox("Bitte eine Jahreszahl eingeben" & vbCrLf & vbCrLf & "Auswertung erst ab Jaenner 2010 moeglich!.", "Eingabe des Jahres (ab 2010 !!)") 
06.
    If IsNumeric(EingabeJahr) Then 'Zahl für Jahr eingegeben? 
07.
        Jahr = CInt(EingabeJahr) 
08.
        If Jahr = 0 Then 
09.
            Abbruch = True 
10.
        Else 'Jahr nicht 0 
11.
            If Jahr < 2010 Then 
12.
                OK = False 
13.
            Else 'Jahr mindestens 2010 
14.
 
15.
                Do 'Schleife Monatseingabe 
16.
                    OKMon = True 
17.
                    EingabeMonat = InputBox("Bitte eine Monatszahl (1 - 12) eingeben." & vbCrLf & vbCrLf, "Eingabe des Monat") 
18.
                    If IsNumeric(EingabeMonat) Then 'Zahl für Monat eingegeben? 
19.
                        Mon = CInt(EingabeMonat) 
20.
                        If Mon = 0 Then 
21.
                            Abbruch = True 
22.
                        Else 'Monat nicht 0 
23.
                            If Mon < 1 Or Mon > 12 Then 
24.
                                OKMon = False 
25.
                            Else 'Monat zwischen 1 und 12 
26.
                                Monat = Replace(MonthName(Mon), "ä", "ae") 
27.
                            End If 
28.
                        End If 
29.
                    Else 'keine Zahl für Monat eingegeben 
30.
                        OKMon = False 
31.
                    End If 
32.
                Loop Until OKMon Or Abbruch 
33.
                 
34.
            End If 
35.
        End If 
36.
        Else 'keine Zahl für Jahr eingegeben 
37.
            OK = False 
38.
    End If 
39.
     
40.
Loop Until OK Or Abbruch 
41.
If Abbruch Then 
42.
    MsgBox "Na gut, dann nicht ..." 
43.
Else 
44.
    MsgBox "Gewählt: " & Monat & " " & Jahr 
45.
End If 
46.
End Su
... so oft Eingeben muss bis man "richtige" Werte gibt
Um nicht ganz so "brutal" zu sein: Bei Eingabe von "0" (für Jahr oder Monat) wird die Eingabeschleife abgebrochen (ein Hinweis in der "InputBox" wäre dann auch noch sinnvoll) ...

Das Ergebnis von "MonthName()" müsste eigentlich von der Ländereinstellung in der Systemsteuerung abhängig sein - kannst Du mit einer kleinen Schleife im Direktbereich kontrollieren:
For i = 1 To 12: ? MonthName(i): Next
Grüße
bastla

P.S.: Schön, dass Du nach der Formatierung als "Code" fragst ...
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Problem bei einer For Schleife
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo Ich komme nicht dahinter ist sicher nur ein kleines Problem, aber es wird keine Ausgabe gemacht Eigentlch willich ...

Microsoft Office
Excel 2010 VBA Schleife mit Bedingungen
gelöst Frage von yonko22147Microsoft Office3 Kommentare

Hallo, Sorry ich stehe sowas von auf dem Schlauch das mir die einfachsten Sachen nicht mehr einfallen. Ich habe ...

Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell
FOR Schleife mit LOOP und nachfolgender FOR Schleife
gelöst Frage von miczarBatch & Shell6 Kommentare

Hallo zusammen, ich habe ein Problem mit einem Batchfile. Situation: im Netzwerk ist kein WINS mehr vorhanden und so ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 3 StundenWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 11 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 11 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1012 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server23 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Exchange Server
Exchange empfängt Emails - Kann aber keine Senden
gelöst Frage von niklasschaeferExchange Server11 Kommentare

Hallo, ich stehe gerade bei mir zuhause vor folgender Problemstellung. Gegeben sind 2x Hyper-V Host mit Windows Server 2016 ...