Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
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
Inhaltsverzeichnis

ActiveSheet wechselt nach SpecialPaste

ActiveSheet wechselt nach SpecialPaste
08.06.2019 21:59:50
Vanessa
Guten Abend liebe Foristen,
ich bin eine recht blutige VBA-Anfängerin (Typ "learning by doing") und gerade dabei mir einen Code zu basteln. Ich habe nun ein Problem mit dem Bezug aufs ActiveSheet, nachdem ich ein Copy und SpecialPaste durchgeführt habe.
Ausführlicher:
Mein Code liest eine gewisse, sich ändernde Anzahl von Textzeilen in einen Array "textSpeicher", die in der folgenden Schleife wieder ausgelesen werden
i = 0
For y = 25 To UBound(textSpeicher) + 25
Range("A" & y) = textSpeicher(i)
Range(("A" & y), ("E" & y)).MergeCells = True
Rows(y + 1).Insert (xlDown)
Range("F" & y).Copy
Debug.Print ActiveSheet.Name 'ergibt im 1. Durchlauf "Blatt2", danach "Blatt1"
Range("F" & y + 1).PasteSpecial xlPasteFormulas
Debug.Print ActiveSheet.Name 'ergibt im 1. Durchlauf "Blatt1"
If i < UBound(textSpeicher) Then
i = i + 1
End If
Next y

Der Text stammt ursprünglich aus dem Arbeitsblatt, Blatt1, und soll im (eigentlichen) Active Sheet, Blatt2, eingefügt werden. Nach dem PasteSpecial wechselt das ActiveSheet gleich im ersten Durchlauf der Schleife plötzlich zu Blatt1. Sobald der Code komplett durchgelaufen ist, ist dann dieses auch plötzlich das "geöffnete" Blatt, obwohl zuvor beim Codeaufruf noch Blatt2 zuvorderst lag.
Ich frage mich nun schon seit einigen Stunden und erfolgloser Online-Recherche: Warum?
Es hat auch nicht geholfen, statt des Range.PasteSpecial xlPasteFormulas ein xlPasteAll oder ein Worksheet.Paste zu verwenden.
Mich interessiert auch, wieso der Code trotzdem alles auf Blatt2 "abarbeitet" wenn schon nach dem ersten Schleifendurchlauf das ActiveSheet mysteriöserweise Blatt1 geworden ist. Dann müssten sich doch nachfolgend alle Ranges (und die Rows) auf Blatt1 beziehen? Oder habe ich da was falsch verstanden?
Werdet ihr daraus schlau?
Ärgerlich ist dieses Umswitchen, weil ich später ein ActiveSheet.Protect im Code habe und dann immer das falsche Blatt geschützt wird. Das könnte ich natürlich klar ausschreiben (Worksheets("Blatt1").Protect). Aber mich treiben Ehrgeiz und Neugier. Vielleicht ist es ja nur eine Kleinigkeit, die ich übersehen habe?
Vielen Dank schon im Voraus für Hinweise und eventuelle Aufklärung
Beste Grüße
Vanessa

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveSheet wechselt nach SpecialPaste
09.06.2019 01:32:39
onur
Wo steht der Code überhaupt und wie lautet er KOMPLETT?
AW: ActiveSheet wechselt nach SpecialPaste
09.06.2019 01:33:26
onur
Und wie wird er gestartet?
AW: ActiveSheet wechselt nach SpecialPaste
09.06.2019 08:33:26
Vanessa
Guten Morgen Onur,
der Code wird über einen Klick auf eine Befehlsschaltfläche (Formularsteuerelement) auf Blatt2 (eigentlicher Name: "Angebot_final", Blatt1: "Konfigurationen_Übersicht") gestartet. Ursprünglich war der CommandButton mal ein ActiveX-Element, aber damit hatte ich irgendwann Probleme (zeigte beim Anklicken nur noch eine Art "Kopie" von sich selbst und startete den Code nur manchmal). Also habe ich den Code dann dem Formularsteuerelement zugewiesen und das ActiveX-Element gelöscht. Der Code steht im Codefenster zu "Angebot_final" (dieses, das sich öffnet, wenn man im Entwicklermodus auf das ActiveX-Element doppelklickt).
Vollständig lautet er so:
Sub CommandButton1_Click()
On Error GoTo Notausstieg
If IsError(Range("E22")) Then
MsgBox "Bitte im Arbeitsblatt ""Konfigurationen Übersicht"" einen Vertragstyp auswählen.  _
Erst dann können die korrekten Inhalte eingefügt werden!", vbOKOnly, "Vertragstyp wählen!"
Exit Sub
End If
Dim textZeile2 As Integer 'relativer Bezugspunkt für Löschen-Befehl
Dim spalteNr As Integer 'Spalte, in der der Vertragstyp in der Übersicht aufgeführt wird
Dim textSpeicher() As String
Dim i As Integer 'Index für Textspeicher-Array
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
ActiveSheet.Unprotect Password:="123"
textZeile2 = WorksheetFunction.Match("Generelle Bestimmungen", Range("A1:A60"), 0)
'Evtl. vorhandene vorigen Text bereinigen
If Not Range("A25").Value = "" Then
Range("A25", Cells(textZeile2 - 2, 1)).EntireRow.Delete
End If
'TextSpeicher-Array füllen
i = 0
spalteNr = Range("E22").Value
Worksheets("Konfigurationen_Übersicht").Unprotect Password:="123"
For x = 2 To 19
If Worksheets("Konfigurationen_Übersicht").Cells(x, spalteNr).Value = 3 Then
ReDim Preserve textSpeicher(0 To i)
textSpeicher(i) = Worksheets("Konfigurationen_Übersicht").Cells(x, 9)
i = i + 1
End If
Next x
Worksheets("Konfigurationen_Übersicht").Protect Password:="123"
i = 0
For y = 25 To UBound(textSpeicher) + 25
Range("A" & y) = textSpeicher(i)
Range(("A" & y), ("E" & y)).MergeCells = True
Rows(y + 1).Insert (xlDown)
Range("F" & y).Copy
Debug.Print ActiveSheet.Name
Range("F" & y + 1).PasteSpecial xlPasteFormulas
Debug.Print ActiveSheet.Name
If i 
Darf ich dich noch um was bitten? - Wenn du nun sowieso einen Blick darauf wirfst: Weißt du, weshalb der Code so langsam abgearbeitet wird? Er braucht so zwischen 20 und 30 Sekunden, das finde ich für die wenigen Zeilen, die verarbeitet werden, eigentlich nicht angemessen. (Oder irre ich da?) Ich hatte vorher statt des Arrays eine Schleife, in der ich jede Zeile direkt von "Konfigurationen_Übersicht" nach "Angebot_final" habe kopieren lassen, wenn die Bedingung erfüllt war. Das war aber genauso langsam - eigentlich sollte das Array dann die Lösung dafür sein. Geändert hat sich de facto aber nichts (außer, dass ich beim Zusammenbauen ziemlich ins Schwitzen geraten bin :-) ).
Danke für deine Hilfe.
Vanessa
PS: Ich werde ab heute Mittag für zwei Wochen im Ausland sein und weiß nicht genau, wie oft/einfach ich ins Internet komme. Es ist nicht persönlich gemeint, wenn ich nicht sofort reagiere. Ich freue mich auf jeden Fall über eine Antwort!
Anzeige
AW: ActiveSheet wechselt nach SpecialPaste
09.06.2019 08:37:38
Hajo_Zi
Hallo Vanessa,
bei mir wird die Tabelle nicht gewechselt.
Ich habe
Dim textSpeicher(2)
ergänzt.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: ActiveSheet wechselt nach SpecialPaste
09.06.2019 08:48:18
Vanessa
Hallo Hajo,
danke für die Antwort, aber ich befürchte, mir ist sie nicht ganz klar. Du meinst, du hast zu Beginn des Subs das Array angelegt? In meiner Antwort an Onur habe ich den gesamten Code gepostet. Dort habe ich ein
Dim textSpeicher() As String
zu Beginn des Subs. Läuft das ungefähr auf deinen Vorschlag hinaus oder hast du etwas anderes gemeint?
Gruß Vanessa
Anzeige
AW: ActiveSheet wechselt nach SpecialPaste
09.06.2019 08:55:18
Hajo_Zi
Hallo Vanessa,
den Beitrag habe ich nicht gesehen.
Den Code kann ich nicht testen es kommt zigmal eine Fehlermeldung und da habe ich abgebrochen.
Das könntze daran liegen das meine Datei anders aussieht als Deine?
Gruß Hajo
AW: ActiveSheet wechselt nach SpecialPaste
10.06.2019 15:31:58
Vanessa
Hallo Hajo,
bitte entschuldige die etwas verzögerte Antwort, ich bin im Ausland und nicht ständig online.
Ich habe meine Datei anonymisiert und für dich hochgeladen. Vielleicht wird dann klarer, was dort genau passieren soll. Bei einem Testdurchlauf mit dieser (entschlackten) Datei trat bei mir das Problem noch immer wie beschrieben auf. Diesmal ist auch das gesamte betroffene Sub enthalten.
https://www.herber.de/bbs/user/130317.xlsm
Es geht darum, Textbausteine in einen Angebotsentwurf einzufügen, die variieren, je nachdem, welcher Vertragstyp zuvor auf dem ersten Arbeitsblatt ausgewählt wurde.
Ich möchte gerne noch eine zusätzliche Frage stellen (auch schon an Onur): Weißt du, weshalb der Code langsam abgearbeitet wird? Es kommt mir ziemlich lang vor, für die paar Textzeilen, die letztlich gecheckt und kopiert werden sollen. Bei inzwischen etlichen Durchläufen hat es immer mindestens 20 Sekunden gedauert. Ich gehe davon aus, dass ich als Anfängerin beim Zusammensuchen der verschiedenen Befehle einfach ein sehr schwerfälliges Konstrukt geschaffen habe und es mit anderen Befehlen wahrscheinlich schneller ginge (?).
Danke für deine Unterstützung!
Viele Grüße
Vanessa
Anzeige
AW: ActiveSheet wechselt nach SpecialPaste
10.06.2019 16:00:47
onur
Das Makro steht im Codemodul von Sheet1, obwohl das Button sich auf Blatt "Angebot_final" befindet - da ist schon mal Chaos vorprogrammiert.
Deswegen weis ich auch nicht unbedingt, was du von wo nach wo kopieren willst.
AW: ActiveSheet wechselt nach SpecialPaste
10.06.2019 19:37:39
Vanessa
Hallo Onur,
ich frage mich gerade, ob auf meiner Seite ein grundsätzliches Verständnisproblem vorliegt: Das Sheet1 IST bzw. HEIßT doch "Angebot_final", oder etwa nicht?
Wenn ich den VBA-Editor öffne, finde ich dort zu meiner Datei: "DieseArbeitsmappe", "Sheet1 (Angebot_final)" und "Tabelle3 (Konfigurationen_Übersicht)". Ich gebe zu, es ist verwirrend, dass hier Deutsch und Englisch gemischt sind (Sheet und Tabelle) - das könnte aber daran liegen, dass ich mit zwei verschiedenen Geräten arbeite, deren Systemsprachen unterschiedlich eingestellt sind. Bisher hat das allerdings (außer bei Datumseingaben) keine Probleme verursacht.
Vielleicht stehe ich gerade auf dem Schlauch oder habe etwas für mich nicht erschlossen, dass für euch einfach selbstverständlich ist. Wo müsste denn deiner Meinung nach der Code stehen, damit er sich eindeutig auf "Angebot_final" bezieht? Oder was müsste ich wie im Code umschreiben?
Kopiert werden soll in jedem Fall vom Blatt "Konfigurationen_Übersicht" (dort von Spalte E, die Textzeilen mit "Hier steht genaueres zu...") ins Blatt "Angebot_final" (dort in Spalte A ab Zeile 25).
Viele Grüße
Vanessa
Anzeige
AW: ActiveSheet wechselt nach SpecialPaste
11.06.2019 21:05:54
Vanessa
Hallo onur,
vielen Dank, das funktioniert soweit. Der Code ist schlank und läuft gut. Das Detail mit dem PasteSpecial fehlte zwar (ich brauche bei "Angebot_final" diese Hilfsspalte F samt der Bezüge auf A für die Zeilenhöhe der verbundenen Zellen in A-E. Da gibt es im Original nämlich welche mit manuellen Umbrüchen bzw. mehrzeilig)... Aber wenn ich es nun einfüge, habe ich trotzdem keine Probleme mehr mit dem ActiveSheet und auch nicht mit der Geschwindigkeit.
Allerdings verstehe ich noch immer nicht das ursprüngliche Problem - und das würde ich eigentlich sehr gerne, um es beim nächsten Mal besser zu machen. Wodurch war nun der Wechsel des ActiveSheet nach dem PasteSpecial genau bedingt? War es das, was du schon angesprochen hattest, mit Sheet1 ist nicht das Blatt "Angebot_final"? Das hatte ich leider noch nicht verstanden...
Beste Grüße
Vanessa
Anzeige
AW: ActiveSheet wechselt nach SpecialPaste
11.06.2019 22:31:15
onur
Mit den manuellen Umbrüchen usw. tut mir leid, aber ich kann nur mit der Datei testen, die du gepostet hast.
Das Problem mit ActiveSheet: Keine Ahnung - passierte bei mir nicht. Aber der alte Code war ja auch recht wirr.....
AW: ActiveSheet wechselt nach SpecialPaste
14.06.2019 19:19:48
Vanessa
Hallo Onur,
danke auf jeden Fall nochmal für deine Hilfe. Wichtig ist ja v.a., dass jetzt alles läuft, so wie es soll.
Gruß
Vanessa

22 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige