Microsoft Excel

Herbers Excel/VBA-Archiv

erste freie Zelle: stehe am Schlauch

    Betrifft: erste freie Zelle: stehe am Schlauch von: Franz W.
    Geschrieben am: 05.10.2003 20:54:39

    Hallo Fachleute,

    ich stehe auf dem Schlauch mit folgendem Teilcode:


    With Worksheets("aktive_kunden")
    .Columns(1).ClearContents
    .Range("A1") = "Nr."
    loLetzte = 65536
    If .Range("A65536") = "" Then loLetzte = .Range("A65536").End(xlUp).Row
    End With

    Spalte A wird gelöscht, dann wird in A1 was eingetragen ("Nr."). Und "loLetzte" sollte jetzt eigentlich "2" sein!! Ist aber "1"!! Ist übrigens auch "1", wenn ich in A1 nichts eintrage!! Da kommt für "loLetzte" auch "1" raus!! Ich versteh's nicht und komm nicht dahinter und bitte Euch um Eure Hilfe.

    Grüße
    Franz

      


    Betrifft: AW: erste freie Zelle: stehe am Schlauch von: Ramses
    Geschrieben am: 05.10.2003 20:58:44

    Hallo Franz,

    beides ist korrekt. Es gibt keine Zeile 0 :-)
    Verwende

    loLetzte = .Range("A65536").End(xlUp).Row + 1

    Gruss Rainer


      


    Betrifft: AW: erste freie Zelle: stehe am Schlauch von: Christoph
    Geschrieben am: 05.10.2003 21:02:13

    Hi Farnz,
    der Ausdruck: "Range("A65536").End(xlUp).Row" oder auch "Cells(Rows.Count, 1).End(xlUp).Row" gibt (von unten nach oben gezählt) die Zeile in der Spalte A mit dem letzten Entrag. Da es keine Zeile über Zeile 1 gibt ist bei einer leeren Spalte die "loLetzte" die Zeile 1. Wenn du die nächste freie Zeile haben willst dann schreib: "loLetzte +1"

    Gruß
    Christoph


      


    Betrifft: AW: erste freie Zelle: stehe am Schlauch von: PeterW
    Geschrieben am: 05.10.2003 21:05:42

    Hallo Franz,

    mal ne ganz dumme Frage: wenn du die Spalte löschst warum willst du, nachdem in A1 etwas geschrieben wurde, die letzte Zelle suchen? Je nachdem wass du vor hast setze loLetzte doch direkt auf 2.

    Gruß
    Peter


      


    Betrifft: AW: erste freie Zelle: stehe am Schlauch von: Franz W.
    Geschrieben am: 05.10.2003 21:20:49

    Hallo Peter,

    eigentlich hast Du recht. Aber im folgenden zähle ich loLetzte in einer For-Schleife weiter (übrigens mit Deiner Hilfe von vorhin) und verwende es dann noch mal:

    For Each NrZel In KdBereich
    If IsNumeric(NrZel) And Not NrZel = "" And NrZel <= 999 Then
    ' If IsNumeric(NrZel) And Not NrZel = "" And Len(NrZel) <= 3 Then
    NrZel.Copy Destination:=Worksheets("aktive_kunden").Cells(loLetzte, 1)
    loLetzte = loLetzte + 1
    End If
    Next
    ActiveWorkbook.Names("NurAktive").Delete
    ActiveWorkbook.Names.Add Name:="NurAktive", RefersToR1C1:= _
    "=aktive_kunden!R1C1:R" & loLetzte - 1 & "C4"

    Grüße
    Franz


      


    Betrifft: AW: erste freie Zelle: stehe am Schlauch von: PeterW
    Geschrieben am: 05.10.2003 21:30:26

    Hallo Franz,

    verstehe dein "Aber" nicht. Es ist doch egal, ob du eine Variable berechnest oder direkt zuweist:

    With Worksheets("aktive_kunden")
    .Columns(1).ClearContents
    .Range("A1") = "Nr."
    loLetzte = 2
    End With

    sollte deine nachfolgende Schleife nicht nachteilig beeinflussen. Anders ausgedrückt: warum willst du den Code arbeiten lassen wenn du das Ergebnis schon kennst, schneller wird er dadurch bestimmt nicht. ;-)

    Gruß
    Peter


      


    Betrifft: Stimmt! von: Franz W.
    Geschrieben am: 05.10.2003 21:38:35

    Hallo Peter,

    jetzt hast Du doch wieder das letzte Wort :-)), und ich lass es Dir gerne, es stimmt nämlich! (war nicht so ernst gemeint, weiß schon dass es Dir darum nicht geht!) Bei Deinem Tipp dachte ich zuerst daran, loLetzte durch 2 zu ersetzen. Darum mein Einwand, dass ich's ja noch brauche. Aber Du hast ja geschrieben: "setze loLetzte auf 2", und da hab ich wohl nur etwas schlampig drüber gelesen.

    Vielen Dank und Grüße
    Franz


      


    Betrifft: Noch was dazugelernt heute abend :-)) von: Franz W.
    Geschrieben am: 05.10.2003 21:16:43

    VIELEN DANK EUCH ALLEN !! Da hätt ich noch ne Weile gesucht...

    Einen schönen Abend und Grüße
    Franz