Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
504to508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
504to508
504to508
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Macro für Diagramm

Macro für Diagramm
21.10.2004 17:16:09
Frank
Hallo
Ich habe hier schon gesucht, aber habe keinen Lösungsvorschlag zum Laufen gebracht :-(
Ich brauche ein Macro, das mir ein Diagramm aus einer Tabelle mit immer wechselnder Länge macht.
Das Macro darf nicht auf einen bestimmten Mappennamen zugreifen (habe ich geschafft)
Was ich nicht hinkriege ist die Länge der Tabelle.
Sie hat immer die Spalten A,B,C
Aber immer verschieden viele Zeilen.
Hier mein Macro

Sub Diagramm()
' Diagramm Makro
aktivemappe = ActiveSheet.Name
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets(aktivemappe).Range("A1:C14"), PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:=aktivemappe
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Joblaufzeiten"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.HasLegend = False
ActiveSheet.Shapes("Diagramm 1").IncrementTop 0.75
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
Selection.TickLabels.Orientation = xlDownward
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Diagramm 1").ScaleWidth 1.45, msoFalse, _
msoScaleFromBottomRight
ActiveWindow.Visible = False
End Sub

In dieser Zeile brauche ich einen dynamischen Range
ActiveChart.SetSourceData Source:=Sheets(aktivemappe).Range("A1:C14"), PlotBy:= _xlColumns
Wie muss ich mein Macro abändern, damit das funktioniert?
Vielen Dank im Voraus
Frank

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro für Diagramm
21.10.2004 18:37:55
Roland
Hallo Frank,
versuchs mal so:

Sub Diagramm()
Dim aktivemappe As String, Bereich As Range
aktivemappe = ActiveSheet.Name
Set Bereich = Application.InputBox("Bereich für das Diagramm bitte mit der Maus kennzeichnen!", Type:=8)
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets(aktivemappe).Range(Bereich.Address), PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:=aktivemappe
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Joblaufzeiten"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.HasLegend = False
ActiveSheet.Shapes("Diagramm 1").IncrementTop 0.75
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
Selection.TickLabels.Orientation = xlDownward
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Diagramm 1").ScaleWidth 1.45, msoFalse, _
msoScaleFromBottomRight
ActiveWindow.Visible = False
End Sub

Gruß Roland
Anzeige
AW: Macro für Diagramm
Frank
Hallo Roland
Danke für deine Antwort
Funktioniere im Prinziep schon, aber es müsste doch auch automatisch gehen.
In meiner Tabelle werden Zeiten ausgerechnet
Startzeit Endzeit Laufzeit
Die Laufzeit sollte in einem Balkendiagramm ausgewertet werden
Wenn ich die 4.Zeile
ActiveChart.SetSourceData Source:=Sheets(aktivemappe).Range("A1:C14"), PlotBy:= _
xlColumns
weg lasse, findet das Makro den Bereich automatisch, nur die Formatierung ist dann auf Spalte statt auf Zeile.
Gruss Frank
Berichtigung AW: Macro für Diagramm
Frank
Habe das Macro mal abgespeckt

Sub Diagram()
' Diagram Makro
' Makro am 22.10.2004 von Frank Zülsdorf aufgezeichnet
aktivemappe = ActiveSheet.Name
ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
'    ActiveChart.SetSourceData Source:=Sheets(aktivemappe).Range("A1:C15"), PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:=aktivemappe
ActiveChart.HasLegend = False
ActiveChart.Axes(xlCategory).Select
End Sub

Wenn ich die Zeile mit dem festen Range deaktiviere, dann funktionierts.
Aber ich muss dann die Formatierung vom Diagramm manuell von "Reihe in Zeile" auf "Reihe in Spalte" umschalten
Nun gibt es zwei Lösungen:
Entweder bringe ich den markierten Range
...ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Select
dahin, wo der fixe Range eingetragen ist
Oder das Macro wechselt die Diagramoption von "Reihe in Zeile" auf "Reihe in Spalte"
Ich hoffe, dass ich das jetzt richtig erklärt habe.
Gruss Frank
Anzeige
LÖSUNG
Frank
Hallo
Ein Bekannter konnte mir das Problem lösen
'=============================== BEGIN

Sub =====================================

Sub Diagram()
' Diagram Makro
' Makro am 22.10.2004 von Frank Zülsdorf aufgezeichnet
Dim lCount As Long
Dim sBereich As String
Dim sActiveSheet As String
sActiveSheet = ActiveSheet.Name
If Len(Range("A1")) = 0 Then
Exit 

Sub        ' es gibt nichts zu tun
End If
lCount = 0
While Len(Range("A" & lCount + 1)) > 0
lCount = lCount + 1
Wend
sBereich = "A1:C" & lCount
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets(sActiveSheet).Range(sBereich), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:=sActiveSheet
ActiveChart.HasLegend = False
ActiveChart.Axes(xlCategory).Select
End Sub

'============================== END

Sub =========================================
Danke an alle, die sich mit meinem Problem befasst haben
Gruss Frank

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige