Clever-Excel-Forum

Normale Version: Formel nicht mehr mit Enter bestätigen, um Werte zu aktualisieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey Leute,

ich habe folgendes Problem.
Zur Veranschaulichung habe ich mal eine Beispieldatei angehängt.

[attachment=7029]

Beschreibung:
In einem Kombinationsfeld kann man zwischen verschiedenen Monaten auswählen und je nachdem, welcher Monat gerade ausgewählt ist, werden die Werte aus diesem Monat in einer separaten Zelle angezeigt (E7).

Dieser Wert aus E7 wird nun in einer anderen Zelle (VBA-Formel hinterlegt) zur Weiterberechnung herangezogen.
Problem ist jedoch... wenn ich den Monat ändere. z.B. auf März und sich der Wert in E7 verändert, dann wird diese Änderung nicht direkt in der VBA-Zelle wahrgenommen. Erst wenn ich in der Formelzeile die Zelle E7 mit Enter bestätige, wird der Wert ordnungsgemäß übertragen.

Ich hoffe meine Problematik ist klar geworden.
Ich brauche irgendeine Lösung, damit ich nicht für jeden Monat immer wieder Enter drücken muss, damit sich die Zelle, in der eine VBA-Formel angewendet wird, aktualisiert.

Bitte nicht falsch verstehen. Die Formeln funktionieren alle, nur die Aktualisierung findet nicht automatisch statt.
Selbstverständlich habe ich bereits in den Ordneroptionen die Funktionen auf automatisch gesetzt und es auch bereits mit absoluten Zellwerten probiert. Bringt nur nichts.

Vielen Dank für eure Hilfe!

Beste Grüße
Hallo,

vermutlich verwendest Du in deiner Orginaldatei (mit Makros) ein Change-Ereignis. Dieses reagiert nicht auf Änderungen in Formelzellen. Verwende mal das Calculate-Ereignis.
(15.09.2016, 12:12)Steffl schrieb: [ -> ]Hallo,

vermutlich verwendest Du in deiner Orginaldatei (mit Makros) ein Change-Ereignis. Dieses reagiert nicht auf Änderungen in Formelzellen. Verwende mal das Calculate-Ereignis.

Hallo Stefan,

Danke für deine Antwort. Daran liegt es leider nicht. Ich habe gehofft, die komplizierte Formel außen vor zu lassen, aber hier ist mal mein Ausschnitt.
Hoffe, dass du damit was anfangen kannst.

  
Code:
  'Speicherung der eingegebenen Werte aus der Eingabemaske in die Variablen'
    currentValue = ActiveCell.Offset(0, -3)
    lowBorder = TextBox1.Text 'immer das 50% Feld'
    highBorder = TextBox3.Text 'immer das 150 % Feld'
   
'Berechnung, wenn der minimale Erreichungsgrad die größere Zahl ist'
If lowBorder > highBorder Then
    If currentValue <= highBorder Then
        ActiveCell = "150"
    ElseIf currentValue >= lowBorder Then
        ActiveCell.Value = "50"
    Else
        ActiveCell.Value = Round(50 + 100 * ((lowBorder - currentValue) / (lowBorder - highBorder)), 2) '50 + 200-160 / 200-100 = 50 40/100'
    End If
   
End If
'Berechnung, wenn der maximale Erreichunggrad die größere zahl ist'
If lowBorder < highBorder Then
    If currentValue >= highBorder Then
      ActiveCell.Value = "150"
    ElseIf currentValue <= lowBorder Then
        ActiveCell.Value = "50"
    Else
        ActiveCell.Value = Round(50 + 100 * ((lowBorder - currentValue) / (lowBorder - highBorder)), 2) '150 - 200-160 / 200-100 = 150 - 40'
    End If
End If

'Wenn aktueller Monatsstand noch nicht ausgefüllt ist, dann Ausgabezelle = 0'
If ActiveCell.Offset(0, -3) = "" Then
    ActiveCell.Value = 0
End If

    'Zwischenspeicherung der Unter- und Obergrenze'
    ActiveCell.Offset(0, 10).Value = lowBorder
    ActiveCell.Offset(0, 11).Value = highBorder
    Unload Me
End Sub


Alles etwas kompliziert :) wie gesagt. Die Formeln funktionieren, nur leider nicht automatisch.
Hallo,

füge folgende Zeile in die Function ein:

Application.Volatile

Gruß Uwe
Hallo,

kann sein das ich es wieder falsch verstehe aber verwende doch an Stelle von
Code:
ActiveCell

Code:
Range("E7")

Falls dies falsch ist, solltest Du doch die Makrodatei hier hochladen.
(15.09.2016, 12:41)Kuwer schrieb: [ -> ]Hallo,

füge folgende Zeile in die Function ein:

Application.Volatile

Gruß Uwe

Hallo Uwe,

danke für die Antwort. Wo genau sollte ich Application.Volatile anbringen? es handelt sich ja nicht um eine festgeschriebene function().

zudem habe ich aus einem anderen Forum folgende Meinung über Application.Volatile entnommen.

"Wenn also Application.volatile Dein Problem vordergründig "löst", dann muss das vertieft werden:
Nun, EIN Application.volatile hebelt die gesammte Berechnungshierarchie der betroffenen XL-Instanz aus. Damit wird grundsätzlich bei JEDEM Berechnungsschritt JEDE Funktion neu berechnet. Das geht schnell in einen Bereich, wo die Anwendung nicht mehr vernüftig arbeitet, weil die Anzahl der benötigten Berechnungsschritte expotenziell ansteigt. Man kennt auch flüchtige Funktionen, solche ohne Argument, wie z.B. JETZT(), ZUFALLSZAHL(), usw. aber auch auch INDIREKT gehört dazu, die dasgleiche bewirken."
(15.09.2016, 12:42)Steffl schrieb: [ -> ]Hallo,

kann sein das ich es wieder falsch verstehe aber verwende doch an Stelle von
Code:
ActiveCell

Code:
Range("E7")

Falls dies falsch ist, solltest Du doch die Makrodatei hier hochladen.
Das funktioniert nicht, da es nicht immer "E7" ist, sondern auch andere Zellen angesprochen werden. Ich habe das Beispiel vereinfacht dargestellt.
Hallo,

dann auch vereinfacht. Übergebe die jeweilige Zelle als Parameter und verwende diesen Parameter.

Vereinfachtes Beispiel
Code:
Sub makro1()

   prcUebergabe Range("E7")
End Sub

Sub Makro2()

   prcUebergabe Range("E10")
End Sub

Sub prcUebergabe(rngZelle As Range)

   rngZelle.Value = "Hallo"
End Sub