Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
852to856
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

For Next mit Abbruchsbedingung?

For Next mit Abbruchsbedingung?
11.03.2007 13:53:00
Thomas
Hai,
ich versuche grade etwas Code zu optimieren.
Bisher habe ich da noch nichts zu gefunden, aber kann man bei einer For Next Schleife direkt in den Schleifenkopf eine Abbruchbedingung einbauen?
Also im Stil von
For z = 20000 To 1 Step -1 While Cells(z,1)""
Next z
Oder geht sowas nur im Stil von
z=20000
Do While Cells(z,1)""
z=z-1
Loop
Hmm, irgendwie ist mein Hauptproblem im Moment glaube ich noch - wo finde ich was...
Gibt es irgendwie/irgendwo unter Excel eine Liste wo alle Befehle aufgelistet sind? Bisher kämpfe ich mich immer durch Beispiele (mit Google) um Syntaxi zu finden...
Tommi

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW:
11.03.2007 14:04:57
Daniel
Hallo
im Schleifenkopf nicht, aber innerhalb der Schleife kannst du überall ein
if ... Then Exit For
einbauen, was die Schleife beendet.
Der Zähler behält den Wert, den er beim Abbruch hat.
Gruß, Daniel
Fett machen mehrerer Zellen
11.03.2007 17:23:21
Thomas
Hallo Daniel,
danke, okay, so hab ich es nun gelöst, ich hatte halt gehofft, dass man es noch eleganter und übersichtlicher mit einer direkten Abbruchsbedingung in der FOR-Zeile hätte lösen können.
Aber eine If-Abfrage geht natürlich genauso.
Noch eine andere Frage:
For q = 1 To AnzFragen
Range(Cells(Frage(q,2,1),1)).Select
Selection.Font.Bold = True
Next q
Geht nicht, da kommt eine Fehlermeldung im Stil von 'Laufzeitfehler 1004' - 'die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen. Sowas wie
Range("A1").Select
Selection.Font.Bold = True
klappt aber. Warum geht sowas in einer Schleife nicht? Oder ist der Range-Befehl dazu untauglich? In Frage(q,2,1) ist die Zeilennummer der gewünschten Zeile die Fett gemacht werden soll.
Irgendwie habe ich glaube ich noch nicht genau verstanden, wann man "A1" und/oder Cells(1,1) einsetzt...
Tommi
Anzeige
AW: Fett machen mehrerer Zellen
11.03.2007 17:35:00
Josef
Hallo Tommi,

Cells(Frage(q,2,1),1).Font.Bold = True

Wobei ich davon ausgehe, das "Frage(q,2,1)" die Zeilennummer zurückgibt.
Und das "Selectieren" gewöhnen wir uns aber ganz rasch wieder ab, ja?! ;-))
Gruß Sepp
AW: Fett machen mehrerer Zellen
11.03.2007 17:52:32
Daniel
Hallo
ganz einfach:
mit Cells(x,y) beziehst du dich immer auf eine einzelne Zelle, die du mit den beiden Parameteren REIHE und SPALTE genau berschreibst.
mit RANGE("...") beziehst du dich auf einen Zellbereich, der eine, aber auch mehrer Zellen umfassen kann.
Eingabeparameter für RANGE ist entwerder
- ein Textstring, der der Zelladdresse in der A1-Schreibweise entspricht, oder
- zwei Einzelzellen, die die Ecke oben links bzw unten rechts des Zellbereiches definieren. (Beispiele unten)
das heißt, in deinem Fall müsstest du korrekt schreiben:

Range(Cells(Frage(q,2,1),1).address).Select

weil Cells(Frage(q,2,1),1).address = "A1" den Textstring liefert, den Range benötigt.
allerdings ist das völlig überflüssig, solange du Einzelzellen arbeitest, sind Cells() und Range() gleichwertig, dh. du kannst gleich schreiben

For q = 1 To AnzFragen
Cells(Frage(q,2,1),1).Font.Bold = True
Next q

Gruß, Daniel
PS. Das select kann man sowieso in 99,99% aller Fälle weglassen und sollte dies auch tun.
Beispiel Range, 2 Möglichkeiten, den Zellbereich von A1 bis B10 mit Range zu beschreiben
  • Fall eins mit Zelladdresse:
    Range("A1:B10")

  • Fall 2 mit 2 Zellen:
    Range(Cells(1,1), Cells(10,2))

  • Anzeige
    ALLES kopieren in ein anderes Arbeitsblatt?
    12.03.2007 02:05:00
    Thomas
    Daniel, Josef,
    DANKE!!! Nun ist mir einiges klarer und nach langer Bastelei blicke ich nun mehr und mehr durch ;)
    Mein ganzer Formatkram ist nun erledigt, nun habe ich nur noch ein Problem.
    Wie kopiere ich z.b. den Bereich von A30 bis K52 vom aktuellen Arbeitsblatt in das (automatisch angelegt habe ich die schon) Arbeitsblatt, dessen Name in Frage(q,1) steht?
    q ist die Laufvariable, die durch alle Fragen läuft.
    Es sollte aber alles, also Rahmen, Hintergrund, Werte usw. (Formeln/Bezüge gibt es eig. keine) kopiert werden. Gibts da auch noch einen einfachen Trick? Im Zielblatt sollten die Sachen aber auch immer! in A1 anfangen...
    Oder kann man es sogar noch einfacher machen und einen Bereich angeben und dem sagen, in welches Arbeitsblatt er wandern soll und dabei das Blatt direkt in einem Aufwasch mit anlegen? Wie gesagt, Ziel sollte dann A1 anfangen.
    Tommi
    Anzeige
    Ohne Select arbeiten?
    12.03.2007 06:58:00
    Thomas
    Huhu Daniel,
    interessant finde ich das in der eingeblendeten 'SofortSyntaxHilfe' von Excel immer Cell statt Cells angezeigt wird, das find ich auch etwas verwirrend, denn es funktioniert ja damit auch nicht. Aber das nur am Rande.
    Wenn man Select aber nicht einsetzen soll, wie macht man sowas ohne Select?
    'Spaltenweite in A setzen
    Columns("A:A").Select
    Selection.ColumnWidth = 45
    Oder
    'Spalte einfügen (oz/us/uz/us sind die 4-Eckwerte für x+y-Koordinaten des Bereichs) Finde ich aber sowieso komisch, dass bei einem 'globalen' Spalteneinfügen nicht eine Spalteninfo reicht NACH/VOR der man eine weitere Spalte einfügen will und dann vlt. noch die Breite der einzufügenden Spalte mit übergeben werden kann
    Range(Cells(oz, us + 1), Cells(uz, us + 1)).Select
    Selection.Insert Shift:=xlToRight
    geht, sowas wie
    Range(Cells(oz, us + 1), Cells(uz, us + 1)).Insert Shift.xlToRight ; Selection.ColumnWidth = 45
    geht ja leider nicht :)
    Oder geht sowas dann auch irgendwie in einer Zeile und ohne Select? Habe da schon mal ein bisserl mit rumexperimentiert, aber bisher hat nichts geklappt.
    Tommi
    Anzeige
    AW: Ohne Select arbeiten?
    12.03.2007 21:27:00
    Josef
    Hallo Thomas,
    hier zwei Beispiele wie das ohne Select geht.
    ' **********************************************************************
    ' Modul: Modul1 Typ: Allgemeines Modul
    ' **********************************************************************

    Option Explicit

    Sub Beispiel_Kopieren()
    Dim objSh As Worksheet

    Set objSh = Workbooks.Add(xlWBATWorksheet).Sheets(1) 'Zieltabelle

    ThisWorkbook.Sheets("Tabelle1").Range("A30:K52").Copy 'Quelltabelle

    With objSh.Range("A1")
        .PasteSpecial xlAll 'Werte, Formeln und Formatierungen
        .PasteSpecial 8 'Spaltenbreite
    End With

    Application.CutCopyMode = False

    Set objSh = Nothing

    End Sub


    Sub Beispiel_Spalten()
    Dim us As Integer, os As Integer

    us = 2
    os = 5

    With ThisWorkbook.Sheets("Tabelle1")
        
        .Columns(1).ColumnWidth = 3 'Spaltenbreite einer einzelnen Spalte
        
        .Columns("H:K").ColumnWidth = 5 'Spaltenbreite mehrerer Spalten
        
        'Spalten Einfügen und Breite anpassen
        With .Range(.Cells(1, us), .Cells(1, os)).EntireColumn
            .Insert xlToRight
            .ColumnWidth = 1
        End With
        
    End With
    End Sub

    Gruß Sepp
    Anzeige
    AW: Ohne Select arbeiten?
    13.03.2007 00:07:00
    Daniel
    Hallo
    mir sind bisher nur 2 Fälle bekannt, die zwingend ein Select erfordern.
    - Fenster fixieren (weil man nur so festlegen kann, welche Zeile Fixiert wird)
    - Bedingte Formatierung setzten (weil sich die relativen Zellbezüge der Formel auf die gerade aktive Zelle beziehen
    manchmal ist es ganz praktisch mit SELECTION zu arbeiten, wenn man ein Objekt eingefügt hat, ist es erstmal selektiert, wenn ich dann dessen Eigenschaften noch verändern will, ist es natürlich am einfachsten mit SELECTION.xxx = yyy zu arbeiten.
    ansonsten geht eigentlich alles ohne select.
    Columns("A:A").ColumnWidth = 45
    Range(Cells(oz, us + 1), Cells(uz, us + 1)).Insert Shift:=xlToRight
    beim letzten Problem stellt sich die Frage, für welche Spalte du die Breite neu bestimmen willst,
    für die Zellen, die du neu eigefügt hast, dann so:
    Range(Cells(oz, us + 1), Cells(uz, us + 1)).Insert Shift:=xlToRight
    Range(Cells(oz, us + 1), Cells(uz, us + 1)).ColumnWidth = 45
    wenn du die Breite der nach rechts verschobenen Zellen ändern willst, dann so:
    with Range(Cells(oz, us + 1), Cells(uz, us + 1))
    .Insert Shift:=xlToRight
    .ColumnWidth = 45
    end with
    Wie du siehts, es geht fast alles ohne Select und so sollte man es auch schreiben, weil die ganze selectierei macht deine Code langsam und man verliert leicht den Überblich, was man jetzt eigentlich bearbeitet.
    Gruß, Daniel
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige