Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
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
Formel mit Text Wert ersetzen
20.04.2021 11:42:51
Slava
Guten Tag,
ich möchte in einem Tabellenblatt in Zellen , wo die Formeln bestimmten Text beinhalten z.B: "=@DBGET", bei diesen Zellen die Formeln löschen und Ergebnis der Formel als Wertekopie einfügen. Es soll das ganze Tabellenblatt durchgesucht und ersetzt werden. Dazu habe ich folgendes Makro zusammengestellt

Sub MIS__Formel_suchen()
Dim c As Range
Dim firstAddress As String
With Worksheets(1).Range("a1:D500")
Set c = .Find(What:="=@DBGET", After:=ActiveCell, LookIn:=xlFormulas2, _
LookAt:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Cells(c.Row, 1) = c
Set c = .Find(What:="=@dbget", After:=ActiveCell, LookIn:=xlFormulas2, _
LookAt:=xlPart)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
End Sub
Das Makro stoppt aber immer wieder bei dem Schritt:
Set c = .Find(What:="=@dbget", After:=ActiveCell, LookIn:=xlFormulas2, _
LookAt:=xlPart)
Kann mir jemand bitte helfen?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
siehe FindNext. owT
20.04.2021 12:06:44
Rudi
AW: Formel mit Text Wert ersetzen
20.04.2021 14:00:00
Daniel
Hi
der Code sieht eigentlich korrekt aus, bis auf: ist xlFormula2 der passende Parameter (Mangels Excel 365 kann ich das nicht beurteilen)
was auch ein Fehler sein, kann ist, dass die Zelle, die du beim Parameter AFTER angibst, auch Teil des Durchsuchten Bereichs sein muss, dh sie muss auf dem selben Tabellenblatt liegen, das du auch durchsucht (was bei dir nicht sichergestellt ist) und auch im passenden Zellbereich! auch das ist bei dir mit ActiveCell nicht sichergestellt.
beim ersten .Find kannst du den Parameter AFTER einfach weglassen, die Suche beginnt dann automatisch nach der ersten Zelle des angegebenen Zellbereichs.
beim zweiten .Find in der Do-Schleife müsstest du dann After:=c verwenden, damit diese korrekt läuft
Sollte das nicht helfen, müsstest du die Datei mal hochladen und uns auf jeden Fall mitteilen, wie die Fehlermeldung lautet, die du bekommst, sowie noch sagen, bei welchem Set = der Fehler auftritt, du hast das ja 2x im Code, dh
ansonsten passt das Makro nicht unbedingt zu einer Beschreibung:
1. du sagst: "es soll das ganze Tabellenblatt durchsucht werden". dann musst du aber auch als Zellbereich für das .Find das ganze Blatt angeben und nicht nur einen kleinen Bereich, du hast nur With Worksheets(1).Range("a1:D500"), für das ganze Blatt müsste das aber sein: With Worksheets(1).Cells
2. du willst bei den gefundenen Zellen die Formel durch den Wert ersetzen. das machst du aber nicht, du schreibst den Wert der Zelle immer in die Spalte A der jeweiligen Zeile. Liegt die Formel in einer anderen Spalte, bleibt die Formel erhalten.
daher müsstest du anstelle von Cells(c.Row, 1) = c das hier schreiben, um die Formel zu eleminieren: c.Formula = c.Value
wenn du die Formeln tatsächlich ersetzt, dann reicht auch folgender Code (sofern das mit dem xlFormula2 passt)

dim c as range
With Worksheets(1).Cells
Do
set c = .Find(What:="=@DBGET", LookIn:=xlFormulas2, LookAt:=xlPart)
if c is nothing then exit do
c.formula = c.value
Loop
End with
Gruß Daniel
Anzeige
AW: Formel mit Text Wert ersetzen
20.04.2021 16:32:04
Slava
Danke Daniel,
das funktioniert einwandfrei!
Gruß
Slava
AW: Formel mit Text Wert ersetzen
20.04.2021 16:52:26
Daniel
danke für die Rückmeldung.
kleiner tipp am Rande: Checkboxen auf Webseiten nicht einfach anhaken, sondern erstmal lesen, was daneben steht.
Gruß Daniel
AW: Formel mit Text Wert ersetzen
20.04.2021 21:46:02
Yal
Hallo Slava,
tja, der gute alte MIS Alea. Gibt es den noch, oder hat Infor es kaputt verstellt?
Da fast alle Zellen in den gesuchten Bereich ein DBGet haben, ist es vielleich schneller, wenn Du die Zellen mit Formeln isoliert und diese auf "=@DBGet" prüfst

Sub MIS_DBGet_deformulieren()
Dim Z
For Each Z In Range("A1:D500").SpecialCells(xlCellTypeFormulas).Cells
If Left(Z.FormulaLocal, 7) = "=@DBGET" Then
Z = Z.Value 'durch Wert ersetzen
End If
Next
End Sub
VG
Yal
Anzeige
Applicatio.Screenupdating = True / False ...
20.04.2021 21:58:02
Yal
.. davor und danach, um richtig zu beschleunigen.
Ich hatte damals eine "half-Freeze" Makro gebaut: es hat bei alle aktive Elemente in eine User Defined Function (UDF) umgestellt, die nur die Anzeige der ersten Parameter gemacht hat, aber alle andere Parameter behalten.
also für ein =DBGET($A$1;$A$2;$A5;B$4) dass 1.234 herausgegeben hat
hat es einen
=DBGET_hf(1234;$A$1;$A$2;$A5;B$4)
gemacht. Die UDF DBGET_hf hat nur die Aufgabe 1234 anzuzeigen.
Mit natürlich die Umkehr-Makro, dass alles wieder reaktivieren könnte.
VG
Yal
AW: Formel mit Text Wert ersetzen
21.04.2021 07:47:45
Slava
Hallo Yal,
ja, der alte MIS gibt es noch :-) und ist auch sehr hilfreich.
Danke für den Tip, das ist eine gute Idee.
Auch der Vorschlag mit half-Freeze" Makro.
Gruß
Slava
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige