vb code im Hintergrund ausführen

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    vb code im Hintergrund ausführen

    hallo,
    habe kur vor weichnachten noch ein Problem
    ich kopiere jeder Wert einer markierten Zeile von einem Quellblatt zu einem Zielblatt
    ich möchte aber mein code im hintergrund laufen lassen da ich kein gezappeln am Bilschirm sehen darf: ich habe erfolglos selber schon probiert und auch schon gegooglet .
    ich habe gelesen mit "With sheet...end With" geht das. aber da ich dadrin noch weitere schleifen wie for each und if else habe, weiss ich nicht weiter
    hier ein Teil meiner Lösung:

    Set myRange = wksQuelle.Range("A4:A" & UsedRange.Rows.count)


    'für jede zelle in diese Spalte
    For Each cell In myRange

    'falls zelle befüllt markiere die ganze Zeile
    If IsEmpty(cell.Value) = False Then

    With wksQuelle.Cells(cell).EntireRow
    .Select
    For Each cell3 In Selection
    'kopiere dort der wert von jede Zelle mit der selber Adresse im Zielblatt
    'With wksZiel
    wksZiel.UsedRange.Range(cell3.Address).Value = cell3.Value
    'End With

    Next cell3
    end with
    end if
    next cell

    habt ihr eine Idee was ich hier falsch mache?
    Bin dankbar für jede Antwort!
    danke für deine schnelle Antwort!
    leider klappt es mit deinem Vorschlag trotzdem nicht.
    an diese Zeile klemmt es : "cell.EntireRow.Select".Fehler 400. Aber wenn ich vor der Zeile eine wksQuelle.activate einfüge läuft das ganze gut. Jedoch will ich das gezappeln am Bildschirm nicht!

    danke!
    Ich glaube dir nicht, dass es in der von dir angegebenen Zeile kracht.
    Geh den Code im Debugger durch und schau dir nach dem Fehler Err.Description an.

    Ich gehe eher davon aus, dass hier der Fehler liegt:

    flower schrieb:


    wksZiel.UsedRange.Range(cell3.Address).Value = cell3.Value
    zum einen ist der UsedRange Blödsinn, zum anderen der Value.

    Visual Basic-Quellcode

    1. wksZiel.Range(cell3.Address).Formula = cell3.Value
    kann eher funktionieren.

    Ausserdem ist der Select ebenfalls nicht nötig, wenn du deine Schleife so baust:

    Visual Basic-Quellcode

    1. For Each cell3 in cell.EntireRow.Cells


    In deinem Code ist so viel Unsinn drin, dass er auch mit Select nicht laufen kann.
    Versuche, den Code mit Hilfe des Debuggers zu begreifen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    hallo petaod

    zur erinnerung: mein code hat schon vorher gut functionniert. Also war mein code nicht so unsinnig wie du meinst Nur jezt will ich halt nur im hintergrund laufen lassen.

    Zu deinem Zitat "Ich glaube dir nicht, dass es in der von dir angegebenen Zeile kracht." weiss ich nicht was ich dazu sagen soll da ich mein code immer schritt für schritt teste und genau dort der Fehler kriege. Ausserdem bin ich kein lügner!

    ich habe alle deine Vorschläge getestet und auch ohne usedrange(obwohl ich es brauche da ein paar zeilen in meinem blatt schreibgeschützt sind) -> functioniert trotzdem nicht! Und genau die selbe Stelle ist problematisch
    Ich bin der Meinung, dass du das Objektmodell von Excel nicht verstanden hast.

    Die einzige Möglichkeit, bei der von dir genannten Zeile einen Fehler zu bekommen, ist bei Ausführung im inaktiven Sheet.
    Wenn du unbedingt mit Select arbeiten willst (was Blödsinn ist), dann sorge dafür, dass du vorher das Datenblatt auch aktivierst (wksQuelle.Activate).

    Zu meiner Aussage bezüglich UsedRange stehe ich nach wie vor, aber wenn du meinst, das auf deine Art lösen zu müssen, möchte ich dich nicht bekehren.


    flower schrieb:

    mein code hat schon vorher gut functionniert.
    Poste hier mal den funktionierenden Code.


    flower schrieb:

    ich möchte aber mein code im hintergrund laufen lassen da ich kein gezappeln am Bilschirm sehen darf
    Das Zappeln wird von .Activate und .Select ausgelöst.
    Codiere so, dass du diese nicht benötigst, dann zappelt auch nichts.

    Und wenn du meinen Tipp aus Post #2 anwendest, zappelt auch nichts.
    Aber dazu müsstest du erst funktionierenden Code haben ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „petaod“ ()