Autor
|
Thema: Mehrere Befehle zusammenfassen (950 / mal gelesen)
|
Yavis Mitglied
Beiträge: 9 Registriert: 22.01.2019
|
erstellt am: 06. Feb. 2019 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich würde gerne wissen ob und wie man mehrere gleiche Befehle in Excel VBA vereinfachen bzw. zusammenfassen kann. Hier ein Beispiel: Sheets("Aktuell").Range("B3:B7").Copy Sheets("G3").Range("B5:B9").PasteSpecial xlPasteFormulas Application.CutCopyMode = False Sheets("Aktuell").Range("C3 7").Copy Sheets("G3").Range("D5:E9").PasteSpecial xlPasteFormulas Application.CutCopyMode = False Sheets("Aktuell").Range("E3:E7").Copy Sheets("G3").Range("F5:F9").PasteSpecial xlPasteFormulas Application.CutCopyMode = False Sheets("Aktuell").Range("F3:F7").Copy Sheets("G3").Range("H5:H9").PasteSpecial xlPasteFormulas Application.CutCopyMode = False Ich kann das natürlich mit Copy/Paste beliebig lange fortsetzen, aber ich bin mir fast sicher, dass es dafür eine elegantere Lösung gibt Vielen Dank vorab schon einmal. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 06. Feb. 2019 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Yavis
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 06. Feb. 2019 16:30 <-- editieren / zitieren --> Unities abgeben: Nur für Yavis
Hi, es reicht, wenn die Zeile: Code:
Application.CutCopyMode = False
einmalig am Ende des Codes steht. Außerdme kannst du mit With arbeiten und beim Einfügen reicht es aus, die Starzelle anzugeben: Code: With Sheets("Aktuell") .Range("B3:B7").Copy Sheets("G3").Range("B5").PasteSpecial xlPasteFormulas '..... End With Application.CutCopyMode = False
Eine weitere Zusammenfassung ist nicht möglich.
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Yavis Mitglied
Beiträge: 9 Registriert: 22.01.2019
|
erstellt am: 06. Feb. 2019 17:23 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Rückmeldung. Ich habe jetzt es jetzt so umgeschrieben: Sheets("Aktuell").Range("B3:B7").Copy Sheets("G3").Range("B5:B9") da beim Einfügen in der anderen "G3"-Tabelle immer eine Spalte Abstand zwischen zwei einzufügenden Spalten ist und ich mir nicht sicher bin, ob das berücksichtigt werden kann. Eine Frage hätte ich bitte noch: gibt es in Excel ein Problem zwischen automatischer Berechnung und Makros? Wenn ich die automatische Berechnung für die Tabelle aktiviere, bekomme ich am laufenden Band Fehlermeldungen, die ich vorher nicht bekommen habe und das Makro hält ständig an. Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 06. Feb. 2019 17:39 <-- editieren / zitieren --> Unities abgeben: Nur für Yavis
Wenn du einfach nur den .Copy-Befehl verwendest ist das aber etwas anderes als wenn du mit PasteSpecial arbeitest - so werden auch die Formate übertragen und nicht nur die Formeln... Also ich kann nicht sehen, dass bei dieser Codezeile in eine Spalte im Abstand von 2 Spalten kopiert wird - es wird in dieselbe Spalte kopiert nur eben 2 Zeilen weiter nach unten. Es reicht in solchen Fällen aber immer, wenn du für das Ziel nur die Startzelle angibst, denn Excel weiß ja, dass 5 zusammenhängende Zellen kopiert werden sollen. Was meinst du mit bekomme ich am laufenden Band Fehlermeldungen, die ich vorher nicht bekommen habe und das Makro hält ständig an.? Was für Fehlermeldungen (genauen Text) und in welcher Codezeile hält das Makro an? ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Yavis Mitglied
Beiträge: 9 Registriert: 22.01.2019
|
erstellt am: 07. Feb. 2019 17:27 <-- editieren / zitieren --> Unities abgeben:
Danke für die Erklärung. Den PasteSpecial-Befehl werde ich mal ausprobieren. Im Moment läuft das Makro mit dem .Copy-Befehl zu meiner Zufriedenheit. Ich habe festgestellt, dass willkürlich Fehlermeldungen aufgeploppt sind, wenn bei Excel die automatische Arbeitsmappenberechnung aktiviert ist. Wenn ich mit Application.Calculation = xlCalculationManual am Anfang und mit Application.Calculation = xlCalculationAutomatic am Ende des Markos arbeite, bekomme ich diese Fehlermeldungen nicht. Vielleicht hilft das zum Verständnis weiter (ich verstehs nämlich nicht, ich arbeite im Moment nur über Trial&Error). Vielleicht kann mir an dieser Stelle noch jemand Hilfe geben: ich möchte das Ergebnis dieses Codes: Rows("1:32").Copy Range("1:32").Insert Shift:=xlDown mit diesem Befehl rückgängig machen: Rows("1:32").Delete Leider bekomme ich wieder willkürliche Fehlermeldungen: "Ausführung des Codes wurde unterbrochen" Und diesmal hilft auch der .Calculation-Befehl nicht mehr. Jemand eine Idee?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 07. Feb. 2019 18:58 <-- editieren / zitieren --> Unities abgeben: Nur für Yavis
Den PasteSpecial-Befehl hattest du doch bereits in deinem zuerst geposteten Code verwendet... Dass willkürlich Fehlermeldungen erscheinen hattest du auch bereits geschrieben - aber meine Frage, WAS für Fehlermeldungen genau, hast du nicht beantwortet. Bei mir kommen in der Befehlszeile Rows("1:32").Delete keine Fehlermeldungen. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Yavis Mitglied
Beiträge: 9 Registriert: 22.01.2019
|
erstellt am: 08. Feb. 2019 12:03 <-- editieren / zitieren --> Unities abgeben:
Ich hatte in meinem letzten Post geschrieben: "Ausführung des Codes wurde unterbrochen" Das ist auch schon alles, was ich als Fehlermeldung bekommen habe. Nach langem Suchen im Internet habe ich allerdings eine Erklärung dafür gefunden: wenn aus irgendeinem Grund ein Makro abgewürgt wurde, kann es vorkommen, dass Excel weiterhin nach einem zufälligem System Makros abwürgt. Ist anscheinend ein bekannter Bug. Als Lösung kann man im Debugger zweimal Strg+Pause und dann F5 drücken und der Fehler sollte nicht weiter auftreten. Das hat bei mir jedenfalls geklappt und jetzt bekomme ich auch keine willkürlichen Fehlermeldungen mehr. Und das sogar ohne Application.Calculation-Befehl. Ich bin mit meinem kleinen Projekt jedenfalls erstmal zu einem zufriedenstellenden Ende gekommen und bedanke mich herzlich bei allen, die mir mit Rat und Tat zur Seite gestanden haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |