Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Überprüfung eines Codes


Betrifft: Überprüfung eines Codes von: Michael
Geschrieben am: 18.01.2019 17:28:27

Hallo Allerseits
Ich finde leider den Fehler nicht.
Der nachfolgende Code soll in einem Sheet überprüfen ob in Zeile 91 irgendetwas steht. Wenn dort etwas steht, dann fügt er 3 neue Zeilen ein, kopiert aus einem anderen Sheet, 3 Überschriften –Zeilen und fügt diese in die neuen Zeilen ein. Dieser Vorgang wird dann alle weiteren 42 Zeilen wiederholt, solange bis der Code leere Zeilen findet.
Das Problem ist, das der Code in jedem Fall in Zeile 91 Überschriften einfügt, auch wenn dort nichts steht. Ab dem zweiten Mal Überschriften einfügen, funktioniert der Code, wie erwartet.
Vielen Dank für eure Hilfe und Gruß
Michael

  • Sub Überschriften()
    Dim loStart As Long
    
     Application.ScreenUpdating = False
     With Worksheets("Arbeitsaufwand")
     loStart = 91
     If Cells(loStart, 1) = "" Then GoTo Ende
        Do
            If loStart > 91 Then loStart = loStart + 3
            Worksheets("Tabelle1").Rows("1:3").Copy
            .Rows(loStart).Insert
            Application.CutCopyMode = False
            loStart = loStart + 42
        Loop While .Cells(loStart, 1) <> ""
     End With
    Ende:
     Application.ScreenUpdating = True
    End Sub


  •   

    Betrifft: AW: Überprüfung eines Codes von: onur
    Geschrieben am: 18.01.2019 17:57:10

    "loStart = loStart + 42" - Soll direkt zum Ende springen?


      

    Betrifft: AW: Überprüfung eines Codes von: Luschi
    Geschrieben am: 18.01.2019 19:03:39

    Hallo Michael,

    dieser Befehl: If loStart > 91 Then loStart = loStart + 3 kommt viel zu spät, da wurden
    schon 3 Zeilen eingefügt und aus 91 ist Zeile 94 geworden, deshalb so:

    Sub Ueberschriften()
     Dim loStart As Long
     
      Application.ScreenUpdating = False
      With Worksheets("Arbeitsaufwand")
      loStart = 91
      If Cells(loStart, 1) = "" Then GoTo Ende
         Do
             'If loStart > 91 Then loStart = loStart + 3
             Worksheets("Tabelle1").Rows("1:3").Copy
             .Rows(loStart).Insert
             Application.CutCopyMode = False
             loStart = loStart + 3 + 42
         Loop While .Cells(loStart, 1) <> ""
      End With
    Ende:
      Application.ScreenUpdating = True
     End Sub
    Gruß von Luschi
    aus klein-Paris


      

    Betrifft: AW: Überprüfung eines Codes von: Michael
    Geschrieben am: 19.01.2019 14:59:35

    Hallo und vielen Dank für das Interesse an meiner Anfrage, und sorry für die späte Rückmeldung. War leider in der Zwischenzeit PC los.

    @onur und Luschi

    "loStart = loStart + 42" springt nicht gleich zum Ende und
    "loStart = loStart + 3 + 42" ist auch nicht die Lösung

    Nocheinmal die Beschreibung meines Problems mit anderen Worten: Eine Druckseite meiner Liste, umfasst 45 Zeilen. Die ersten beiden Seiten gibt es in jedem Fall. (Also 90 Zeilen) Der Code soll einfach überprüfen ob in Zeile 91 Spalte A "Cells(loStart, 1)" Text vorhanden ist oder nicht. Wenn dort Text ist, werden 3 Überschriften-Zeilen für die Dritte Druckseite eingefügt, anschließend prüft der Code ob 42 Zeilen tiefer immer noch Text steht (Mit Überschriften wieder 45 Zeilen = 1 Druckseite) und fügt wenn Text da ist wieder 3 Überschriften-Zeilen ein, für die 4.Druckseite. Erst wenn er auf keinen Text mehr trifft, wird nichts mehr eingefügt und der Code ist beendet.
    Wenn in Zeile 91 Text ist, läuft auch alles wie erwartet. Nur wenn in Zeile 91 kein Text ist, fügt der Code trotzdem Überschriften ein. Aber auch nur in Zeile 91, die restliche Routine (also der Loop ab Zeile 135) prüft dann wieder korrekt. Meiner Vermutung nach, ist der Fehler irgendwo hier:
    " If Cells(loStart, 1) = "" Then GoTo Ende" oder kann es sein das noch irgendwo ein "End IF" eingefügt werden muss?

    Viele Grüße
    Michael


      

    Betrifft: AW: Überprüfung eines Codes von: Piet
    Geschrieben am: 19.01.2019 16:30:48

    Hallo Michael

    ohne den ganzen Thread gelesen zu haben nur zur Goto Frage ein klares NEIN
    IF Then GoTo Ende - ist ein -Sprungbefehl- zum Label "Ende", da gibt es KEIN End İf!
    Im Fehlerfall meckert Excel durch Laufzeitfehler das er die Sprung-Adresse "Ende" nicht finden kann, mehr nicht!

    Dieser Sprungbefehl überspringt den ganzen anderen Code, bis zum Label Ende, der wir NICHT ausgeführt!!
    Benötigt wird er aber wenn zum Schluss wichtige Befehle stehen wie - Application.EnableEvetns = True
    Wo bestimmte Eigenschaften von Excel wieder in den -Urzustand zurückgesetzt- werden müssen!!

    Dann kann man IF Then xxx Exit Sub nicht nehmen! - Weil diese Eigenschaften dauerhaft verstellt bleiben!

    mfg Piet


      

    Betrifft: AW: Überprüfung eines Codes von: Michael
    Geschrieben am: 19.01.2019 17:13:20

    Hallo Piet

    Zitat:
    IF Then GoTo Ende - ist ein -Sprungbefehl- zum Label "Ende". Dieser Sprungbefehl überspringt den ganzen anderen Code, bis zum Label Ende, der wir NICHT ausgeführt!!

    Genau das soll er ja tun, wenn in Zeile 91 kein Text vorhanden ist

    Ende:
         Application.ScreenUpdating = True
        End Sub

    Aber die Prüfung = "" wird ignoriert, und es werden Überschriften eingefügt.

    Viele Grüße
    Michael


      

    Betrifft: AW: Überprüfung eines Codes von: Piet
    Geschrieben am: 19.01.2019 17:27:52

    Hallo Michael

    ich habe gerade einen langen Text geschrieben was du alles prüfen kannst, aber ich glaube der Fehler liegt nur bei einem Punkt!!
    Der fehlt in der With Klammer!! - If Cells(loStart, 1) = "" Then GoTo Ende - Wo ist hier der Punkt vor If .Cells() ????

    mfg Piet


      

    Betrifft: AW: Überprüfung eines Codes von: Michael
    Geschrieben am: 19.01.2019 17:45:55

    Hallo Piet

    Habs mit Punkt ausprobiert. Nun läuft alles einwandfrei. Ein einziger Punkt fehlt! Mir wäre das nicht aufgefallen. Es gab auch nie irgendwelches gemecker oder so. Excel hat den Teil einfach ignoniert.

    Vielen, vielen Dank

    Gruß
    Michael


      

    Betrifft: AW: Überprüfung eines Codes von: Piet
    Geschrieben am: 20.01.2019 03:14:30

    Hallo Michael

    danke für die Rückmeldung, freut mich das der Code jetzt einwandfrei laueft. Ignoriert hat es Excel NICHT!

    Heimtücke der With Klammer:
    Sie erleichtert die Programmier Arbeit sehr, ich nutze sie oft. Vergisst man den Punkt funktioniert der Code solange -einwandfrei- wie das Aktive Sheet mit der With Klammer identisch ist! Wechselst du das Blatt holt Excel sich den Vergleichswert aus dem aktiven Blatt! Genau das ist bei dir passiert, deswegen klappt der Code dann manchmal, und mal nicht! Ich habe nur mehr Erfahrung beim Suchen!

    mfg Piet


    Beiträge aus dem Excel-Forum zum Thema "Überprüfung eines Codes"