mit VBA Linie im Liniendiagramm rot wenn Wert negativ
#1

.xlsx   Mappe12.xlsx (Größe: 15,89 KB / Downloads: 3)

Hallo ihr Lieben,

leider stoße ich bei folgender Aufgabenstellung an meine Grenzen  Huh .
Ich habe ein Liniendiagramm, in dem ein Umsatzverlauf und Zielkorridor vorhanden ist.
Nun wollte ich, dass die Linie Umsatz rot wird, wenn sie im negativen Bereich den Zielkorridor verlässt.

Dafür habe ich mir Hilfsspalten angelegt.

Nun verwende ich folgenden VBA Code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If ActiveSheet.Range("C4").Value >= ActiveSheet.Range("E4").Value Then ActiveSheet.Range("D4").Value = ""
End Sub

Leider bekomme ich hier immer eine Fehlermeldung. 
Eventuell habt ihr ja eine Idee und könnt mir helfen.

Danke und LG Mario
Top
#2
Hallo Mario,

was glaubst du welches Ereignismakro durch
Code:
ActiveSheet.Range("D4").Value = ""

aufgerufen wird und hierin durch ...
aufgerufen wird ...
aufgerufen wird ...
aufgerufen wird ...
aufgerufen wird ...
aufgerufen wird ...
...

Versuche es einmal mit der ersten Antwort in diesem Beitrag: http://www.office-loesung.de/ftopic142285_0_0_asc.php

ps. Warum beschreibst du D4 über das Makro und nicht über eine Formel mit ""?
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#3
Hallo Ego,

vielen Dank für deine schnelle Antwort.

Leider geht dies nicht über eine Formel, da die Zelle dann nicht als leer gilt.
Ich habe mich sicher auch nicht richtig ausgedrückt  :20: . 
In diesem Diagramm habe ich zwei  Linien für den Umsatzverlauf. Eine rote und eine Grüne.
Diese bekommen die Daten aus den Spalten Umsatz 1 und Umsatz 2.
Damit erhalte ich die farbige Wiedergabe, wenn der zulässige Wert unterschritten wird.

Jetzt möchte ich die Zellen B2:B13 mit den Spalten E2:E13 vergleichen.
Ist der Wert in B kleiner als in E, soll der Wert in die entsprechende Zeile der Spalte D eingefügt werden.
Ist der Wert größer, dann soll er in C eingefügt werden.

Bis jetzt habe ich folgendes:

Code:
Private Sub CommandButton1_Click()

For spalte = 2 To 5
   For zeile = 4 To 13
   
      Worksheets("Tabelle1").Activate
      
      wert1 = Cells(4, 2)
      wert2 = Cells(4, 5)
      
      If wert1 < wert2 Then
         wert = wert2
      Else
         wert = wert1
      End If
      Cells(4, 3) = wert
      
   Next zeile
   
Next spalte

End Sub

Gruß Mario


Angehängte Dateien
.xlsx   Mappe12.xlsx (Größe: 18,07 KB / Downloads: 2)
Top
#4
Hallo Mario,

a) Ich hoffe dass ich dir mit meiner ersten Antwort ein wenig geholfen habe.
 Wenn du innerhalb des Ereignismakros "Workcheet_Change" in diesem Arbeitsblatt etwas ändern willst, must du vorher die Ereignisse ausschalten, da du sonst in eine Endlosschleife kommst. (Einschalten der Ereignisse nicht vergessen.)

b) Dass mit dem Löschen der Inhalte per Makro habe ich jetzt auch verstanden.

c) Ich würde in den beiden Linien auch  Markierungspunkte formatieren, falls der Wert nur eines einzelnen Zeitpunktes unter bzw über dem Minimum liegt.

d) Hast du zusätzliche Fragen?
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#5
Hi Mario,

(28.12.2016, 22:33)Mario schrieb: Leider geht dies nicht über eine Formel, da die Zelle dann nicht als leer gilt.

das Löschen des Inhalts einer Zelle geht auch mit:
ActiveSheet.Range("D4").ClearContents
Top
#6
Hallo Helmut, hallo Ralf,

Entschuldigung, dass ich erst heute antworte, aber die Grippe hatte mich fest im Griff  :93: .
Eure Antworten haben mir schon etwas weitergeholfen.

Ich habe jetzt folgenden Code erstellt. 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)



   If Target.Cells.Count > 1 Then Exit Sub
   If Intersect(Target, Range("B4:B13")) Is Nothing Then Exit Sub

For i = 4 To 13
With ActiveSheet.ChartObjects("Diagramm 21").Chart.SeriesCollection(1).Points


Application.ScreenUpdating = False


      If ActiveSheet.Range("B" & i).Value >= ActiveSheet.Range("C" & i).Value Then .Line.ForeColor.RGB = RGB(255, 0, 0)
      If ActiveSheet.Range("B" & i).Value < ActiveSheet.Range("C" & i).Value Then .Line.ForeColor.RGB = RGB(0, 139, 0)

   Application.ScreenUpdating = True

End With
Next

End Sub
Leider funktioniert der aber noch nicht so wie ich will Huh . Eventuell habt ihr ja noch eine Idee.  :59:

Danke und VG
Mario


Angehängte Dateien
.xltm   Mappe13.xltm (Größe: 21,49 KB / Downloads: 4)
Top
#7
Hallo Mario,

was ist an deiner ursprünglichen Idee schlecht?

Hier einmal realisiert:


Angehängte Dateien
.xlsm   Mario.xlsm (Größe: 22,29 KB / Downloads: 6)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#8
Hallo Helmut,

ja funktioniert super, ich danke dir.  :23:

VG Mario
Top
#9
Hallo Helmut,

eventuell kannst du nochmals helfen. Der Umsatz in Spalte B wird über eine Formel übertragen. Wenn das Makro gelaufen ist, wird die Formel immer gelöscht.
Kann man die eventuell umgehen?

VG Mario
Top
#10
Hallo Mario,

in dieser Version werden vom Makro nur noch die Kurvendaten überschrieben.




Bemerkungen:
Ich nutze in dem Programm jetzt zwei benannte Bereiche, "Daten" und "Kurven". Sichtbar im "Namensmanager" des Menüs "Formeln"

a) Wenn du die Daten erweitern willst must du darauf achten auch die Namensbereiche zu erweiterm. (Wenn du Zeilen innerhalb des Bereiches einfügst, wird der Namensbereich genau wie der Diagramkurvenbereich automatisch erweitert.)
b) Die benannten Bereiche können innerhalb des Arbeitsblattes beliebig positioniert werden ohne in dem Makro Änderungen durchzuführen zu müssen.
c) Innerhalb der benannten Bereiche darf der Spalteninhalt nicht vertauscht werden.


Angehängte Dateien
.xlsm   Mario.xlsm (Größe: 22,79 KB / Downloads: 4)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top


Gehe zu:


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