Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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

Bug in Excel? Geht um replace funktion + mehrere Tab.blätter

Bug in Excel? Geht um replace funktion + mehrere Tab.blätter
25.11.2023 11:17:58
Frank Dreier
Hallo Leute,

manchmal ist Excel wirklich schräg und unlogisch oder ich bin zu blöd.

Wenn man in Tabelle 1, Tabelle 2 und Tabelle 3 in A1 "Test" hineinschreibt und dann Tabelle 1 und 3 gleichzeitig auswählt (linke Maustaste und STRG gedrückt halten) und dann manuell "Test" durch "Task" ersetzt, ersetzt er sowohl in Tabelle 1 und Tabelle 3, wie gewünscht, "Test" durch "Task". Tabelle 2 bleibt "Test" in A1 stehen und bleibt unberührt. Soweit so gut.

Wenn man dies aber als Makro programmiert und abspielen lässt, ändert er nur die Tabelle, die fett angeklickt ist und die andere(n) Tabellen nicht! (wenn Du via Makro Tabelle 1 und 3 ansprichst, Code kommt gleich). Das heißt die manuelle Replacement Funktion scheint anders zu funktionieren als die "programmierte", sieht aber gleich aus.

Hier der Code zum Selektieren von Tabelle 1 und 3 und das ersetzen von "Test" zu "Task" (trotz selektion BEIDER Blätter ändert er nur "Test" in "Task" bei der angewählten, fetten, auf dem Bildschirm sichtbaren Tabelle, nicht in der anderen)

Sheets(Array(1, 3)).Select
Cells.Replace What:="Test", Replacement:="Task", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Wenn man nun nur den Code:
Sheets(Array(1, 3)).Select

ablaufen lässt und dann manuell wieder "Test" durch "Task" ersetzt, ersetzt er das wieder in allen ausgewählten Tabellen, Tabelle 2 bleibt unberührt. Also die programmierte bzw. manuelle Auswahl von Tabellenblatt 1 und 3 scheint nicht das Problem zu sein sondern die Replacementfunktion.

Excel scheint via Makro wohl nur eins oder alle Tabellenblätter ändern zu können. Einzelne anselektierte Blätter sind zwar möglich mit
(Sheets(Array(1, 3)).Select ) aber nicht gleichzeitig änderbar. Sollte das so sein, ist das natürlich ein unfassbarer Bug, da ich gerade nur durch Zufall dieses Problem entdeckt habe. Das ist ja nun wirklich ein essentieller Baustein.

Ihr könnt das gerne mal ausprobieren! Als workaround muss ich nun jedes einzelne Tabellenblatt ansprechen (alle geht nicht), da z.B. in Tabellenblatt 2 die Replacementfunktion nicht ausgeführt werden soll. Das ist z.B. nötig, da in Tabellenblatt 2 700000 Datenreihen stehen stehen und diese nicht durchsucht werden sollen da das ewig dauert.

Wenn man nun Tabellenblatt 1, 3, 7, 12 benötigt, kann man das noch nicht mal mit einer Schleife programmieren (da Abstand von Tabelle zu Tabelle unterschiedlich) oder man muss die Tabellen so verschieben/anordnen in Excel, dass alle möglichst hintereinander stehen, dann kann man das Problem zumindest mit einer Schleife lösen. Das geht bei mir aber nicht, das die Tabellenanordnung in Excel einer Logik folgt.

Bin gespannt auf Eure Antworten.



18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bug in Excel? Geht um replace funktion + mehrere Tab.blätter
25.11.2023 11:26:51
Piet
Hallo

programmiere es bitte mal so, und wundere dich nicht wenn es damit klappt!
Ich bin gespannt auf deine Rückmeldung!? - Sheets(Array(1, 3)).Replace "Test", "Task", xlPart

Sollte es damit klappen lag es daran, das du zwar zwei Sheets selektierst, Excel aber annimmt der folgende Replace Code beziehe sich NUR auf das ACTIVE Sheet. Eine andere Erklärung habe ich nicht dafür!

mfg Piet
siehe Piet
25.11.2023 11:51:10
RPP63
Moin!
Cells hat bei Dir keinen Parent und bezieht sich somit auf das ActiveSheet.
Folglich entweder innerhalb eines With-Statements (Achtung: führender Punkt vor Cells!)
With Sheets(Array(1, 3))

.Cells.Replace …
End With

oder als Einzeiler wie bei Piet

Gruß Ralf
Anzeige
AW: Bug in Excel? Geht um replace funktion + mehrere Tab.blätter
25.11.2023 17:09:56
Oberschlumpf
Hi Frank,

und wieso soll das nich mit Schleife möglich sein?

Versuch mal...


Sub test()

Dim liSh As Integer

For liSh = 1 To 19
Select Case liSh
Case 1, 3, 7, 12 'hier kannst/musst du weitere Sheets-Nummern eintragen, wenn gewünscht/erforderlich
With Sheets(liSh)
If .Range("A1").Value = "test" Then
.Range("A1").Value = "task"
End If
End With
End Select
Next

End Sub

Aber bitte schreib nich: "Aber da MUSS ich ja jedes Blatt, wo in A1 geändert werden muss, benennen!"

DAS MÜSSTEST DU nach deiner Idee mit Sheets(Array(1, 3)).Select AUCH TUN.

Hilfts?

Ciao
Thorsten
Anzeige
Thorsten hat eine Lösung gefunden, die auch bei mir geht
25.11.2023 17:23:46
Frank Dreier
Hallo Thorsten!

Vielen Dank, ja, das klappt. Das liegt wahrscheinlich daran, dass durch Deine Schleife jedes Tabellenblatt einzeln angesprochen wird.
Und klasse mit der Schleife, dass man diese so aufbauen kann wie man sie braucht (in deinem Beispiel 1, 3, 7, 12),- das wusste ich noch nicht.

Es muss irgendwie an meinem Excel liegen, dass die anderen Lösungen nicht funktionieren. Müsste mal Excel 2013 draufmachen ob es da funktioniert, also die anderen Lösungen. Mit Deinem Vorschlag kann man aber sehr gut leben, klasse danke Euch allen!

Hier nochmal Thorsten's Code der auch bei mir funktioniert:

Sub test()
Dim liSh As Integer
For liSh = 1 To 19
Select Case liSh
Case 1, 3, 7, 12 'hier kannst/musst du weitere Sheets-Nummern eintragen, wenn gewünscht/erforderlich
With Sheets(liSh)
If .Range("A1").Value = "Test" Then
.Range("A1").Value = "Task"
End If
End With
End Select
Next
End Sub
Anzeige
Kommando zurück!
25.11.2023 11:55:41
RPP63
Vergiss meinen Beitrag.
Man sollte erst testen, dann posten.

Sorry!
Hi Ralf! Das ist wohl das Problem, Excel will trotzdem nicht
25.11.2023 12:30:47
Frank Dreier
Hallo Ralf,

gucke mal bitte kurz unter:
"Es funktioniert nicht, weder Piet's noch Gerd's Lösung :O"

Da ist Dein Vorschlag eingearbeitet. Das merkwürdige ist, dass Excel mit diesem Parent-Verweis zwar klarkommt aber in der Replacement-Funktion dann einfach nix macht. Ich habe dann exakt den gleichen Code nochmal ohne Parent-Verweis gemacht und dann geht es wieder im aktuellen Tabellenblatt. Also es scheint da wirklich ein Problem zu geben.

Mal sehen ob noch andere antworten.
Hab ich! ;) Siehe oben. owT
25.11.2023 12:33:43
RPP63
.
AW: Hab ich! ;) Siehe oben. owT
25.11.2023 12:39:12
GerdL
Hallo Frank,

a) Ich habe Codenamen der Blätter ins Array gestellt.
b) Evtl. bist du beim Testen durcheinander gekommen.

Denn bei mir funktionierte mein Code.

Gruß Gerd
Anzeige
Hallo Gerd, dachte ich auch erst, aber
25.11.2023 13:04:30
Frank Dreier
Hallo Gerd,

also meine Tabellenblätter heißen "Tabelle1", "Tabelle2" und "Tabelle3". Also genau so wie Du sie auch benannt hast. Wenn ich nun Deinen Code durchlaufen lasse, hakt er beim dritten Durchlauf, da Tabelle7 und Tabelle12 nicht vorhanden sind, er ändert aber trotzdem nix in Tabelle 1 und Tabelle 3 obwohl Excel wohl kapiert, dass mit "Tabelle1" und "Tabelle3" entsprechend vorhandene Tabellen angesprochen werden.

Dim Wsh As Variant

For Each Wsh In Array(Tabelle1, Tabelle3, Tabelle7, Tabelle12)
Wsh.Cells.Replace "Test", "Task", xlPart
Next

Ich lade gleich mal eine Beispieldatei hoch. Ich kann mir vorstellen, dass es evtl. an Excel 2007 liegt oder dass ich eine 'xlsx' Datei genommen habe und die Funktion da nicht funktioniert. Ich lade die Datei gleich hoch.

Anzeige
Beispieldatei
25.11.2023 13:20:28
Frank Dreier

https://www.herber.de/bbs/user/164577.xlsx

Bitte Makro codes selber einfügen:

Sheets(Array(1, 3)).Select
Cells.Replace "Test", "Task", xlPart

Ändert nur erste Tabelle (Tabelle 1) aber nicht Tabelle 3 obwohl beide selektiert sind.

------------------------

Dim Wsh As Variant

For Each Wsh In Array(Tabelle1, Tabelle3, Tabelle7, Tabelle12)
Wsh.Cells.Replace "Test", "Task", xlPart
Next

------------------------
Erkennt die Tabellenblätter da er nach 2 Durchläufen abbricht (da Tabelle 7 und Tabelle 12 nicht vorhanden), ändert aber nix an Tabelle 1 und 3. Es gibt also irgendein Problem mit dem wsh. zusatz.

Datei erstellt unter Excel 2007, xlsx Format.

Anzeige
AW: Beispieldatei
25.11.2023 13:25:09
RPP63
Wenn etwas nicht vorhanden ist, kann man es auch nicht in ein Array packen!
Das funktioniert nur einem Portemonnaie, dass man auch kein Geld dazulegen kann, ohne dass es kaputt geht …

Mein Code "von oben" funktioniert wie gewünscht:
Sub einz_Tab_replace()

Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
Select Case wks.Name
Case "Tabelle1", "Tabelle3"
wks.Cells.Replace "Test", "Taxi"
End Select
Next
End Sub
AW: Beispieldatei
25.11.2023 13:40:46
GerdL
...Läuft und tut!
Abschluss:
25.11.2023 13:57:42
Frank Dreier
Danke an Euch beide nochmal. Also bei mir geht es nicht. Wenn ich die Codes von Euch einfüge in meine hochgeladene Beispieldatei akzeptiert excel zwar und läuft durch, ändern tut sich aber nichts.

Dann vermute ich liegt es an irgendeinem Problem bei mir. Ich benutzte Excel 2007, evtl. liegt es daran. An der Dateiendung liegt es wohl nicht, da Ihr ja auch erfolgreich mit xlsx bzw. Beispieldatei getestet habt. Tja, es wird wohl ein Rätsel bleiben.

Mit welcher Excel-Version habt Ihr denn getestet, also welches Jahr?
Anzeige
AW: Bug in Excel? Geht um replace funktion + mehrere Tab.blätter
25.11.2023 11:48:00
GerdL
Moin Frank!
Sub Build_Loop()


Dim Wsh As Variant

For Each Wsh In Array(Tabelle1, Tabelle3, Tabelle7, Tabelle12)
Wsh.Cells.Replace "Test", "Task", xlPart
Next

End Sub


Gruß Gerd
Es funktioniert nicht, weder Piet's noch Gerd's Lösung :O
25.11.2023 12:26:52
Frank Dreier
Hi, also wenn ich Piet's Lösung nehme (das war: Sheets(Array(1, 3)).Replace "Test", "Task", xlPart

kommt folgendes:
"Objekt unterstützt diese Eigenschaft oder Methode nicht"

Wenn ich das auseinanderfriemel läuft es durch, aber er ändert nix, in keinem der beiden Tabellenblätter

Sheets(Array(1, 3)).Select
Replace "Test", "Task", xlPart

Wenn ich nun Piet's Formel editiere und Cells. nutze, also

Sheets(Array(1, 3)).Select
Cells.Replace "Test", "Task", xlPart

,dann ändert er nur Tabelle 1, wie gehabt, Tabelle 3 bleibt gleich, da er wohl damit denkt: NUR direkt ausgewähltes Tabellenblatt ändern.

Wenn ich nun Gerd's Lösung nehme:

Dim Wsh As Variant

For Each Wsh In Array(Tabelle1, Tabelle3)
Wsh.Cells.Replace "Test", "Task", xlPart
Next

Läuft es zwar durch aber ändert wieder nix, weder in Tabelle1 noch Tabelle3 (gleiches Phänomenen wie bei Piet).

Wenn ich nun frecherweise Gerd's Code so manipuliere (um zu testen ob Excel überhaupt versteht was gemacht werden soll):

Dim Wsh As Variant

For Each Wsh In Array(Tabelle1, Tabelle3)
Cells.Replace "Test", "Task", xlPart
Next

Wird wieder Tabelle 1 geändert aber Tabelle 3 nicht.

Das heißt Excel kommt irgendwie mit .cells.Replace nicht klar, also wenn vor Cells noch etwas steht, hier der "Wsh" Verweis. Excel macht dann garnix mehr.

Bin gespannt ob Ihr noch andere Vorschläge habt oder es einfach nicht funktioniert.









Anzeige
Dann probiere es mal so:
25.11.2023 12:32:56
RPP63
Sub einz_Tab_replace()

Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
Select Case wks.Name
Case "Tabelle1", "Tabelle3"
wks.Cells.Replace "Test", "Taxi"
End Select
Next
End Sub
AW: Excedl ist vermutlich "weiblich", zickt manchmal rum ...
25.11.2023 17:14:56
Piet
Hallo

das ist echt amüsant, Excel ist bei Sheets(Array)) störrischer wie ein Maultier!. Aber so funktioniert es bei mir.
Man achte hier auf Cells vor Replace. Ohne Cells klappt es nicht. Geht auch mit Sheets(1) + Sheets(3)
Sheets("Tabelle1").Cells.Replace "Test", "Task", xlPart
Sheets("Tabelle3").Cells.Replace "Test", "Task", xlPart

Meine persönliche Erfahrung, Excel muss "weiblich" sein, und zickt manchmal rum.
Aber wenn man diese nette "Frau" liebevoll richtig betört ... nun ja, denkt euch was aus!

mfg Piet

Anzeige
Du wirst lachen, es geht nicht, Excel wählt...
25.11.2023 12:57:45
Frank Dreier
Excel wählt die einzelnen Tabellenblätter garnicht erst an, ich glaube das war Dein Workaround. Auch wenn Du auf Tabelle 1 bist und das Makro anschmeißt, ändert er noch nicht einmal etwas in Tabelle 1.

Sub einz_Tab_replace()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
Select Case wks.Name (das macht er einfach nicht, er wählt die Tabellenblätter nicht an)
Case "Tabelle1", "Tabelle3"
wks.Cells.Replace "Test", "Taxi"
End Select
Next
End Sub

Es ist wirklich verrückt.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige