Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

ForNext-Schleife
#1
Das versteh doch wer will!
Bin gerade dabei, mit ForNext-Schleifen herumzuprobieren. Ich hab mir auch schon ein Sortiermakro gebastelt, welches funtioniert, wie es soll.
Jetzt habe ich die Essenz des Makros rauskopiert und in ein ganz jungfräuliches Excel-Arbeitsblatt reingesetzt. Beim ersten Click auf die Schaltfläche bleibt das Makro in Zeile 7 stehen und selektiert nur den Bereich für die erste Zeile. Erst beim zweiten Click zeigt es den gesamten Tabellenbereich.Hat jemand 'ne Ahnung wieso?


Code:
Sub Schaltfläche2_BeiKlick()

Dim i As Integer

For i = 7 To ActiveSheet.UsedRange.Rows.Count
Next i

    Range("A2") = i
    Range("A7:J" & i).Select
    Range("A7:J" & i).Activate

End Sub
Antworten Top
#2
Hallo,

wenn ich es richtig verstehe, ist das Tabellenblatt beim ersten Mal komplett leer. Die For-Schleife wird daher nicht durchlaufen.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Zitat:wenn ich es richtig verstehe, ist das Tabellenblatt beim ersten Mal komplett leer. Die For-Schleife wird daher nicht durchlaufen.

...na eben nicht!

Ich hänge mal zwei Fotos mit ran.

Ursprünglich sieht die Tabelle so aus, wie Du sie auf den Fotos siehst.

Nach einem click auf die Schaltfläche zeigts mir Fall 1 an und in A2 gibts die 7 aus. Erst nach einem weiteren Click aktiviert es mir des gesamten Berich (Fall2) und git auch für i die 11 aus.

Huh


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#4
Hallo,

lass das mal in einem neuen leeren Blatt laufen:
Sub Schaltfläche2_BeiKlick()

   Dim i As Integer
   ActiveSheet.UsedRange.Select
   MsgBox ActiveSheet.UsedRange.Rows.Count
   
   Range("A7:A9") = "x"
   ActiveSheet.UsedRange.Select
   MsgBox ActiveSheet.UsedRange.Rows.Count
   
   For i = 7 To ActiveSheet.UsedRange.Rows.Count
   Next i
   Range("A2") = i
   Range("A7:J" & i).Select
   MsgBox ActiveSheet.UsedRange.Rows.Count

   For i = 7 To ActiveSheet.UsedRange.Rows.Count
   Next i
   Range("A7:J" & i).Select
   MsgBox ActiveSheet.UsedRange.Rows.Count

End Sub
Du wirst sehen, dass der Benutzte Bereich nicht unbedingt in der ersten Zeile beginnt.

Gruß Uwe
Antworten Top
#5
Moin,
das Problem liegt etwas tiefer ... Nämlich im Missverständnis, dass
Code:
UsedRange.Rows.Count

die Nummer der letzten Zeile ausgibt. Setze mal genau in dieser FOR - Zeile einen Haltepunkt und beim ersten Durchlauf des Makros erkunde den Wert dieses oben aufgeführten Ausdrucks. Upps, da kommt ja 5 raus! Stimmt, es sind ja auch nur 5 Zeilen im UsedRange. Darum die bessere Variante:

Code:
Sub GMG()
  Dim i As Integer, lRow As Integer   'lastRow
 
  lRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
  'For i = 7 To ActiveSheet.UsedRange.Rows.Count  ' -> 7 To 4 geht nicht SO (nur mit Step
  For i = 7 To lRow '-> 7 To 11 :-)
  Next i

  Range("A2") = i
  Range("A7:J" & i).Select
  Range("A7:J" & i).Activate
End Sub

Und jetzt eine Frage an dich: Das Ergebnis ist wirklich korrekt, aber warum 12 Huh
Das musst du dir erarbeiten, weil das eine absolute Grundlage von Zählschleifen ist (und auch die meiste Denk-Falle).
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#6
Hab zwar gerade viel um die Ohren, werde aber in den nächsten Tagen mal eure ganzen Alternativen durcharbeiten.

Komisch ist nur, daß ich schon zwei Makros auf der Basis dieses UsedRange.Rows.Count geschrieben habe, die auch genau das tun, was sie sollen. Doch wenn man sich das Ganze mal genauer anschaut, tun sie es nicht mehr zumal ja dieses UsedRange.Rows.Count von der Aussage her ziemlich eindeutig ist.

Aber was solls! :15:
Antworten Top
#7
Hallo,

wir haben keine Alternativen gezeigt.
Es ging eher darum, Dir zu zeigen, dass UsedRange unzuverlässig ist.
Dass es bisher funktionierte, war Zufall.

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste