804 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich habe heute ein Makro zur Erstellung von Werteversionen geschrieben. Es besteht aus folgenden Aktionen:

1. Blattschutz aufheben
2. Tabelle kopieren
3. ursprüngliche Tabelle wieder schützen
4. Kopierte Tabelle umbenennen
5. Kopierte Tabelle refreshen (es werden Daten aus einer Datenbank angezogen)
6. Werteversion der kopierten Tabelle erstellen
7. Diagramme, die sich auf dem kopierten Tabellenblatt befinden, aktualisieren (entsprechend den aus der Datenbank gezogen Daten)

Bislang funktioniert das bei mir nur, wenn ich das nicht in einem Makro schreibe, sondern 2 daraus mache. D.h. ich mache ein Makro für Nr. 1-5 und eins für Nr. 6-7. Das Problem, wenn ich alles in einem Makro mache , ist, dass Schritt 5 immer schief geht. D.h. das Makro kopiert alles einwandfrei, macht eine Werteversion daraus und aktualisiert auch die Diagramme. Aber es wird Schritt 5 nicht durchgeführt, so dass die Diagramme wertlos sind, weil keine Daten aus der Datenbank angezogen werden.

Vielleicht kann mir jemand weiterhelfen. Für Eure Hilfe wäre ich sehr dankbar. Anbei das gesamte Makro:

Private Sub CommandButton2_Click()
'Blattschutz aufheben
ActiveSheet.Unprotect

'Tabelle kopieren und hinter dem kopierten Blatt einfügen; für´s Ende anstatt 1 in Klammern (Sheets.Count)
ActiveSheet.Copy After:=Sheets(1)

'Blattschutz
Sheets("Report").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True

'Tabelle umbenennen
Sheets("Report (2)").Name = "Report HC"

'Befehl für´s Refreshen
CommandBars(1).Controls("Smart View").Controls(3).Controls(1).Execute

'Hardcopy
With Worksheets("Report HC").Range("B1:BD204")
.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With

Application.CutCopyMode = False

'Update Diagramme
If Range("AX4") = 1 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35"

End If


If Range("AX4") = 2 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C4"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C20"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C36"

End If


If Range("AX4") = 3 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C5"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C21"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C37"

End If


If Range("AX4") = 4 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C6"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C22"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C38"

End If

If Range("AX4") = 5 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C7"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C23"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C39"

End If


If Range("AX4") = 6 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C8"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C24"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C40"

End If


If Range("AX4") = 7 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C9"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C25"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C41"

End If


If Range("AX4") = 8 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C10"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C26"

ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C35:R190C42"

End If


If Range("AX4") = 9 Then
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C3:R190C11"

ActiveSheet.ChartObjects("Chart 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(3).Values = "='Report HC'!R190C19:R190C27"

ActiveSheet.Char

1 Antwort

0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo Knut,

ich bin leider nicht der VBA-Spezialist und kann Dir eigentlich nicht weiterhelfen, aber vielleicht doch.

Du schreibst, wenn Du das Makro in zwei aufteilst, dann funktioniert es.

Dann mach doch einfach zwei daraus und rufe nach dem Schritt 5, das zweite Makro über einen Befehl aus.

In einem Makro bei mir sieht der Befehl dann so am Ende des ersten Makros so aus:

Application.Run "'Haupt-Menue.xls'!jubi"

Dabei steht Haupt-Menue.xls für den Dateinamen wo das Makro zu finden ist und
jubi ist der Makroname für das dahintergeschaltete.

Evtl. hilft Dir das zumindest weiter, dass Du es in einem Rutsch mit zwei hintereinandergeschalteten Makros erreichst.

Sicherlich gibt es eine Erklärung für Dein eigentliches Problem, aber wie gesagt... dazu sind meine VBA-Kenntnisse zu gering für.

In der Hoffnung Dir dennoch geholfen zu haben...

Have a nice Day.... Gruß Helmut
...