wydy
Goto Top

Mit VBA Zellen durchsuchen und gewisse Einträge ersetzen, ohne die Formel zu beeinflussen

Wie kann ich alle Zellen nach einer bestimmten Zeichenkette durchsuchen, ohne die Formeln abzuändern

Moin Leute,
ich erstelle zurzeit eine Excel "Vorlage" und möchte in dieser mit VBA eine Funktion einbauen, wo in an allen wichtigen Stellen das gewünschte Jahr eingetragen wird. Man hat auf der Startseite eine Zelle, in der man die Jahrzahl eingeben kann und daneben einen Button. Wird der Button bestätigt, sollen alle Zellen nach dem Wert "TempDatum" durchsucht und der Wert von der Zelle dort eingetragen werden. Jedoch funktioniert das ganze nicht wirklich. In normalen Zellen wird der Wert ohne Probleme ersetzt. Sobald es sich jedoch um eine Formel handelt, spielt das ganze verrückt. Ist die Formel ungültig, bricht das Programm mit der Fehlermeldung: Typen unverträglich ab. Ist die Formel jedoch gültig, wird die Formel gelöscht und nur ein Wert in der Zelle eingetragen. Gibt es eine Funktion um das Ganze zu lösen? Was mache ich falsch?
Hier mal ein paar Beispiele, damit ihr seht, was ich meine:
Neuer Wert: 2009

Das ist ein Text TempDatum -> Das ist ein Text 2009
='C:\Daten\TempDatum\[Daten.xls]Sheet1!A1 -> ='C:\Daten\2009\[Daten.xls]Sheet1!A1
Das erste Beispiel funktioniert auch, nur wird beim zweiten Beispiel bei mir die ganze Formel ersetzt.

Hier mal mein bisheriger Quelltext:
Sub QuelleEdit()
   Dim intRow As Integer
   Dim intColumn As Integer
   Dim intPosition As Integer
   Dim stringText As String
      
   stringOld = "TempDatum"  
   stringNew = Cells(9, 4)
   'Ganze Formular durchsuchen  
   For intRow = 1 To 37
      For intColumn = 1 To 78
        'Inhalt ersetzen  
        Cells(intRow, intColumn) = Replace(Cells(intRow, intColumn), stringOld, stringNew)
      Next intColumn
   Next intRow
End Sub
Ich hab's auch schon mit WorksheetFunction.Substitute versucht.

Content-ID: 121899

Url: https://administrator.de/contentid/121899

Ausgedruckt am: 15.11.2024 um 11:11 Uhr

bastla
bastla 03.08.2009 um 13:55:55 Uhr
Goto Top
Hallo wydy!

Versuch's mit folgender Zeile 13:
Cells(intRow, intColumn).Formula = Replace(Cells(intRow, intColumn).Formula, stringOld, stringNew)
Was mache ich falsch?
Wenn Du für Cells() keine Eigenschaft angibst, wird defaultmäßig nicht "Formula", sondern "Value" verwendet.

Grüße
bastla
wydy
wydy 03.08.2009 um 14:48:42 Uhr
Goto Top
Danke für die Hilfe, mit Cells.Formula hats geklappt.
76109
76109 03.08.2009 um 15:04:53 Uhr
Goto Top
Hallo wydy und bastla!

Eine For Each-Schleife sollte ausreichen:
    Dim c As Range   
    For Each c In Range("A1:BZ37") 'Zeile 1-37, Spalte 1-78  
        c.Formula = Replace(c.Formula, stringOld, stringNew)
    Next

Gruß Dieter