Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
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
Inhaltsverzeichnis

Makro anpassen

Makro anpassen
Heinz
Hallo Leute,
habe schon öfters auf eurer Seite hilfreiche Tipps gefunden. Im Moment habe ich ein kleines Problemchen mit dem Anpassen eines Makros. Meine VBA-Kenntnisse sind bescheiden, aber ausbaufähig ;D.
Aufgabenstellung ist folgende: Ich habe in einer Exceldatei mehrerere Tabellblätter, die 100% gleich aufgebaut sind. Die Namen der Tabellenblätter sind: T1 = 1050, T3 = 950, ...
Nun habe ich imTabellenblatt "T1 = 1050" ein Diagramm erstellt und mit dem Makrorecorder aufgezeichnet.
Problem: Das Makro bezieht sich nur auf das Tabellenblatt "T1 = 1050" und lässt sich nicht mit den Daten des nächsten Tabelleblatt "T3 = 950" ausführen.
Wie muss ich das Makro anpassen, damit das Makro in dem Tabellenblatt ausgeführt wird welches gerade aktiviert ist? Das Makro sollte also unabhängig vom Namen des Tabellenblatts ausführbar sein.
Im voraus vielen Dank für eure Bemühungen und nun folgt noch mein aufgzeichnetes Makro:

Sub Test()
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("T1 = 1050").Range("U30")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "='T1 = 1050'!R2C18:R2C24"
ActiveChart.SeriesCollection(1).Values = "='T1 = 1050'!R3C18:R3C24"
ActiveChart.SeriesCollection(1).Name = "='T1 = 1050'!R3C9"
ActiveChart.SeriesCollection(2).XValues = "='T1 = 1050'!R2C18:R2C24"
ActiveChart.SeriesCollection(2).Values = "='T1 = 1050'!R8C18:R8C24"
ActiveChart.SeriesCollection(2).Name = "='T1 = 1050'!R8C9"
ActiveChart.SeriesCollection(3).XValues = "='T1 = 1050'!R2C18:R2C24"
ActiveChart.SeriesCollection(3).Values = "='T1 = 1050'!R16C18:R16C24"
ActiveChart.SeriesCollection(3).Name = "='T1 = 1050'!R16C9"
ActiveChart.Location Where:=xlLocationAsObject, Name:="T1 = 1050"
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Zeit (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Verformung (mm)"
End With
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlBottom
ActiveSheet.Shapes("Diagramm 23").IncrementLeft 138#
ActiveSheet.Shapes("Diagramm 23").IncrementTop 121.5
End Sub

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

Betreff
Benutzer
Anzeige
AW: Makro anpassen
12.05.2010 00:02:39
Rudi
Hallo,
so in der Art
Sub Test()
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=ActiveSheet.Range("U30")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "='" & ActiveSheet.Name & "'!R2C18:R2C24"
ActiveChart.SeriesCollection(1).Values = "='" & ActiveSheet.Name & "'!R3C18:R3C24"
ActiveChart.SeriesCollection(1).Name = "='" & ActiveSheet.Name & "'!R3C9"
'etc
End Sub

Gruß
Rudi
Anzeige
AW: Makro anpassen
12.05.2010 15:29:13
Heinz
Ich habe das Makro entsprechend angepasst und erhalte leider eine Fehlermeldung: --> Laufzeitfehler 438
--> Hier soll ich debuggen: ActiveChart.SetSourceData Source:=ActiveSheet.Range("U30")
Ausserdem versucht Excel nun die Tabelle in einem neuen Tabellenbaltt zu erstellen ^^.
Der Code sieht nun folgendermaßen aus:
Sub Austenit()
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=ActiveSheet.Range("U30")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "='" & ActiveSheet.Name & "'!R2C18:R2C24"
ActiveChart.SeriesCollection(1).Values = "='" & ActiveSheet.Name & "'!R3C18:R3C24"
ActiveChart.SeriesCollection(1).Name = "='" & ActiveSheet.Name & "'!R3C9"
ActiveChart.SeriesCollection(2).XValues = "='" & ActiveSheet.Name & "'!R2C18:R2C24"
ActiveChart.SeriesCollection(2).Values = "='" & ActiveSheet.Name & "'!R8C18:R8C24"
ActiveChart.SeriesCollection(2).Name = "='" & ActiveSheet.Name & "'!R8C9"
ActiveChart.SeriesCollection(3).XValues = "='" & ActiveSheet.Name & "'!R2C18:R2C24"
ActiveChart.SeriesCollection(3).Values = "='" & ActiveSheet.Name & "'!R16C18:R16C24"
ActiveChart.SeriesCollection(3).Name = "='" & ActiveSheet.Name & "'!R16C9"
ActiveChart.Location Where:=xlLocationAsObject, Name:="" & ActiveSheet.Name & ""
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Zeit (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Verformung (mm)"
End With
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlBottom
ActiveSheet.Shapes("Diagramm 23").IncrementLeft 138#
ActiveSheet.Shapes("Diagramm 23").IncrementTop 121.5
End Sub

Für Ratschläge bin ich sehr dankbar. Grüße :)
Anzeige
AW: Makro Diagramm-Erstellung anpassen
13.05.2010 11:12:49
fcs
Hallo Heinz,
wenn Excel ein Diagramm in einem neuen Blatt erstellt, dann ist dieses das aktive Blatt und nicht mehr das Tabellenblatt. Dann funktionieren alle Verweise mit Activesheet.Range nicht mehr. Da ist es besser konsequent mit Objekt-Variablen zu arbeiten.
Hier eine unter Excel 2007 erstellte Diagramm-Erstellungsroutine. Den Parameter "Referencestyle" muss du für Excel 2003 ggf. von xlA1 in xlR1C1 ändern.
Gruß
Franz
'Erstellt unter Excel 2007
Sub Test()
Dim wks As Worksheet, iSerie As Long
Dim oChart As Chart, spName&, spData1&, spData2&, ZeileX&, ZeileY&
Set wks = ActiveSheet
With wks.Range("C3") 'Einfüge-Zelle für Diagramm
'Diagramm-Objekt einfügen relativ zu Zelle mit angegebenen Abmessungen
Set oChart = wks.ChartObjects.Add(Left:=.Left, Top:=.Top, Width:=500, _
Height:=300).Chart
End With
With oChart
.ChartType = xlXYScatterSmooth 'XY-Punktdiagramm, interpolierte Linie + Punkte
spName = 9    'Spalte mit Reihennamen
spData1 = 18  '1. Datenspalte
spData2 = 24  'Letzte Datenspalte
ZeileX = 2    'Zeile mit X-Werten
For iSerie = 1 To 3
.SeriesCollection.NewSeries
With wks
oChart.SeriesCollection(iSerie).XValues = "='" & .Name & "'!" & _
.Range(.Cells(ZeileX, spData1), .Cells(ZeileX, spData2)) _
.Address(ReferenceStyle:=xlA1)
'Zeile mit den Y-Werten der Reihe
Select Case iSerie
Case 1: ZeileY = 3
Case 2: ZeileY = 8
Case 3: ZeileY = 16
Case Else
Exit For
End Select
oChart.SeriesCollection(iSerie).Values = "='" & .Name & "'!" & _
.Range(.Cells(ZeileY, spData1), .Cells(ZeileY, spData2)) _
.Address(ReferenceStyle:=xlA1)
oChart.SeriesCollection(iSerie).Name = "='" & .Name & "'!" & _
.Cells(ZeileY, spName).Address(ReferenceStyle:=xlA1)
End With
Next
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Zeit (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Verformung (mm)"
.HasLegend = True
.Legend.Position = xlBottom
End With
End Sub

Anzeige
AW: Makro Diagramm-Erstellung anpassen
13.05.2010 11:47:05
Heinz
Hi fcs,
es funktioniert, wie geil. Ich freu mir gerade ein Loch in den Bauch.
Respekt vor deinen VBA-Kenntnissen, das hätte ich alleine nicht so schnell auf die Beine gesetllt.
1000Dank für deinen Einsatz.
Grüße, Heinz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige