HERBERS Excel-Forum - das Archiv
FormulaLocal - Fehler
Heinz

Guten morgen im Forum
Habe ein Makro Das mir zuerst Werte löscht. Das funktioniert.
Nur ab "With Range("C8:C38")" habe ich einen Fehler.
Ich möchte nach dem Löschen in C8:C38 die Formel einfügen lassen.
Könnte mir bitte jemand weiterhelfen ?
Gruß
Heinz
Option Explicit
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
If MsgBox("Wollen sie die alle Daten löschen ?", vbQuestion + vbYesNo, _
" Nachfrage Datenbank Aktualisierung !") = vbNo Then Exit Sub
ActiveSheet.Unprotect
Range("C8:C38,D8:D38,H8:H38,I8:I38,N8:N38,O8:O38").ClearContents
With Range("C8:C38")
.FormulaLocal = "=IF(WEEKDAY(RC[-2])=6,""PT/Woche"","""")"
ActiveSheet.Protect
Application.ScreenUpdating = True
End With
End Sub

FormulaLocal - Fehler --> FormualaR1C1
Björn

Hallo,
versuche es mal mit FormulaR1C1 statt FormulaLocal.
Das müsste klappen.
Gruß
Björn
AW: FormulaLocal - Fehler
Oberschlumpf

Hi Heinz
der With/End With-Bereich
With Range("C8:C38")
.FormulaR1C1 = "=IF(WEEKDAY(RC[-2])=6,""PT/Woche"","""")"
ActiveSheet.Protect
Application.ScreenUpdating = True
End With
funktioniert bei mir tadellos.
In alle Zellen (C8:C38) wird die Formel gesetzt - entsprechend angepasst - und der Blattschutz wird auch gesetzt.
Ciao
Thorsten
lach...danke Björn!
Oberschlumpf

...hatte gar nicht gesehen, dass der Makrorecorder eben genau aus .FormulaLocal ein .FormulaR1C1 "machte" :-)
Ciao
Thorsten
AW: Danke an Björn B & Oberschlumpf
Heinz

Hallo Ihr beiden.
Ich bedanke mich recht herzlich,bei Euch beiden. !!!
Funkt.wie gewollt.
Noch einen schönen Tag
Gruß
Heinz
AW: Zusatzfrage
Heinz

Hallo
Wäre es eventuell möglich die Formel als Wert eintragen?
Also in C8:C38 nicht die Formel, sondern wenn Freitag, dann denn Wert "PT/Woche" einzutragen ?
Gruß Heinz
Zusatzantwort
Björn

Hallo,
da gibt es 2 Möglichkeiten.
Entweder Du prüfst in einer Schleife Zelle für Zelle und schreibst bei Bedarf den Wert in den Zielbereich, oder Du machst es wie bisher und machst am Ende einmal Kopieren und Werte einfügen.
Je nachdem, wieviele Zeilen es sind, kann die Variante 1 lange dauern. bei deinen 30 macht es aber kaum nen Unterschied. Würde dann so aussehen:

Dim zeile As Integer
For zeile = 8 To 38
If Weekday(Cells(zeile, 1).Value) = 6 Then Cells(zeile, 3).Value = "PT/Woche"
Next zeile
Gruß
Björn B.
AW: Zusatzantwort
Heinz

Hallo Björn
Genial !!!
Recht herzlichen Dank
Gruß
Heinz
kürzer..
Björn

.. geht das auch noch.
Da hier im With-Bereich nur 1 Zeile steht, kann man sich den ganz sparen.
Statt:
With Range("C8:C38")
.FormulaR1C1 = "=IF(WEEKDAY(RC[-2])=6,""PT/Woche"","""")"
ActiveSheet.Protect
Application.ScreenUpdating = True
End With
wäre folgendes zu schreiben:

Range("C8:C38").FormulaR1C1 = "=IF(WEEKDAY(RC[-2])=6,""PT/Woche"","""")"
ActiveSheet.Protect
Application.ScreenUpdating = True
Gruß
Björn