ich möchte eine Formel mit VBA dynamisch generieren.
Nachfolgender Code erstellt im Direktfenster die gewünschte Formel. Wenn ich
diese in die Zelle kopiere funktioniert die Formel wie erwartet.
Die beiden Routinen "Date2Julian" und "Str2Hrs" sind zwei (public)
Funktionen im Modul1 und erwarten die Übergabe der Zellwerte.
Wenn ich allerdings das Worksheet_Change() Ereigniss auslöse, bekomme ich
den Fehler: " Laufzeitfehler: 1004 Anwendungs- oder objektdefinierter
Fehler".
Wo liegt mein Denkfehler.
Vielen Dank für jeden Tipp
Grüsse
Jürgen Heyn, Wilhelmshaven
'Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print "Worksheet_Change() ..."
Dim rValid As Range
Dim rCell As Range
Dim sCellDate As String
Dim sCellTime As String
Dim sFormula As String
Dim rRange As Range
Application.ScreenUpdating = False
If Target.Row >= 8 And Target.Row <= 99 Then
Select Case True
Case Target.Column = 4
Set rValid = Range("D8:D99")
For Each rCell In rValid
If rCell = Target Then
sCellDate = "B" + CStr(Target.Row)
sCellTime = "D" + CStr(Target.Row)
sFormula = "=Wenn(" + sCellTime + "<>" + Chr(34) + Chr(34)
+ ";Date2Julian(" + sCellDate + ";Str2Hrs(" + sCellTime + "));0)"
Debug.Print sFormula
ActiveSheet.Range(Cells(Target.Row, Target.Column +
1)).Formula = sFormula
Exit Sub
End If
Next rCell
End Select
End If
Application.ScreenUpdating = False
End Sub
.formulalocal = WENN(...
oder
.formula = IF(... [mit Kommata als Parametertrennzeichen]
HTH,
Bernd
dank für Deinen Beitrag.
Leider hat sich dadurch nichts geändert. Der Fehler wird nach wie vor
ausgelöst:
sCellDate = "B" + CStr(Target.Row)
sCellTime = "D" + CStr(Target.Row)
'sFormula = "=WENN(" + sCellTime + "<>" + Chr(34) +
Chr(34) + ";Date2Julian(" + sCellDate + ";Str2Hrs(" + sCellTime + "));0)"
sFormulaE = "=IF(" + sCellTime + "<>" + Chr(34) + Chr(34)
+ ",Date2Julian(" + sCellDate + ",Str2Hrs(" + sCellTime + ")),0)"
Debug.Print sFormulaE
Application.EnableEvents = False
'ActiveSheet.Range(Cells(Target.Row, Target.Column +
1)).FormulaLocal = sFormula
ActiveSheet.Range(Cells(Target.Row, Target.Column +
1)).Formula = sFormulaE
Application.EnableEvents = True
"Bernd P" <bplu...@gmail.com> schrieb im Newsbeitrag
news:1190727830.6...@22g2000hsm.googlegroups.com...
Aaah. I see what your problem is. Range takes a string, not a range object:
I would use
ActiveSheet.Cells(target.Row, target.Column + 1).Formula = sFormulaE
HTH,
Bernie
MS Excel MVP
"Bernd P" <bplu...@gmail.com> schrieb im Newsbeitrag
news:1190727830.6...@22g2000hsm.googlegroups.com...