Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Target Zeile bei Calculate Ereignis bestimmen

Forumthread: Target Zeile bei Calculate Ereignis bestimmen

Target Zeile bei Calculate Ereignis bestimmen
16.09.2015 14:46:16
Sven
Hallo Zusammen,
ich suche nach einer Lösung für folgendes Problem, für das ich leider nicht den richtigen Ansatz finde.
Mal als Beispiel: Ich habe in der Zelle V21 die Differenz aus T21 und U21. T21 ist ein festgelegter Wert, U21 ist die Summe aus 12 Zellen in der gleichen Zeile. In Spalte V geht dieses Prinzip bis Zeile 140 (also V140 = T140 - U140)
Was ich möchte ist, dass wenn ein Wert in Spalte V größer 10.000 oder kleiner -10.000 wird, eine InputBox auftaucht, in der man eine Begründung für die Entstehung des Wertes angeben muss. Diese Begründung soll dann in der Zeile in der die Zelle mit dem erreichten Wert liegt in beispielsweise Spalte X erscheinen.
Also wenn Zelle T55 größer 10.000 dann Begründung über InputBox in Zelle X55.
Die Frage die sich mir dabei grundsätzlich stellt ist, wie bestimme ich beim worksheet_calculate event die zeile in der sich eine Zelle verändert hat?!
Danke und beste Grüße
Sven

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Target Zeile bei Calculate Ereignis bestimmen
16.09.2015 14:55:20
ChrisL
Hi Sven
M.E. müsstest du das Change Ereignis für die variablen Zellen anwenden und in VBA "nachrechnen". Leider steht nicht, woraus genau die Summe in U besteht resp. Beispieldatei ist immer gut.
cu
Chris

AW: Target Zeile bei Calculate Ereignis bestimmen
16.09.2015 15:57:11
Sven
Hi Chris,
ich habe mal versucht eine Beispiel-Datei anzuhängen, ich hoffe sie hilft...
https://www.herber.de/bbs/user/100228.xlsx

Anzeige
AW: Target Zeile bei Calculate Ereignis bestimmen
16.09.2015 16:08:40
ChrisL
Hi Sven
Etwa so...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 20 And Target.Column 
cu
Chris

AW: Target Zeile bei Calculate Ereignis bestimmen
17.09.2015 09:07:45
Sven
Hallo Chris,
besten Dank, funktioniert!
Hast du zufällig eine Idee, wie ich integrieren kann, dass wenn schon ein Kommentar in der Zeller vorhanden ist, man nicht erneut bei einder Änderung zur Eingabe aufgefordert wird?

Anzeige
AW: Target Zeile bei Calculate Ereignis bestimmen
17.09.2015 11:52:41
ChrisL
Hi Sven
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 20 And Target.Column 
cu
Chris
;
Anzeige
Anzeige

Infobox / Tutorial

Target Zeile bei Calculate Ereignis bestimmen


Schritt-für-Schritt-Anleitung

Um die Zeile zu bestimmen, in der eine Zelle bei einem Calculate-Ereignis verändert wurde, kannst Du den folgenden VBA-Code verwenden. Dieser Code überprüft, ob der Wert in einer bestimmten Spalte (hier Spalte V) einen bestimmten Schwellwert überschreitet oder unterschreitet:

Private Sub Worksheet_Calculate()
    Dim cell As Range
    For Each cell In Me.Range("V21:V140")
        If cell.Value > 10000 Or cell.Value < -10000 Then
            Dim userResponse As String
            userResponse = InputBox("Bitte gib eine Begründung für den Wert in " & cell.Address & " ein:")
            If userResponse <> "" Then
                Me.Cells(cell.Row, "X").Value = userResponse
            End If
        End If
    Next cell
End Sub

In diesem Code verwendest Du das Worksheet_Calculate-Ereignis, um durch die Zellen der Spalte V zu iterieren. Wenn ein Wert außerhalb der Grenzen liegt, öffnet sich eine InputBox, in die der Benutzer eine Begründung eingeben kann, die dann in Spalte X der entsprechenden Zeile gespeichert wird.


Häufige Fehler und Lösungen

  • Fehler: InputBox erscheint nicht.

    • Lösung: Stelle sicher, dass das Worksheet_Calculate-Ereignis nicht durch andere Ereignisse blockiert wird. Teste den Code in einer neuen Arbeitsmappe, um Konflikte auszuschließen.
  • Fehler: Begründung wird nicht gespeichert.

    • Lösung: Überprüfe, ob die richtigen Zellreferenzen verwendet werden. Stelle sicher, dass die Zielzelle in Spalte X existiert.

Alternative Methoden

Eine alternative Methode, um das Ziel zu erreichen, ist die Verwendung des Worksheet_Change-Ereignisses. Hierbei wird der Code nur ausgeführt, wenn sich der Wert einer Zelle in der überwachten Spalte ändert:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("V21:V140")) Is Nothing Then
        Dim userResponse As String
        If Target.Value > 10000 Or Target.Value < -10000 Then
            userResponse = InputBox("Bitte gib eine Begründung für den Wert in " & Target.Address & " ein:")
            If userResponse <> "" Then
                Me.Cells(Target.Row, "X").Value = userResponse
            End If
        End If
    End If
End Sub

Mit dieser Methode wird die Eingabeaufforderung nur bei Änderungen in den relevanten Zellen ausgelöst.


Praktische Beispiele

Hier sind einige Szenarien, in denen Du den target.calculate- und target.calculate excel-Code anwenden kannst:

  1. Finanzberichte: Überwache die Abweichungen von Budgetwerten und fordere Erklärungen an.
  2. Inventarverwaltung: Bei Über- oder Unterschreitungen von Lagerbeständen kann eine Begründung eingefordert werden.
  3. Projektmanagement: Halte Rückmeldungen zu wichtigen Kennzahlen in Projektplänen fest.

Tipps für Profis

  • Verwende Datenüberprüfung: Nutze die Datenüberprüfung in Excel, um sicherzustellen, dass nur gültige Werte in die Zellen eingegeben werden.
  • Optimierung der Performance: Wenn Dein Arbeitsblatt viele Berechnungen durchführt, könnte es sinnvoll sein, die Berechnungseinstellungen auf "Manuell" zu setzen und die Berechnungen nur auszulösen, wenn nötig.
  • Code modularisieren: Halte den Code modular, indem Du Funktionen für spezifische Aufgaben erstellst. Dies erleichtert die Wartung und das Debugging.

FAQ: Häufige Fragen

1. Warum sollte ich das Calculate-Ereignis anstelle von Change verwenden?
Das Calculate-Ereignis ist sinnvoll, wenn Du auf Werte reagieren möchtest, die durch Formeln berechnet werden, während Change für manuelle Eingaben gedacht ist.

2. Wie kann ich sicherstellen, dass ein Kommentar nur einmal eingegeben wird?
Du kannst eine zusätzliche Bedingung in den Code einfügen, die überprüft, ob bereits ein Kommentar in der Zielzelle vorhanden ist, bevor die InputBox angezeigt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige