Hallo Allen,
Habe eine Tabelle mit mehreren Blättern.
In diesen Blättern befinden sich viele Formeln und externe Links(Zugriff auf Buchhaltungsprogramm) die alle mit „=HPVAL…“ beginnen.
Da ich die Datei auch an Personen ohne Zugriff auf das Buchhaltungsprogramm schicke, möchte ich diese Links mit Werten hart überschreiben alle üblichen Formeln z.B. Summen innerhalb des Blatts sollen erhalten bleiben.
Mit Replace komme ich nicht weiter.
Vielleicht hilft ein Makro das den Zellbereich von A1 bis AZ1000 durchsucht und falls es den Befehl =HPVAL … findet sollten die Werte hart eingeschrieben werden. Das Macro sollte über mehrere Blätter anwendbar sein.
Hoffe ich konnte mein Problem klar schildern.
Vielen Dank für die Antworten
Grüße Wolfgang
Hallo Wolfgang.
Hab dir schnell was gebastelt.
Die Sub überprüft den Bereich B1,B2,…,B10 auf =HPVAL, wenn gefunden wird, wird der „Value“-Wert in den Cell.Value geschrieben.
Hoffe es klappt, getestet unter MS Office 2003…
Schaus dir an:
Sub checkFormula()
Dim cell As Range
Dim need As String
Dim find As String
Dim newValue As Variant
find = "=HPVAL"
For Each cell In Range("B1:B10")
need = cell.FormulaLocal
newValue = cell.value
If (InStr(find, need) = 0) Then
cell.value = newValue
End If
Next
End Sub
Ist das das, was du suchtest??
Gruss,
Sebastian
Ist das das, was du suchtest??
Hallo Sebastian,
genau das suchte ich. Ich baue noch eine Schleife ein die alle Blätter durchsucht - fertig.
Bei größeren Suchbereichen dauert es etwas, aber nach einer Tasse Kaffee dürfte alles erledigt sein.
Nochmals Danke
Wolfgang
Hallo Sebastian,
zu früh gejubelt.
Warum auch immer, aber es werden alle Formeln mit Werten überschrieben, auch die die kein =HPVAL enthalten.
Grüße
Wolfgang
Warum auch immer, aber es werden alle Formeln mit Werten
überschrieben, auch die die kein =HPVAL enthalten.
Hi Wolfgang,
das Warum ist mir klar, der Code wird ausgeführt wenn Instr nichts findet (= 0)
Ändere mal =0 in 0
Und da du scheints selbst codieren willst, schau mal bei Specialcells nach Zellen mit Formeln.
Mein ungetester Ansatz sähe so aus:
for each ws in worksheets
'weil fehler wenns keine Formelzellen gibt, Specialcells ist immer
'heikel wenns nix findet und auch sonst sehr unberechenbar
on error resume next
for each Zelle in ws.usedrange.specialcells(xltypeformulas)
if instr (Zelle.formulalocal, „=HPVAL“) then Zelle.Value =Zelle.Value
next zelle
next ws
Gruß
Reinhard
Hallo Reinhard, Hallo Sebastian,
Nochmals vielen Dank.
Reinhard, mit deinem Ansatz kam ich nicht zurecht, aber Danke für den Tip mit .
Sebastian, es hat auch mit erst funnktioniert als ich Reihenfolge von „need“ und „find“ vertauscht hatte.
Ich muß mich mit der Befehlssyntax mal vertraut machen.
Fazit: Es läuft und bringt das gewünschte Ergebnis.
Ein schönes Wochenende wünsche ich allen Helfern und Hilfesuchenden.
Wolfgang