Spalten ausblenden: Diagramme anpassen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Spalten ausblenden: Diagramme anpassen
von: Esther
Geschrieben am: 26.08.2015 15:33:31

Hallo zusammen,
ich weiß nun nicht mehr weiter und hoffe hier auf einen Tritt in die richtige Richtung :)
Im Anhang meine Datei:
https://www.herber.de/bbs/user/99838.xlsm
Und zwar werden auf "Übersicht" eine bestimmte Anzahl an Spalten (D:M) eingeblendet oder ausgeblendet; standardmäßig sind jedoch nie weniger als die Spalten D:I eingeblendet. Das funktioniert über ein Makro. (In meiner Bsp.datei funzt das igwie nicht, aber in der Originaldatei schon!)
Nun sollen die beiden Diagramme, die auf demselben Blatt gaanz oben zu sehen sind, von ihrer Größe her immer gleichmäßig über die eingeblendeten Spalten verteilt werden.
Das heißt: Sind Spalte D:I eingeblendet, sollen die Diagramme so groß sein wie in der Bsp.datei zu sehen. Sind Spalten D:M eingeblendet, sollen sie sich entsprechend GLEICHMÄßIG vergrößern. Hab ich mal als Bildchen in das Dokument eingebunden.
Es geht hier nur um die beiden kleinen Diagramme. Das untere große Diagramm geht ja immer schön mit :)
Klar, ich könnte die drei auch untereinander legen, aber das soll so nicht!!
Ich weiß gar nicht, wo ich anfangen soll. Hat jemand einen heißen Tipp für mich? Ich denke jetzt eher nicht an VBA. Ist bestimmt auf einfacherem Weg zu lösen, oder?
Viele Grüße
Esther

Bild

Betrifft: AW: Spalten ausblenden: Diagramme anpassen
von: Matthias
Geschrieben am: 27.08.2015 15:34:14
Hallo Esther,
zum Problem dass dein Makro nicht zu funktionieren scheint:
Doch das tut es, es "hinkt" nur immer eine Auswahl hinterher, da es über ein SelectionChange-Event angesteuert wird. Das ist grundsätzlich nicht verkehrt, nur ist es so eingerichtet, dass wenn ich in die Zelle hineinklicke die Aktionen ausgeführt werden. Das Hineinklicken geschieht aber BEVOR ich den Wert ändern kann, sodass der alte Wert für's Spalten ein-/ausblenden genommen wird. Einfache Lösung wäre dies zu einem Change-Event zu ändern. Aktionen werden demnach erst mit der Wertänderung ausgeführt.
Zur Anpassung der Diagramme habe ich mir erlaubt in deinem Code ein paar Zeilen einzufügen. Wenn du den alten und diesen hier vergleichst, wird eine große Erklärung überflüssig. Die Position ist übrigens mittels "zurechtschieben" ermittelt worden. Mir ist leider kein Weg bekannt in dem ich ein Diagramm mit seiner rechten Begrenzung an einer Zelle fixiere, daher per VBA.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Tabelle2.[I36], Target) Is Nothing) Then
  Application.ScreenUpdating = False
  Tabelle1.[D:M].EntireColumn.Hidden = True
  If Target.Value > 0 Then
     Tabelle1.Columns("D:M").Resize(, Target.Value).EntireColumn.Hidden = False
     Select Case Target.Value
        Case 6:  Breite = 297 '(603-9)/2
        Case 7:  Breite = 327 '663
        Case 8:  Breite = 357 '723
        Case 9:  Breite = 387 '783
        Case 10: Breite = 417 '843
    End Select
     Tabelle1.Shapes("Diagramm 1").Width = Breite
     Tabelle1.Shapes("Diagramm 2").Width = Breite
     Tabelle1.Shapes("Diagramm 2").Left = 9.75 + Breite + 9
     Tabelle1.Shapes("Diagramm 2").Top = Tabelle1.Shapes("Diagramm 1").Top
  End If
End If
  Application.ScreenUpdating = True
End Sub
Bitte den Code in Tabelle2(Parameter) damit ersetzen.
lg Matthias

Bild

Betrifft: AW: Spalten ausblenden: Diagramme anpassen
von: Esther
Geschrieben am: 28.08.2015 11:03:41
Danke!! In der Bsp.datei funktioniert das ohne Probleme :)
Jetzt habe ich das Makro in meine Originaldatei eingebaut und etwas verändert, da es nicht nur Case 6 - 10, sondern jetzt Case 5 - 10 gibt.
Bis auf die Größenanpassung des Diagramm 1 funktioniert alles!
Woran könnte das liegen?
Hier mal mein verändertes Makro:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
On Error GoTo ErrExit
Application.EnableEvents = False
If Not Intersect(Target, Range("E40,K40:EX40")) Is Nothing Then
  Sheets("AS_aktivitätenbasiert").Range("D14:D3000").ClearContents
End If
If Not (Application.Intersect(NeueZeile.[E40], Target) Is Nothing) Then
  Application.ScreenUpdating = False
  NeueZeile.[K:EX].EntireColumn.Hidden = True
  If Target.Value > 0 Then
     NeueZeile.Columns("K:EU").Resize(, Target.Value).EntireColumn.Hidden = False
  End If
  Range(Cells(40, 11 + Target.Value), Cells(42, "EX")).ClearContents
  Application.ScreenUpdating = True
End If
If Not (Application.Intersect(NeueZeile.[I36], Target) Is Nothing) Then
  Application.ScreenUpdating = False
  Tabelle3.[D:M].EntireColumn.Hidden = True
  If Target.Value > 0 Then
     Tabelle3.Columns("D:M").Resize(, Target.Value).EntireColumn.Hidden = False
     Select Case Target.Value
        Case 5:  Breite = 267 '(543-9)/2
        Case 6:  Breite = 297 '603
        Case 7:  Breite = 327 '663
        Case 8:  Breite = 357 '723
        Case 9:  Breite = 387 '783
        Case 10: Breite = 417 '843
    End Select
     Tabelle3.Shapes("Diagramm 1").Width = Breite
     Tabelle3.Shapes("Diagramm 2").Width = Breite
     Tabelle3.Shapes("Diagramm 2").Left = 13.5 + Breite + 9
     Tabelle3.Shapes("Diagramm 2").Top = Tabelle3.Shapes("Diagramm 1").Top
  End If
End If
  Application.ScreenUpdating = True
ErrExit:
Application.EnableEvents = True
End Sub

Schönen Gruß,
Esther

Bild

Betrifft: AW: anbei meine Datei mit angepasstem Makro
von: Esther
Geschrieben am: 28.08.2015 13:19:43
So, hier zur besseren Veranschaulichung meine verfremdete Originaldatei.
Einen Fehler habe ich schon behoben: Diagramm 1 = bei mir Diagramm 7 und Diagramm 2 = bei mir Diagramm 6.
Es muss nur Case 5 hinzugefügt werden. Aber da bin ich überfragt, wie du deine Werte (603 usw.) berechnet hast, wie darauf gekommen bist??
https://www.herber.de/bbs/user/99876.xlsm

Bild

Betrifft: AW: anbei meine Datei mit angepasstem Makro
von: Matthias
Geschrieben am: 28.08.2015 16:03:13
Hallo Esther,
wie bereits geschrieben, habe ich die Position empirisch ermittelt. Einfach das Diagramm 1 genommen und auf die komplette Breite von Spalte B bis N gezogen (spätere Breite von beiden D. + Lücke), dabei Alt gedrückt halten damit die Zellen als Raster wirken. So bin ich die Parameter durchgegangen und habe bei jedem Schritt folgendes Makro ausgeführt:

Sub Test()
MsgBox "D1 Breite: " & Tabelle3.Shapes("Diagramm 1").Width
End Sub
Zahl 603 notiert, nächsten Parameter eingestellt. Nach dem 3. Mal hat sich der Abstand 60 als Schrittweite abgezeichnet. Die "Lücke" 9 habe ich willkürlich festgelegt und den Rest durch 2 geteilt.
Warum das Makro bei deinem Original nicht funktioniert kann ich dir auch sagen: Diagramm 7 und 6 steht zwar schön als Überschrift, aber wenn ich die Diagramme anklicke und "Diagrammtools" -> "Layout" schaue steht bei mir "Diagramm 1" bzw. 2 da. Er gibt leider keine Rückmeldung wenn es Diagramm 7 bzw. 6 nicht gibt.
lg Matthias
PS: Kommastellen hab ich meinem Haustier verfüttert.

Bild

Betrifft: AW: Diagramm 6 und 7 ;)
von: Esther
Geschrieben am: 28.08.2015 16:48:01
Ich Dummi, Diagramm 6 und 7 kann es auch nicht geben, weil ich alle anderen aus dem Dokument rausgelöscht habe :D
Naja, ich lass mal dein Makro bzgl. der Diagrammbreite rüberlaufen und hoffe, dass es klappt ;) Wenn nicht, erscheine ich wieder hier. Wenn ja, dann hab vielen Dank (das ja sowieso^^) und ich werde das Thema schließen!
Schönen Gruß
Esther

Bild

Betrifft: AW: Diagrammbreite ermittelt, passt aber nicht??
von: Esther
Geschrieben am: 31.08.2015 15:44:03
So, da bin ich wieder ;)
Habe jetzt die Diagrammbreiten ermittelt und es passt FAST!
Was ich nicht verstehe: Das rechte Diagramm (bei mir wirklich Diagramm 6!) ragt bei 7, 8, 9 oder 10 zu weit über den "Rand" (= Spalte N) hinaus. Das wird also immer ein bisschen zu breit. Bei "6" sind beide Diagramme gleich groß (= 14,96 cm). Das linke Diagramm (= Diagramm 7) verbreitert sich so wie berechnet.
Mir fehlt leider noch das Verständnis zur Problembehebung...
Mein Makro (nur der untere Teil ist jetzt relevant):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
On Error GoTo ErrExit
Application.EnableEvents = False
If Not Intersect(Target, Range("E40,K40:EX40")) Is Nothing Then
  Sheets("AS_aktivitätenbasiert").Range("D14:D3000").ClearContents
End If
If Not (Application.Intersect(NeueZeile.[E40], Target) Is Nothing) Then
  Application.ScreenUpdating = False
  NeueZeile.[K:EX].EntireColumn.Hidden = True
  If Target.Value > 0 Then
     NeueZeile.Columns("K:EU").Resize(, Target.Value).EntireColumn.Hidden = False
  End If
  Range(Cells(40, 11 + Target.Value), Cells(42, "EX")).ClearContents
  Application.ScreenUpdating = True
End If
If Not (Application.Intersect(NeueZeile.[I36], Target) Is Nothing) Then
  Application.ScreenUpdating = False
  Tabelle3.[D:M].EntireColumn.Hidden = True
  If Target.Value > 0 Then
     Tabelle3.Columns("D:M").Resize(, Target.Value).EntireColumn.Hidden = False
     Select Case Target.Value
        Case 6:  Breite = 423.935 '(856,87-9)/2
        Case 7:  Breite = 461.435 '931,87
        Case 8:  Breite = 498.935 '1006,87
        Case 9:  Breite = 536.435 '1081,87
        Case 10: Breite = 573.935 '1156,87
    End Select
     Tabelle3.Shapes("Diagramm 7").Width = Breite
     Tabelle3.Shapes("Diagramm 7").Width = Breite
     Tabelle3.Shapes("Diagramm 6").Left = 13.5 + Breite + 9
     Tabelle3.Shapes("Diagramm 6").Top = Tabelle3.Shapes("Diagramm 7").Top
  End If
End If
  Application.ScreenUpdating = True
ErrExit:
Application.EnableEvents = True
End Sub

Vielen Dank und schöne Grüße
Esther

Bild

Betrifft: AW: Diagrammbreite ermittelt, passt aber nicht??
von: Matthias
Geschrieben am: 31.08.2015 18:47:27
Hallo Esther,
zu deinem Problem möchte ich nur kurz aus deinem Code zitieren:

    Tabelle3.Shapes("Diagramm 7").Width = Breite
    Tabelle3.Shapes("Diagramm 7").Width = Breite
Dazu sag ich mal nix weiter, vielleicht kommst du selber drauf^^
lg Matthias

Bild

Betrifft: AW: Diagrammbreite ermittelt, passt aber nicht??
von: Esther
Geschrieben am: 31.08.2015 19:02:03
Ok, da hab ich eigentlich nichts geändert... außer deine "1" und "2" ausgetauscht.
Ich vermute, es muss einmal die 7 und einmal die 6 rein, richtig? Habs grad getestet, meine Vermutung scheint sich zu bewahrheiten... die Diagrammbreite verteilt sich gleichmäßig :)
Aber nun gehen die Diagramme nicht bis ganz zum Ende, d.h. es werden immer die letzten 1 oder 2 Spalten freigelassen.
Hmmm...

Bild

Betrifft: AW: Diagrammbreite ermittelt, passt aber nicht??
von: Esther
Geschrieben am: 01.09.2015 08:40:25
Passt ALLES! Vielen Dank für deine Hilfe :)
VG
Esther

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Spalten ausblenden: Diagramme anpassen"