VBA_Bug

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

Betrifft: VBA_Bug
von: Raphael Rudawski
Geschrieben am: 17.08.2015 11:02:20

Hallo Community,
ich habe leider ein Bug in meinen beiden Codes zur Erstellung der Diagramme.
Wenn ich das Makro in der dem jeweiligen Arbeitsblatt des Diagramms über Makros-Makro ausführen, ablaufen lasse funktioniert alles einwandfrei.
Möchte ich das Diagramm über eine Schaltfläche erstellen, welche auf einem anderen Arbeitsblatt zu finden ist ("Hier klicken um MSTA-Diagramm zu erstellen") bekomme ich ständig einen Fehler, welcher wie folgt lautet:
"Objektvariable oder With Blockvariable nicht festgelegt"
Über eure Unterstützung zur Lösung des Problems würde ich mich sehr freuen.
Anbei die Datei inkl. den Makros.
https://www.herber.de/bbs/user/99639.xlsm
Viele Grüße,
Raphael

Bild

Betrifft: AW: VBA_Bug
von: Rudi Maintaire
Geschrieben am: 17.08.2015 12:14:03
Hallo,
alles eine Frage der richtigen Referenzierung.

Sub Complete_Create_and_Format_Diagramm_KW()
  'Tabelle erstellen
  Dim rngBereich As Range
  Dim lngLetzte As Long
  Dim lngReihe As Long
  Dim cht As Chart
  
  With Worksheets("Datentabelle_KW")
    ' letzte belegte Zeile in Spalte B
    lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 2)), _
      .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
    Set rngBereich = .Range(.Cells(10, 2), .Cells(lngLetzte, 54))
  End With
  With Worksheets("Diagramm_KW")
  
    On Error Resume Next
      Set cht = .ChartObjects("MSTA_KW").Chart 'bereits vorhanden?
    On Error GoTo 0
    If cht Is Nothing Then
      'nein, erstellen
      Set cht = .Shapes.AddChart.Chart
    End If
    
    With cht
      .ChartType = xlLineMarkers
      .SetSourceData Source:=rngBereich, PlotBy:=xlRows
      .Parent.Name = "MSTA_KW"
      .Legend.IncludeInLayout = True
      With .Axes(xlValue)
        .MaximumScale = 52
        .MinimumScale = 0
        .MajorUnit = 1
        .TickLabels.NumberFormat = "KW ##"
        .TickLabels.NumberFormat = "KW ##"
      End With
      With .Axes(xlCategory)
        .TickLabels.NumberFormat = "KW ##"
        .TickLabels.NumberFormat = "KW ##"
        .AxisBetweenCategories = False
      End With
      For lngReihe = 1 To .SeriesCollection.Count
        With .SeriesCollection(lngReihe)
          .MarkerStyle = 2
          .MarkerSize = 8
        End With
      Next lngReihe
      With .Parent
        .Top = .Parent.Range("B2").Top
        .Left = .Parent.Range("B2").Left
        .Width = 1200
        .Height = 800
      End With
    End With
  End With
  Set rngBereich = Nothing
End Sub

Gruß
Rudi

Bild

Betrifft: AW: VBA_Bug
von: Raphael Rudawski
Geschrieben am: 17.08.2015 15:18:31
Toller Lösungsweg!
Vielen Dank Rudi

Bild

Betrifft: AW: VBA_Bug
von: Raphael Rudawski
Geschrieben am: 17.08.2015 16:32:19
Hallo Rudi,
könntest du mir bitte noch bei der Variablen Deklarierung helfen ?
Ich habe im Blatt "Datentabelle" in der Zelle G3 einen Wert, welchen ich gerne als Variable verwenden möchte.
Hier soll die Range für die Diagrammerstellung z.B. F3:Fk sein usw
Hier mein bisheriger Ansatz
Sub TEST()
Dim k As Integer
With Sheets("Datentabelle")
k = Cells(3, 7).Value
End With
Sheets("Tabelle1").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlBarStacked
'Diagrammname
Worksheets("Tabelle1").ChartObjects(1).Name = "Gantt_Diagramm"
'Datenrange anwählen
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Values = "=Datentabelle!$F$13:$Cells(6,k)"
ActiveChart.SeriesCollection.NewSeries



""""""Diese Vorgehensweise von Cells (7,k) und bei der Series Collection Cells (8,k) würde ich gerne übernehmen"""""





ActiveChart.SeriesCollection(2).Values = "=Datentabelle!$H$13:$H$80"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Values = "=Datentabelle!$I$13:$I$80"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(4).Values = "=Datentabelle!$F$13:$F$80"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(5).Values = "=Datentabelle!$H$13:$H$80"

ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).XValues = "=Datentabelle!$B$13:$B$80"

Bild

Betrifft: AW: VBA_Bug
von: Luschi
Geschrieben am: 17.08.2015 21:23:25
Hallo Raphael,
so sollte es klappen:
ActiveChart.SeriesCollection(1).Values = "=Datentabelle!$F$13:$F$" & k
bzw.
ActiveChart.SeriesCollection(1).Values = "=Datentabelle!$F$13:$F$" & CStr(k)
Gruß von Luschi
aus klein-Paris

Bild

Betrifft: AW: VBA_Bug
von: Raphael Rudawski
Geschrieben am: 18.08.2015 09:35:05
Guten Morgen Luschi,
vielen Dank für deine schnelle Antwort.
Hm leider habe ich ein Zuordnungsproblem....er erkennt mir die 1 Zeile nicht mehr (siehe bitte Screenshot)
Sub Create_Table()
'k-Variable deklarieren
Dim k As Integer
With Sheets("Datentabelle")
k = Cells(3, 7).Value
End With
'Vorhandenes Diagramm ersetzen
With Sheets("Tabelle1")
.ChartObjects("Gantt_Diagramm").Delete
End With
'Gantt Diagramm erstellen
Sheets("Tabelle1").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlBarStacked
'Diagrammname
Worksheets("Tabelle1").ChartObjects(1).Name = "Gantt_Diagramm"
'Datenrange anwählen
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Values = "=Datentabelle!$F$11:$F$" & k
Userbild

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Code funktioniert trotz Laufzeitfehler"