Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1604to1608
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

Seltsames verhalten von Excel

Seltsames verhalten von Excel
24.01.2018 17:04:10
Excel
Hallo,
heute habe ich folgendes seltsames Verhalten von Excel festgestellt:
Es geht um: Selection.Replace What:="", Replacement:="X"
Bisher habe ich damit in die leeren Zellen eines markierten Bereiches ein "X" gesetzt. Hat auch jahrelang funktioniert. Aber jetzt plötzlich nicht mehr. Oder besser gesagt nicht mehr immer.
Wenn ich diesen Code auf ein neues unbeschriebenes Arbeitsblatt anwende funktioniert er nicht. Wenn ich aber in den Bereich, den ich prüfen und ändern will, vorher irgendetwas hineinschreibe und zwar in jede Zelle des gewünschten Bereiches, den Inhalt der Zellen wieder lösche, dann funktioniert auch der Code wieder.
Könnt ihr das reproduzieren, oder ist das bloß bei mir so!
Servus

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Seltsames verhalten von Excel
24.01.2018 17:25:50
Excel
Hallo Herbert,
bei mir ist das genauso.
Gruß
Nepumuk
AW: Seltsames verhalten von Excel
24.01.2018 17:27:12
Excel
Hallo Nepumuk,
das ist doch seltsam oder gibt es dafür eine rationale Begründung?
Servus
AW: Seltsames verhalten von Excel
24.01.2018 17:35:39
Excel
Hallo Herbert,
es wird noch mysteriöser, selbst wenn nur eine Zelle im markierten Bereich einen Inhalt hatte werden dann alle Zellen mit einem X gefüllt. Ich selbst benutze Excel 2013, morgen Vormittag teste ich mal mit Excel 2010.
Einen Grund kann ich dir nicht nennen.
Gruß
Nepumuk
AW: Seltsames verhalten von Excel
24.01.2018 17:38:12
Excel
Hallo Nepumuk,
genau das habe ich auch bereits festgestellt. Und 2010 kannst Du Dir sparen, damit habe ich auch schon erfolglos getestet.
Hat denn dieses Verhalten sonst bisher niemand anderes festgestellt?
Servus
Anzeige
AW: Seltsames verhalten von Excel
24.01.2018 18:06:33
Excel
Hi,
anscheinend erkennt Excel eine jungfräuliche Zelle noch nicht als
"Zelle mit keinem Inhalt". Eine Zelle braucht also wohl erst eine Art Initialisierung
um als Zelle mit "keinem Inhalt" erkannt zu werden: Das Löschen von Inhalt.
Die beiden "" stehen ja auch eigentlich nicht für leer sondern für den
verbliebenen Rest von Etwas.
Die Abfrage If Is(Empty) führt deshalb auch zum Ziel (allerdings auch nicht mit Selection.Replace)
Ist zwar spooky aber letztlich eine Frage der (ungewollten) Programmierung.
Gruß
Klaus
Scheint in der Tat mit 'jungfräulichen Zellen' …
24.01.2018 19:43:55
Luc:-?
…zu tun zu haben, Klaus & all,
was ich mit dem Ereignis _SelectionChange getestet habe (Xl14/2010). Anderenfalls fktioniert das.
Ansonsten teile ich deine Ansicht, denn in VBA gibt's einen Unterschied zwischen Empty und Leer-String. In einem Variant-Array wird bei Wiedergabe auf dem Blatt (ebenso wie eine LeerZelle in Fmln) ein leerer Wert idR als 0, nicht "" (bzw ' → nur TextPräfix, oder Chr(0)) interpretiert. Ein Vgl mit allen diesen Werten fktioniert bei LeerZellen aber nicht (mehr?) in Replace. Da sowohl für die Empty- als auch Null-Abfrage in VBA spezielle Fktt benutzt wdn müssen, scheint das auch die Erklärung dieses „Phänomens“ zu sein.
Nebenbei, die Syntax lautet so, Klaus (für das o.g. Ereignis):
If IsEmpty(Target) Then Target = "X"
Und Replace kann dafür tatsächlich nicht eingesetzt wdn. Und ja, das hat mit Initialisierung zu tun (wie bei vbVariablen).
Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
Allerdings würde das auch so fktionieren: …
24.01.2018 19:55:13
Luc:-?
If Target = "" Then Target = "X"
Erklärt dann aber das Ganze nur zT. Hier würde dann Daniels Erklärung wohl den Hptgrund (für Replace-Versagen) liefern.
Luc :-?
kann ich bestätigen
24.01.2018 17:32:00
KlausF
Hallo Herbert,
ist bei mir auch so:
Excel mac 2001 bis 2011
Gruß
Klaus
UsedRange!!!
24.01.2018 18:26:13
Daniel
Hi
Das Phänomen lässt sich ganz einfach erklären.
Es liegt an der sog. UsedRange.
Du siehst zwar das ganze Blatt mit seinen 1,04 Mio Zeilen und 16 Tsd Spalten, um aber Speicherplatz zu sparen ist intern nur eine Blattgröße vorhanden, die den Zellbereich der tatsächlich genutzten Zellen abdeckt, das ist die sogenannte "UsedRange".
Diese wird beim Arbeiten mit Excel immer wieder angepasst, aber bei einem neuen leeren Blatt ist sie noch nicht vorhanden, bzw ganz klein.
Vergrößert wird die UsedRange immer, eine Verkleinerung findet jedoch nur beim Zeilen- oder Spaltenlöschen statt, bzw sie wird beim Öffnen aktualisiert.
Dh. sie kann Mal größer sein als benötigt, aber niemals kleiner.
Die von dir verwendete Funktion .Replace wird dann nur auf die UsedRange angewendet, was in der Regel auch Sinnvoll ist, denn außerhalb der UsedRange können keine Werte stehen und Excel müsste ansonsten jedesmal 2^34 Zellen sinnlos durchsuchen.
Auch andere Funktion wie bspw die .SpecialCells arbeiten immer nur mit der UsedRange und nicht mit dem ganzen Zellbereich.
Gruß Daniel
Anzeige
Allerdings wird der UsedRange auch durch ...
24.01.2018 20:01:56
Luc:-?
…Löschen aller Inhalte der letztbenutzten Spalten u/o Zeilen, nicht nur ihr Entfernen, verkleinert, Daniel.
Gruß, Luc :-?
Inhalte löschen reicht nicht
24.01.2018 20:20:52
Daniel
solange die Zellen noch formatiert sind, müssen nicht nur alle Inhalte, sondern auch alle Formate gelöscht werden Luc :-?, da auch Zellformate in der Usedrange berücksichtigt werden.
Gruß Daniel
Meinte ich m. alle (fett) Inhalte (1.MenüPkt)! owT
24.01.2018 21:17:25
Luc:-?
:-?
was du meinst kann keiner wissen.
24.01.2018 22:29:44
Daniel
entscheidend ist was du schreibst.
Gruß Daniel
Der Menüpkt heißt 'alle löschen' und stell dich …
25.01.2018 01:39:58
Luc:-?
…nicht immer dumm, ein ZellFormat ist schließlich genauso eine ZellEigenschaft wie ihr Wert. Das weißt du ja und deshalb sollte dir ein extra hervorgehobenes alle doch reichen. Anderenfalls wäre Inhalte hervorgehoben worden. Außerdem kam darauf schon vor mindestens 1 Jahr (wahrscheinlich länger) die Sprache und damals hatte ich das schon erwähnt.
Soll ich dich in Zukunft als Anfänger, dem man alles haarklein und immer wieder auseinander setzen muss, betrachten…‽
Luc :-?
Anzeige
Der Menüpkt heißt 'alle löschen' und …
25.01.2018 09:37:43
Daniel
und der nächste Menüpunkt heißt "Formate löschen" und der übernächste "Inhalte löschen"
das "Inhalte" bezieht sich also auf andere Zelleigenschaften als "Formate"
Es mag sein, dass für dich "Inhalt" und "Zelleigenschaft" das gleiche ist, für Excel ist es das nicht, die "Inhalte" sind nur eine Teilmenge der Zelleigenschaften und nicht alle.
zu deiner Frage: Ja ich bitte darum.
ich denke, es hilft unserer Beziehung, wenn du dich zukünftig präziser und weniger missverständlich ausdrückst.
denke auch immer daran, dass du in einem öffentlichen Forum bist und deine Beiträge von allen gelesen werden können, auch von absoluten Anfängern, die erst seit heute in diesem Forum sind und nicht wissen können, was du irgendwann mal zu irgendwem gesagt hast.
Gruß Daniel
Anzeige
Gratuliere, du hast meine Erwartungen an ...
25.01.2018 19:28:21
Luc:-?
…eine wahrscheinliche AW deinerseits sogar übererfüllt, Daniel,
und keinen der von mir erwarteten Pktt vergessen! :-]
Hättest du mir das geschrieben, was ich dir (in Kurzform) schrieb, hätte ich ggf so geantwortet: Ah, ja, OK, hatte ich zu erwähnen vergessen und das dann ggf selber präzisiert. Das ist halt ein wesent­licher Unter­schied zwischen uns, denn so etwas kommt bei dir höchst selten vor (im Ggsatz zu aus­führ­lich­sten Erläu­te­rungen ;-]). Aber damit bist du nicht allein, denn die Fähigkeit zur Selbst­Kor­rek­tur ist nicht gerade häufig*. Einstein konnte das, etliche seiner Kollegen - auch berühmte - nicht…
* Bei mir im Prinzip ja, aber nicht, wenn ich dafür keinen Grund habe bzw sehe.
Luc :-?
Anzeige
macht sinn
25.01.2018 08:41:31
KlausF
Hi,
ja, die UsedRange macht sinn. Allerdings hat der Programmierer übersehen,
dass sich die UsedRange nicht nur auf die Vergangenheit beziehen darf.
Wenn etwas selektiert ist muss es auch möglich sein, jede Operation auszuführen,
die Excel anbietet. Eindeutig ein logischer Fehler. Eine Selektion gehört
zur UsedRange.
Gruß
Klaus
AW: Seltsames verhalten von Excel, so geht es
24.01.2018 18:38:24
Excel,

If Cells.SpecialCells(xlCellTypeLastCell).Row 

Gruß Willi
AW: Seltsames verhalten von Excel, so geht es
24.01.2018 19:14:11
Excel,
Hallo Willi,
das erscheint mir logisch, das werde ich morgen mal ausprobieren. Danke 🙏
Servus
AW: Seltsames verhalten von Excel, so geht es
25.01.2018 09:29:55
Excel,
Hallo Willi,
so geht es leider doch nicht! Auf NULL reagiert er genau so wenig wie auf "".
Servus
Anzeige
Dann hast Du vielleicht ein anderes Excel? :o)
25.01.2018 10:07:31
Willi
Hallo Herbert,
wenn ich ein neues Sheet erstelle, einen Bereich markiere und obigen Code ausführen lasse, dann bekomme ich das von Dir gewünschte Ergebnis. Ohne 'NULL' zu setzen passiert nichts.
Da bin ich nun bei Deinem Problem etwas ratlos ...
Deshalb Gegenfrage(n):
Wird diese Codestelle auch wirklich ausgeführt?
Bist Du den Code mal mit F8 durchgegangen?
Oder vielleicht kannst Du die betreffende Datei mit anonymisierten Daten mal hochladen?
Gruß Willi
AW: Dann hast Du vielleicht ein anderes Excel? :o)
25.01.2018 10:18:20
Herbert
Hallo Willi,
"wenn ich ein neues Sheet erstelle, einen Bereich markiere und obigen Code ausführen lasse, dann bekomme ich das von Dir gewünschte Ergebnis." ich leider nicht!
Ich brauche auch keine anonymisierte Datei hochladen, denn es ist ein einfaches neues AB, in dem ich die Zellen A1:F1 markiert und dann Deinen Code ausgeführt habe. Leider passiert nix!
Und selbstverständlich habe ich den Code mit F8 getestet. Auch nix!
Servus
Anzeige
Dann habe ich im Moment leider keine weitere Idee
25.01.2018 10:48:20
Willi
Hallo Herbert,
ich habe hier lokal MS Office 365 ProPlus im Einsatz, habe diesen Code gerade eben aber auch mal mit MS Office 2010 getestet.
In beiden Fällen kann ich das von Dir beschriebene Verhalten nachvollziehen.
Mit dem weiter oben geposteten Code erhalte ich aber in beiden Excel-Versionen immer das von Dir gewünschte Ergebnis.
Entschuldige bitte, aber im Moment habe ich da leider keine weitere Idee mehr, um Dir bei diesem Problem helfen zu können.
Deshalb kam auch meine Frage nach F8 und ob die Codestelle 'Selection.Cells(Selection.Cells.Count) = Null' auch ausgeführt wird.
An Deiner Stelle würde ich testweise dort statt NULL mal "Test" hinschreiben, um zu sehen was dann passiert. Aber vielleicht hast Du das auch schon getan ...
Letzte Ideen, ohne Dir zu Nahe treten zu wollen:
Bist Du auch sicher, dass dieser Code auch in dem neuen Arbeitsblatt ausgeführt wird?
Hast Du den Code mal in einem ganz jungfräulichem Workbook ausgeführt? Funktioniert er dort auch nicht?
Gruß Willi
Anzeige
AW: Dann habe ich im Moment leider keine weitere Idee
25.01.2018 11:28:41
Daniel
Hi
naja, wenn man auf einem neuen Blatt arbeitet, dann sollte einem das als Programmierer bekannt sein und dann schreibt man einfach Selection.Value = "x", weil man eben weiß, dass alle Zellen leer sind.
spannender ist da eher die Frage, was passiert, wenn man ein Blatt mit Daten bearbeiten will, aber es sein kann, dass die Selektion Zellen umfasst, die außerhalb der Usedrange liegen.
Weiterhin sollte man berücksichtigen, dass eine Selektion nicht immer ein rechteckiger lückenloser Zellblock sein muss, sondern auch aus mehreren einzelblöcken bestehen kann Range("A1:C3,E5:G7") und dann verweist der Ausdruck Selection.Cells(Selection.Cells.Count) auf eine falsche Zelle (im Beispiel nicht auf G7, sondern auf C6)
ein einfacher Workaround, um sicher zu stellen dass alle selektierten Zellen zur Usedrange gehören, wäre folgender:
- Ändere irgend ein Zellformat in der Selektion.
Da auch das Zellformat die Usedrange beeinflusst, wird dadurch die Usedrange auf die Selektion erweitert.
Hinterher kann man das Zellformat wieder auf den Ursprungswert zurück setzen.
Hierbei sollte man natürlich ein Zellformat verwenden, welches auf dem Blatt ansonsten nicht verwendet wird.
Beispiel:
Sheets.Add
Range("A1:C3,E5:G7").Select
Selection.Font.OutlineFont = True
Selection.Replace "", "x", xlWhole
Selection.Font.OutlineFont = False
Gruß Daniel
AW: Dann habe ich im Moment leider keine weitere Idee
25.01.2018 11:50:21
Willi
Hi zurück,
Du hast Recht, an die Mehrfachauswahl hatte ich jetzt bei der Frage überhaupt nicht gedacht.
Dafür ist Dein Code besser geeignet.(Wenn er denn vorher keinen 'OutlineFont' enthält, was aber dann natürlich entsprechend anpassbar wäre. ;o)))
Ich erspare mir daher eine Anpassung meines Vorschlages.
"spannender ist da eher die Frage, was passiert, wenn man ein Blatt mit Daten bearbeiten will, aber es sein kann, dass die Selektion Zellen umfasst, die außerhalb der Usedrange liegen."
Genau das funktionierte schon mit 'meinem' Code.
Aber unabhängig davon bin ich verwundert, dass sich bei Herbert gar nichts tut.
Gruß Willi
AW: Dann habe ich im Moment leider keine weitere Idee
25.01.2018 12:36:15
Werner
Hallo,
was hälst du davon?
Public Sub aaa()
For Each Zelle In Selection
Zelle.Value = " "
Next Zelle
With Selection
.Replace What:=" ", Replacement:="X"
End With
End Sub
Gruß Werner
Nicht viel, dieser Code überschreibt alle Zellen
25.01.2018 12:57:26
Willi
Hallo Werner,
dann könntest Du aber auch gleich in der ersten Schleife ein X setzen, wenn der Code schon alles überschreibt. Dieses komplette Überschreiben ist aber ausdrücklich nicht gewünscht.
Es geht hier vorrangig um die mit Replace nicht befüllbaren Zellen, welche zum Zeitpunkt des Aufrufes außerhalb des UsedRange liegen.
Daniels Vorschlag mit der "Holzhammermethode" überall 'IrgendeineFormatierungSetzenUndWiederEntfernen' funktioniert.
Ebenso das 'Initialisieren' mit NULL im letzten Feld (jetzt schon bei einer Area und auch wenn ich diesen Code noch an die Mehrfachauswahl anpassen würde)
Zumindest bei mir auf dem Rechner.
Ich gehe davon aus, dass unser Vorschlag auch bei anderen funktioniert, sonst hätte sich noch jemand dementsprechend gemeldet.
Eigentlich warten wir derzeit auf die Rückmeldung von Herbert.
Gruß Willi
AW: Nicht viel, dieser Code überschreibt alle Zellen
25.01.2018 13:30:28
Herbert
Hallo Werner,
auch das funktioniert natürlich perfekt, wie die anderen Tipps auch. Doch dazu muss man aber auch erst einmal wissen, dass eine dieser Lösungen benötigt wird. Jedenfalls Nepumuk und ich war dieses Szenario nicht bekannt. Aber trotzdem vielen Dank für Deine/Euere Hilfe!
Servus
Funktioniert perfekt? - Dann ist es gut :o)
25.01.2018 13:40:57
Willi
Hallo Herbert,
vorhin hattest Du noch geschrieben:
"... denn es ist ein einfaches neues AB, in dem ich die Zellen A1:F1 markiert und dann Deinen Code ausgeführt habe. Leider passiert nix!"
Wenn also nun alle diese Codeschnipsel funktionieren, dann können wir das Problem als 'bekannt' und weitgehend erledigt betrachten. Verwunderlich/Ärgerlich bleibt es dennoch irgendwie.
Aus 'Replace'-Funktionssicht allein ist es aber verständlich, denn außerhalb der UsedRange gibt es nichts zu ersetzen.
Gruß Willi
UsedRange ...
29.01.2018 09:18:49
Uwe
Hallo Herbert,
... und seine Tücken war schon öfter ein Thema. Auch schön fies ist es, wenn der nicht in der ersten Zeile beginnt. :-)
Und hier noch ein Vorschlag:
Sub aaa()
With Selection
.Formula = .Formula
.Replace What:="", Replacement:="X"
End With
End Sub
Gruß Uwe
AW: UsedRange ...
29.01.2018 10:24:36
Herbert
Hallo Uwe,
vielen Dank für Deine Lösung, die natürlich genauso gut funktioniert.
Servus und bis "Hauenstein"! Ich freu mich! Grüße auch an Heike!
Palz
29.01.2018 10:57:06
Uwe
Hallo Herbert,
ist ja nicht mehr sooo lang. :-) Danke und auch Grüße an Angelika.
Gruß Uwe
Nix.
25.01.2018 12:58:05
Daniel
Da kannst du auch gleich schreiben
Selection.Value = "x"
Ansonsten fehlt in der Schleife die Abfrage, ob die Zelle leer ist, und wenn ja, dann schreibt man gleich den richtigen Wert rein und braucht kein Replace.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige