Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Formel nicht mehr mit Enter bestätigen, um Werte zu aktualisieren
#1
Hey Leute,

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


.xlsx   Hilfe.xlsx (Größe: 13,2 KB / Downloads: 7)

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
Antworten Top
#2
Hallo,

vermutlich verwendest Du in deiner Orginaldatei (mit Makros) ein Change-Ereignis. Dieses reagiert nicht auf Änderungen in Formelzellen. Verwende mal das Calculate-Ereignis.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Luffffy
Antworten Top
#3
(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.
Antworten Top
#4
Hallo,

füge folgende Zeile in die Function ein:

Application.Volatile

Gruß Uwe
Antworten Top
#5
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.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#6
(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."
Antworten Top
#7
(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.
Antworten Top
#8
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste