Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4320 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
VB for Applications
Excel VBA Sortierung von Daten (4)

Frage von easy4breezy zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Microsoft Office
Excel VBA: Tranferieren von Werten aus Quelldatei in die Masterdatei mit SVERWEIS (3)

Frage von peter.schroeder zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...