Microsoft Excel

Herbers Excel/VBA-Archiv

nach Worksheet_Change werden UDF nicht ausgewertet

Betrifft: nach Worksheet_Change werden UDF nicht ausgewertet von: Peter
Geschrieben am: 09.07.2007 23:01:08

... und Geschwindigkeitsproblem

Guten Abend
Mit Hilfe des Forums habe ich mein Worksheet_Change nun hingekriegt. Ich habe jedoch noch ein Folgeproblem und ein Geschwindigkeitsproblem

1. Folgeproblem
In meinem Workbook habe ich verschiedene Formeln, wo ich die Function KEINFEHLER2 (vgl. ganz unten) verwende. Diese Funktion gibt als Ergebnis das erste Argument aus, das nicht einen Fehler ergibt. Nun ist das Problem entstanden, dass nach Ablauf meines Ereignismakros diese Formeln alle den Fehlerwert #Wert ergeben, bis ich in die entsprechende Bearbeitungszeile klicke, womit das Ergebnis bei diesen Formeln auch wieder stimmt. Gibt es eine Möglichkeit, dass diese Function auch nach Ablauf meines Ereignismakros ohne Bemühen der Beareitungszeile funktioniert?

2. Geschwindigkeitsproblem
Das Ereignismakro benötigt etwa 30 Sekunden, bis es abgelaufen und die Sanduhr weg ist. Gibt es eine effizientere Methode, diese Formel im Bereich einzusetzen oder ist diese Bearbeitungszeit normal (die gleiche Formel wird gegen Tausend Mal eingetragen)?

Danke für eine Rückmeldung

Gruss, Peter

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich2 As Range

Set Bereich2 = Range("EndDat") '.Address
If Not Intersect(Target, Bereich2) Is Nothing Then
   '=WENN(ODER(MONAT(G9)>MONAT(G8);JAHR(G8)>JAHR(G9));G9;"")  'entspricht der Formel in A9
   Range("EndDat") = "=IF(OR(MONTH(R[-1]C[6])>MONTH(RC[6]),YEAR(R[-1]C[6])>YEAR(RC[6])),RC[6],"" _
"") "
End If

End Sub


  

Betrifft: Wo ist die UDF? ___oT von: {Boris}
Geschrieben am: 09.07.2007 23:11:59




  

Betrifft: AW: nach Worksheet_Change werden UDF nicht ausgewe von: fcs
Geschrieben am: 09.07.2007 23:24:42

Hallo Peter,

versuche dich mal in Schritten folgender Form zu nähern:


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Bereich2 As Range

  Set Bereich2 = Range("EndDat") '.Address
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
  If Not Intersect(Target, Bereich2) Is Nothing Then
     '=WENN(ODER(MONAT(G9)>MONAT(G8);JAHR(G8)>JAHR(G9));G9;"")  'entspricht der Formel in A9
     Range("EndDat").Formula = _
      "=IF(OR(MONTH(R[-1]C[6])>MONTH(RC[6]),YEAR(R[-1]C[6])>YEAR(RC[6])),RC[6],"""") "
  End If
  Application.Calculation = xlCalculationAutomatic
  Application.EnableEvents = True
End Sub


Dabei werden die Ereignis-Makros und das automatische Berechnen während der Ausführung blockiert.

Eine Ursache für die lange Laufzeit ist vermutlich, dass jedes Eintragen des Textes in die Zellen des Bereiches einen Neustart der WorksheetChange - Ereignisprozedur auslöst.

Die automatische Berechnung sollte während der Makroausführung ebenfalls deaktiviert werden. Insbesondere dann, wenn die Eingabe in Zellen per Makro jeweils umfangreiche Berechnungen auslöst.

Da du in die Zellen eine Formel und keinen normalen Text eintragen willst, muss du auch die entsprechende VBA-Syntax verwenden. Diese sollte auch das Problem mit der Function bereinigen, die es scheinbar nicht mag, wenn sie Text verarbeiten soll.

Gruß
Franz


  

Betrifft: AW: nach Worksheet_Change werden UDF nicht ausgewe von: Peter
Geschrieben am: 10.07.2007 07:38:11

Hallo Franz
Deine Lösung hat alle Probleme auf einen Schlag gelöst.
Grossartig! Vielen Dank, Peter


 

Beiträge aus den Excel-Beispielen zum Thema "nach Worksheet_Change werden UDF nicht ausgewertet"