Macro.bas
527 lines
| 20.4 KiB
| text/x-vbnet
|
VbNetLexer
| r19 | ' ========================================= | ||
| r32 | ' 1) Widerstandsdiagramme für die Standard Messung | ||
| r19 | ' ========================================= | ||
| r12 | Sub AktualisiereXYDiagrammWiderstand() | ||
| Dim datenWs As Worksheet | |||
| Dim diagrammWs As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim xRange As Range | |||
| Dim yRange As Range | |||
| Dim letzteSpalte As Long | |||
| Dim letzteZeile As Long | |||
| Dim i As Long | |||
| ' Arbeitsblätter definieren | |||
| Set datenWs = ThisWorkbook.Worksheets(1) ' Blatt mit den Daten | |||
| Set diagrammWs = ThisWorkbook.Worksheets(3) ' Blatt mit dem Diagramm | |||
| ' Diagramm definieren | |||
| Set chartObj = diagrammWs.ChartObjects(1) ' Diagrammname anpassen | |||
| Set diagramm = chartObj.Chart | |||
| ' Letzte Zeile und Spalte der Daten finden | |||
| letzteZeile = datenWs.Cells(datenWs.Rows.Count, 1).End(xlUp).Row ' X-Werte in Spalte A | |||
| letzteSpalte = datenWs.Cells(3, datenWs.Columns.Count).End(xlToLeft).Column ' Y-Werte ab Spalte B | |||
| ' MsgBox letzteZeile, vbInformation | |||
| ' MsgBox letzteSpalte, vbInformation | |||
| ' X-Werte-Bereich definieren (fix in Spalte A, ab Zeile 3) | |||
| Set xRange = datenWs.Range(datenWs.Cells(3, 1), datenWs.Cells(letzteZeile, 1)) ' Daten beginnen ab Zeile 3 | |||
| ' Bestehende Datenreihen im Diagramm entfernen | |||
| Do While diagramm.SeriesCollection.Count > 0 | |||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| ' Neue Datenreihen hinzufügen | |||
| For i = 2 To letzteSpalte ' Y-Werte beginnen in Spalte B | |||
| Set yRange = datenWs.Range(datenWs.Cells(3, i), datenWs.Cells(letzteZeile, i)) | |||
| ' Neue Datenreihe hinzufügen | |||
| With diagramm.SeriesCollection.NewSeries | |||
| .Name = datenWs.Cells(2, i).Value ' Name der Reihe aus der Kopfzeile (Zeile 1) | |||
| .XValues = xRange | |||
| .Values = yRange | |||
| r18 | .Smooth = False ' Glätten ausschalten | ||
| r12 | End With | ||
| Next i | |||
| End Sub | |||
| r19 | ' ========================================= | ||
| r32 | ' 2) Kraftdiagramme für die Standard Messung | ||
| r19 | ' ========================================= | ||
| r12 | Sub AktualisiereXYDiagrammKraft() | ||
| Dim datenWs As Worksheet | |||
| Dim diagrammWs As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim xRange As Range | |||
| Dim yRange As Range | |||
| Dim letzteSpalte As Long | |||
| Dim letzteZeile As Long | |||
| Dim i As Long | |||
| ' Arbeitsblätter definieren | |||
| Set datenWs = ThisWorkbook.Worksheets(2) ' Blatt mit den Daten | |||
| Set diagrammWs = ThisWorkbook.Worksheets(4) ' Blatt mit dem Diagramm | |||
| ' Diagramm definieren | |||
| Set chartObj = diagrammWs.ChartObjects(1) ' Diagrammname anpassen | |||
| Set diagramm = chartObj.Chart | |||
| ' Letzte Zeile und Spalte der Daten finden | |||
| letzteZeile = datenWs.Cells(datenWs.Rows.Count, 1).End(xlUp).Row ' X-Werte in Spalte A | |||
| letzteSpalte = datenWs.Cells(3, datenWs.Columns.Count).End(xlToLeft).Column ' Y-Werte ab Spalte B | |||
| 'MsgBox letzteZeile, vbInformation | |||
| 'MsgBox letzteSpalte, vbInformation | |||
| ' X-Werte-Bereich definieren (fix in Spalte A, ab Zeile 3) | |||
| Set xRange = datenWs.Range(datenWs.Cells(3, 1), datenWs.Cells(letzteZeile, 1)) ' Daten beginnen ab Zeile 3 | |||
| ' Bestehende Datenreihen im Diagramm entfernen | |||
| Do While diagramm.SeriesCollection.Count > 0 | |||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| ' Neue Datenreihen hinzufügen | |||
| For i = 2 To letzteSpalte ' Y-Werte beginnen in Spalte B | |||
| Set yRange = datenWs.Range(datenWs.Cells(3, i), datenWs.Cells(letzteZeile, i)) | |||
| ' Neue Datenreihe hinzufügen | |||
| With diagramm.SeriesCollection.NewSeries | |||
| .Name = datenWs.Cells(2, i).Value ' Name der Reihe aus der Kopfzeile (Zeile 1) | |||
| .XValues = xRange | |||
| .Values = yRange | |||
| r18 | .Smooth = False ' Glätten ausschalten | ||
| r12 | End With | ||
| Next i | |||
| End Sub | |||
| r19 | ' ========================================= | ||
| r32 | ' 5) Widerstandsdiagramme für die Inkrement-Messung (Position-Gruppierung) | ||
| r19 | ' ========================================= | ||
| Sub AktualisiereXYDiagrammInkrementWiderstandPosition() | |||
| Dim wsBasis As Worksheet | |||
| r12 | Dim ws As Worksheet | ||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteZeile As Long | |||
| Dim letzteSpalte As Long | |||
| r19 | Dim blockAnzahl As Long | ||
| r12 | Dim startZeile As Long | ||
| r19 | Dim posIndex As Integer | ||
| r12 | |||
| ' Arbeitsblatt "Widerstandsdiagramm" festlegen | |||
| r19 | Set wsBasis = ThisWorkbook.Worksheets("Widerstandsdiagramm") | ||
| r12 | |||
| r19 | ' --- Schritt 1: Anzahl der Positions-Blöcke ermitteln --- | ||
| ' Wir nehmen das erste Messblatt vor "Widerstandsdiagramm" als Referenz | |||
| For Each ws In ThisWorkbook.Worksheets | |||
| If ws.Index < wsBasis.Index Then | |||
| letzteSpalte = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column | |||
| blockAnzahl = Int(letzteSpalte / 3) | |||
| Exit For | |||
| End If | |||
| Next ws | |||
| If blockAnzahl = 0 Then | |||
| MsgBox "Keine Datenblöcke gefunden.", vbExclamation | |||
| r12 | Exit Sub | ||
| End If | |||
| r19 | ' --- Schritt 2: Diagramm im Basisblatt für Position 1 aktualisieren --- | ||
| Call AktualisiereDiagrammFuerPosition(wsBasis, 1) | |||
| ' --- Schritt 3: Für jede weitere Position Blatt kopieren und Diagramm anpassen --- | |||
| For posIndex = 2 To blockAnzahl | |||
| wsBasis.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count-1) | |||
| With ActiveSheet | |||
| .Name = "Widerstandsdiagramm" & posIndex | |||
| Call AktualisiereDiagrammFuerPosition(ActiveSheet, posIndex) | |||
| End With | |||
| Next posIndex | |||
| End Sub | |||
| Private Sub AktualisiereDiagrammFuerPosition(wsDiagramm As Worksheet, posIndex As Integer) | |||
| Dim ws As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteZeile As Long | |||
| Dim datenBereichX As Range | |||
| Dim datenBereichY1 As Range | |||
| Dim datenReihe As Series | |||
| Dim startSpalte As Long | |||
| Dim startZeile As Long | |||
| Dim reihenName As String | |||
| ' Diagramm im Blatt suchen | |||
| If wsDiagramm.ChartObjects.Count = 0 Then Exit Sub | |||
| Set chartObj = wsDiagramm.ChartObjects(1) | |||
| r12 | Set diagramm = chartObj.Chart | ||
| ' Vorhandene Datenreihen löschen | |||
| Do While diagramm.SeriesCollection.Count > 0 | |||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| r19 | ' Spalten für gewünschte Position bestimmen | ||
| startSpalte = (posIndex - 1) * 3 + 1 | |||
| startZeile = 3 | |||
| ' Alle Messblätter vor "Widerstandsdiagramm" durchlaufen | |||
| r12 | For Each ws In ThisWorkbook.Worksheets | ||
| r19 | If ws.Index < ThisWorkbook.Worksheets("Widerstandsdiagramm").Index Then | ||
| r12 | letzteZeile = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row | ||
| r19 | If letzteZeile >= startZeile Then | ||
| With ws | |||
| ' X und Y1 für diese Position | |||
| Set datenBereichX = .Range(.Cells(startZeile, startSpalte), .Cells(letzteZeile, startSpalte)) | |||
| Set datenBereichY1 = .Range(.Cells(startZeile, startSpalte + 1), .Cells(letzteZeile, startSpalte + 1)) | |||
| ' Reihenname: Blattname + A1 + Position | |||
| reihenName = ws.Name | |||
| ' Datenreihe hinzufügen | |||
| Set datenReihe = diagramm.SeriesCollection.NewSeries | |||
| datenReihe.Values = datenBereichY1 | |||
| datenReihe.XValues = datenBereichX | |||
| datenReihe.Name = reihenName | |||
| On Error Resume Next | |||
| datenReihe.Smooth = False | |||
| On Error GoTo 0 | |||
| End With | |||
| r12 | End If | ||
| End If | |||
| Next ws | |||
| End Sub | |||
| r19 | |||
| ' ========================================= | |||
| r32 | ' 6) Kraftdiagramme für die Inkrement-Messung (Position-Gruppierung) | ||
| r19 | ' ========================================= | ||
| Sub AktualisiereXYDiagrammInkrementKraftPosition() | |||
| Dim wsBasis As Worksheet | |||
| Dim ws As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteZeile As Long | |||
| Dim letzteSpalte As Long | |||
| Dim blockAnzahl As Long | |||
| Dim posIndex As Integer | |||
| ' Arbeitsblatt "Kraftdiagramm" festlegen | |||
| Set wsBasis = ThisWorkbook.Worksheets("Kraftdiagramm") | |||
| ' --- Schritt 1: Anzahl der Positions-Blöcke ermitteln --- | |||
| ' Wir nehmen das erste Messblatt vor "Widerstandsdiagramm" als Referenz | |||
| For Each ws In ThisWorkbook.Worksheets | |||
| If ws.Index < ThisWorkbook.Worksheets("Widerstandsdiagramm").Index Then | |||
| letzteSpalte = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column | |||
| blockAnzahl = Int(letzteSpalte / 3) | |||
| Exit For | |||
| End If | |||
| Next ws | |||
| If blockAnzahl = 0 Then | |||
| MsgBox "Keine Datenblöcke gefunden.", vbExclamation | |||
| Exit Sub | |||
| End If | |||
| ' --- Schritt 2: Diagramm im Basisblatt für Position 1 aktualisieren --- | |||
| Call AktualisiereDiagrammFuerPosition_Kraft(wsBasis, 1) | |||
| ' --- Schritt 3: Für jede weitere Position Blatt kopieren und Diagramm anpassen --- | |||
| For posIndex = 2 To blockAnzahl | |||
| wsBasis.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) | |||
| With ActiveSheet | |||
| .Name = "Kraftdiagramm" & posIndex | |||
| Call AktualisiereDiagrammFuerPosition_Kraft(ActiveSheet, posIndex) | |||
| End With | |||
| Next posIndex | |||
| End Sub | |||
| r12 | |||
| r19 | Private Sub AktualisiereDiagrammFuerPosition_Kraft(wsDiagramm As Worksheet, posIndex As Integer) | ||
| r12 | Dim ws As Worksheet | ||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteZeile As Long | |||
| Dim datenBereichX As Range | |||
| Dim datenBereichY2 As Range | |||
| Dim datenReihe As Series | |||
| r19 | Dim startSpalte As Long | ||
| r12 | Dim startZeile As Long | ||
| r19 | Dim reihenName As String | ||
| ' Diagramm im Blatt suchen | |||
| If wsDiagramm.ChartObjects.Count = 0 Then Exit Sub | |||
| Set chartObj = wsDiagramm.ChartObjects(1) | |||
| Set diagramm = chartObj.Chart | |||
| ' Vorhandene Datenreihen löschen | |||
| Do While diagramm.SeriesCollection.Count > 0 | |||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| ' Spalten für gewünschte Position bestimmen | |||
| startSpalte = (posIndex - 1) * 3 + 1 | |||
| startZeile = 3 | |||
| ' Alle Messblätter vor "Widerstandsdiagramm" durchlaufen | |||
| For Each ws In ThisWorkbook.Worksheets | |||
| If ws.Index < ThisWorkbook.Worksheets("Widerstandsdiagramm").Index Then | |||
| letzteZeile = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row | |||
| If letzteZeile >= startZeile Then | |||
| With ws | |||
| ' X und Y2 für diese Position | |||
| Set datenBereichX = .Range(.Cells(startZeile, startSpalte), .Cells(letzteZeile, startSpalte)) | |||
| Set datenBereichY2 = .Range(.Cells(startZeile, startSpalte + 2), .Cells(letzteZeile, startSpalte + 2)) | |||
| ' Reihenname: Blattname | |||
| reihenName = ws.Name | |||
| ' Datenreihe hinzufügen | |||
| Set datenReihe = diagramm.SeriesCollection.NewSeries | |||
| datenReihe.Values = datenBereichY2 | |||
| datenReihe.XValues = datenBereichX | |||
| datenReihe.Name = reihenName | |||
| On Error Resume Next | |||
| datenReihe.Smooth = False | |||
| On Error GoTo 0 | |||
| End With | |||
| End If | |||
| End If | |||
| Next ws | |||
| End Sub | |||
| ' ========================================= | |||
| r32 | ' 3) Widerstandsdiagramme für die Inkrement-Messung (Messung-Gruppierung) | ||
| r19 | ' ========================================= | ||
| Sub AktualisiereXYDiagrammInkrementWiderstand() | |||
| Dim wsBasis As Worksheet | |||
| Dim ws As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteSpalte As Long | |||
| r12 | Dim blockAnzahl As Long | ||
| r19 | Dim messungIndex As Integer | ||
| r12 | |||
| r19 | ' Arbeitsblatt "Widerstandsdiagramm" festlegen | ||
| Set wsBasis = ThisWorkbook.Worksheets("Widerstandsdiagramm") | |||
| r12 | |||
| r19 | ' --- Anzahl der Positions-Blöcke ermitteln (aus erstem Messblatt) --- | ||
| For Each ws In ThisWorkbook.Worksheets | |||
| If ws.Index < wsBasis.Index Then | |||
| letzteSpalte = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column | |||
| blockAnzahl = Int(letzteSpalte / 3) | |||
| Exit For | |||
| End If | |||
| Next ws | |||
| If blockAnzahl = 0 Then | |||
| MsgBox "Keine Datenblöcke gefunden.", vbExclamation | |||
| r12 | Exit Sub | ||
| End If | |||
| r19 | ' --- Diagramm im Basisblatt für Messung 1 aktualisieren --- | ||
| Call AktualisiereDiagrammFuerMessung_Widerstand(wsBasis, 1, blockAnzahl) | |||
| ' --- Für jede weitere Messung: Blatt kopieren --- | |||
| For messungIndex = 2 To wsBasis.Index - 1 | |||
| wsBasis.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count-1) | |||
| With ActiveSheet | |||
| .Name = "Widerstandsdiagramm" & messungIndex | |||
| Call AktualisiereDiagrammFuerMessung_Widerstand(ActiveSheet, messungIndex, blockAnzahl) | |||
| End With | |||
| Next messungIndex | |||
| End Sub | |||
| Private Sub AktualisiereDiagrammFuerMessung_Widerstand(wsDiagramm As Worksheet, messungNr As Integer, blockAnzahl As Long) | |||
| Dim ws As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteZeile As Long | |||
| Dim datenBereichX As Range | |||
| Dim datenBereichY1 As Range | |||
| Dim datenReihe As Series | |||
| Dim posIndex As Integer | |||
| Dim startSpalte As Long | |||
| Dim startZeile As Long | |||
| ' Diagramm im Blatt suchen | |||
| If wsDiagramm.ChartObjects.Count = 0 Then Exit Sub | |||
| Set chartObj = wsDiagramm.ChartObjects(1) | |||
| r12 | Set diagramm = chartObj.Chart | ||
| ' Vorhandene Datenreihen löschen | |||
| Do While diagramm.SeriesCollection.Count > 0 | |||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| r19 | startZeile = 3 | ||
| Set ws = ThisWorkbook.Worksheets(messungNr) | |||
| letzteZeile = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row | |||
| If letzteZeile >= startZeile Then | |||
| For posIndex = 1 To blockAnzahl | |||
| startSpalte = (posIndex - 1) * 3 + 1 | |||
| Set datenBereichX = ws.Range(ws.Cells(startZeile, startSpalte), ws.Cells(letzteZeile, startSpalte)) | |||
| Set datenBereichY1 = ws.Range(ws.Cells(startZeile, startSpalte + 1), ws.Cells(letzteZeile, startSpalte + 1)) | |||
| Set datenReihe = diagramm.SeriesCollection.NewSeries | |||
| datenReihe.Values = datenBereichY1 | |||
| datenReihe.XValues = datenBereichX | |||
| datenReihe.Name = "Position " & posIndex | |||
| datenReihe.Smooth = False | |||
| Next posIndex | |||
| End If | |||
| End Sub | |||
| ' ========================================= | |||
| r32 | ' 4) Kraftdiagramme für die Inkrement-Messung (Messung-Gruppierung) | ||
| r19 | ' ========================================= | ||
| Sub AktualisiereXYDiagrammInkrementKraft() | |||
| Dim wsBasis As Worksheet | |||
| Dim ws As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteSpalte As Long | |||
| Dim blockAnzahl As Long | |||
| Dim messungIndex As Integer | |||
| ' Arbeitsblatt "Kraftdiagramm" festlegen | |||
| Set wsBasis = ThisWorkbook.Worksheets("Kraftdiagramm") | |||
| ' --- Anzahl der Positions-Blöcke ermitteln (aus erstem Messblatt) --- | |||
| r12 | For Each ws In ThisWorkbook.Worksheets | ||
| r19 | If ws.Index < ThisWorkbook.Worksheets("Widerstandsdiagramm").Index Then | ||
| letzteSpalte = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column | |||
| blockAnzahl = Int(letzteSpalte / 3) | |||
| Exit For | |||
| r12 | End If | ||
| Next ws | |||
| r19 | |||
| If blockAnzahl = 0 Then | |||
| MsgBox "Keine Datenblöcke gefunden.", vbExclamation | |||
| Exit Sub | |||
| End If | |||
| ' --- Diagramm im Basisblatt für Messung 1 aktualisieren --- | |||
| Call AktualisiereDiagrammFuerMessung_Kraft(wsBasis, 1, blockAnzahl) | |||
| ' --- Für jede weitere Messung: Blatt kopieren --- | |||
| For messungIndex = 2 To ThisWorkbook.Worksheets("Widerstandsdiagramm").Index - 1 | |||
| wsBasis.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) | |||
| With ActiveSheet | |||
| .Name = "Kraftdiagramm" & messungIndex | |||
| Call AktualisiereDiagrammFuerMessung_Kraft(ActiveSheet, messungIndex, blockAnzahl) | |||
| End With | |||
| Next messungIndex | |||
| r12 | End Sub | ||
| r19 | |||
| Private Sub AktualisiereDiagrammFuerMessung_Kraft(wsDiagramm As Worksheet, messungNr As Integer, blockAnzahl As Long) | |||
| Dim ws As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim letzteZeile As Long | |||
| Dim datenBereichX As Range | |||
| Dim datenBereichY2 As Range | |||
| Dim datenReihe As Series | |||
| Dim posIndex As Integer | |||
| Dim startSpalte As Long | |||
| Dim startZeile As Long | |||
| ' Diagramm im Blatt suchen | |||
| If wsDiagramm.ChartObjects.Count = 0 Then Exit Sub | |||
| Set chartObj = wsDiagramm.ChartObjects(1) | |||
| Set diagramm = chartObj.Chart | |||
| ' Vorhandene Datenreihen löschen | |||
| Do While diagramm.SeriesCollection.Count > 0 | |||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| startZeile = 3 | |||
| Set ws = ThisWorkbook.Worksheets(messungNr) | |||
| letzteZeile = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row | |||
| If letzteZeile >= startZeile Then | |||
| For posIndex = 1 To blockAnzahl | |||
| startSpalte = (posIndex - 1) * 3 + 1 | |||
| Set datenBereichX = ws.Range(ws.Cells(startZeile, startSpalte), ws.Cells(letzteZeile, startSpalte)) | |||
| Set datenBereichY2 = ws.Range(ws.Cells(startZeile, startSpalte + 2), ws.Cells(letzteZeile, startSpalte + 2)) | |||
| Set datenReihe = diagramm.SeriesCollection.NewSeries | |||
| datenReihe.Values = datenBereichY2 | |||
| datenReihe.XValues = datenBereichX | |||
| datenReihe.Name = "Position " & posIndex | |||
| datenReihe.Smooth = False | |||
| Next posIndex | |||
| End If | |||
| End Sub | |||
| r32 | |||
| ' ========================================= | |||
| ' 7) Diagramme für die HF-Messung | |||
| ' ========================================= | |||
| Sub AktualisiereXYDiagrammHF() | |||
| Dim datenWs As Worksheet | |||
| Dim diagrammWs As Worksheet | |||
| Dim chartObj As ChartObject | |||
| Dim diagramm As Chart | |||
| Dim xRange As Range | |||
| Dim yRange As Range | |||
| Dim letzteSpalte As Long | |||
| Dim letzteZeile As Long | |||
| Dim dataIndex As Long | |||
| Dim chartIndex As Long | |||
| Dim i As Long | |||
| Dim s As Series | |||
| Application.ScreenUpdating = False | |||
| Application.EnableEvents = False | |||
| r34 | ' Für Paare 2->18, 3->19...17->33 | ||
| r33 | For dataIndex = 2 To 17 | ||
| r34 | |||
| r33 | chartIndex = dataIndex + 16 | ||
| r34 | |||
| r32 | Set datenWs = ThisWorkbook.Worksheets(dataIndex) | ||
| Set diagrammWs = ThisWorkbook.Worksheets(chartIndex) | |||
| Set chartObj = diagrammWs.ChartObjects(1) | |||
| Set diagramm = chartObj.Chart | |||
| r34 | |||
| r32 | letzteZeile = datenWs.Cells(datenWs.Rows.Count, 1).End(xlUp).Row | ||
| letzteSpalte = datenWs.Cells(2, datenWs.Columns.Count).End(xlToLeft).Column | |||
| r34 | |||
| r32 | Set xRange = datenWs.Range(datenWs.Cells(3, 1), datenWs.Cells(letzteZeile, 1)) | ||
| r34 | |||
| r32 | Do While diagramm.SeriesCollection.Count > 0 | ||
| diagramm.SeriesCollection(1).Delete | |||
| Loop | |||
| r34 | |||
| r32 | For i = 2 To letzteSpalte | ||
| Set yRange = datenWs.Range(datenWs.Cells(3, i), datenWs.Cells(letzteZeile, i)) | |||
| With diagramm.SeriesCollection.NewSeries | |||
| .Name = datenWs.Cells(2, i).Value | |||
| .XValues = xRange | |||
| .Values = yRange | |||
| .Smooth = False | |||
| .ChartType = xlXYScatterLines | |||
| r34 | |||
| r32 | ' --- Nur Linie, keine Punkte --- | ||
| .MarkerStyle = xlMarkerStyleNone | |||
| End With | |||
| Next i | |||
| r34 | |||
| r32 | ' ---- Farben der ersten 3 Serien fest zuweisen ---- | ||
| If diagramm.SeriesCollection.Count >= 1 Then diagramm.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 128, 64) | |||
| If diagramm.SeriesCollection.Count >= 2 Then diagramm.SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(255, 0, 0) | |||
| If diagramm.SeriesCollection.Count >= 3 Then diagramm.SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(0, 128, 189) | |||
| r34 | ' ---- Legende nur ausblenden, wenn: | ||
| ' Datensatz 1 leer, Datensatz 2 leer, Datensatz 3 hat Werte ---- | |||
| Dim hat1 As Boolean, hat2 As Boolean, hat3 As Boolean | |||
| hat1 = WorksheetFunction.CountA(datenWs.Range(datenWs.Cells(3, 2), datenWs.Cells(letzteZeile, 2))) > 0 ' Spalte B | |||
| hat2 = WorksheetFunction.CountA(datenWs.Range(datenWs.Cells(3, 3), datenWs.Cells(letzteZeile, 3))) > 0 ' Spalte C | |||
| hat3 = WorksheetFunction.CountA(datenWs.Range(datenWs.Cells(3, 4), datenWs.Cells(letzteZeile, 4))) > 0 ' Spalte D | |||
| If (Not hat1) And (Not hat2) And hat3 Then | |||
| diagramm.HasLegend = False | |||
| Else | |||
| diagramm.HasLegend = True | |||
| End If | |||
| r32 | Next dataIndex | ||
| Application.EnableEvents = True | |||
| Application.ScreenUpdating = True | |||
| r34 | End Sub |
