Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1532to1536
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
28.12.2016 17:21:53
PaulB
Hallo
Ich habe vor einiger Zeit ein Macro mittels Macro-recorder erstellt.
Dieses funktioniert bislang auch zu vollster Zufriedenheit.
Mit einem Datenloger werden Akku-spannungen während einem Entladevorgang mitgeschrieben.
Per Makro werden die Daten in Excel importiert.
In Spalte A ist immer die Zeitbasis, dann kommen 24 Zeilen mit den Daten für 24 Akku's (= bis Zeile Y)
dann kommt zu Schluss die Gesamtspannung (in Zeile Z)
Zur Erstellung von dem Chart der Gesamtspannung habe ich die Zeitachse (= Spalte A) kopiert um diese dann als neue Spalte Z einzufügen.
Dann habe ich den Bereich von Zeitachse und Wert der Ges.-spannung (= Spalte Z und AA) ausgewählt und damit einen Chart erstellt.
  • ActiveWorkbook.Sheets(strTabname).Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("$Z$1:$AA$" & loletzte)

  • Da mit dem Kopieren und Einfügen der Zeitbasis hätte ich mir sparen können, wenn ich lediglich Spalte A UND Spalte Z ausgewählt hätte.
    Das muss jetzt eh umgeändert werden.
    Ähnlich bin ich mit der Zeitbasis (A) und den Werten aller Akku's verfahren (= Spalte A bis Y
  • ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("$A$1:$Y$" & loletzte)

  • Bei der Erstellung war der Wert der Totalspannung IMMER in der Kolonne "Z" bevor er durch das Einfügen nach AA verschoben wurde.
    Nun hat sich aber die Sache geändert, weil jetzt nicht mehr ausschließlich 2 Volt Akku's sonder auch 6- und 12 Volt Akku's zum Einsatz kommen.
    Dadurch gibt es je nach Typ weniger Einzel-messwerte, dadurch rückt auch die Spalte der Gesamtspannung von vorne.
    In jedem Fall befindet er sich aber in der jeweiligen letzten Spalte der Daten.
    Frage: wie kann ich das Macro so umändern dass immer Kolonne "A" UND die jeweilige letzte Kolonne ausgewählt werden ?
    Für die Einzelspannungen kann man den Bereich von Spalte A BIS zur Vor-letzten Spalte auswählen.
    Wenn jemand mir weiterhelfen könnte mit:
    - der Bestimmung der letzten Spalte
    - wie wäre der Code für Spalte A UND letzte Spalte, sowie
    - wie wäre der Code für Spalte A BIS letvorzte Spalte.
    Hier ist noch eine Liste mit Werten welche im Vorfeld definiert wurden.
  • Dim varName As Variant
    Dim strName As String
    Dim Neuer_Dateiname As String
    Dim strTabname As String
    Dim oChrt As ChartObject
    Dim Chrt As Chart
    Dim loletzte As Long
    Dim strPfad As String
    'letzte Zeile in Spalte A im aktiven Blatt ermitteln
    loletzte = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    'Name des aktiven Arbeitsblattes in Variable schreiben
    strTabname = ActiveWorkbook.ActiveSheet.Name

  • Vielen Dank für eure Hilfe.
    Mit freundlichen Grüssen.
    Allen wünsche ich ein gutes, gesundes und friedliches neue Jahr

    9
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Makro anpassen
    28.12.2016 17:58:44
    Gerd
    Hallo Paul!
    Sub PaulB()
    Dim lngLastCol As Long
    Dim rngAL As Range
    Dim rngAVL As Range
    With Worksheets("Tabelle1")
    Rem Wenn jemand mir weiterhelfen könnte mit:
    Rem 1)- der Bestimmung der letzten Spalte
    MsgBox .Cells(1, .Columns.Count).End(xlToLeft).Column
    lngLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Rem 2)- wie wäre der Code für Spalte A UND letzte Spalte, sowie
    With .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    MsgBox Union(.Cells, .Cells.Offset(, lngLastCol - 1)).Address
    Set rngAL = Union(.Cells, .Cells.Offset(, lngLastCol - 1))
    Rem 3)- wie wäre der Code für Spalte A BIS letvorzte Spalte.
    MsgBox .Cells.Resize(.Rows.Count, lngLastCol - 1).Address
    Set rngAVL = .Cells.Resize(.Rows.Count, lngLastCol - 1)
    End With
    End With
    '.... weitere Code
    Rem Rangevariablen zurücksetzen
    Set rngAL = Nothing
    Set rngAVL = Nothing
    End Sub
    

    Gruß Gerd
    Anzeige
    AW: Makro anpassen
    28.12.2016 19:24:06
    Werner
    Hallo Paul,
    obwohl du schon von Gerd eine Antwort hast von mir noch eine kleine Datei zum spielen und testen.
    https://www.herber.de/bbs/user/110230.xlsm
    Gruß Werner
    AW: Makro anpassen
    28.12.2016 21:02:36
    paulb
    Hallo Gerd
    Danke für deine Hilfe.
    Und die noch unerwartet schnell, ich bin angenehm überrascht.
    Richtig versuchen kann ich erst morgen früh.
    Ich habe mich heute schon selbst auf die Suche einer Lösung gemacht,leider ohne erfolgs-bringendes Resultat.
    In "meinem" Code wird ja die letzte Zeile ermittelt durch:
    loletzte = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    Muss ich "ActiveWorkbook.ActiveSheet" nicht an mehreren Stellen einfügen ?
    müsste ich deinen Vorschlag zur Ermittlung der letzten Spalte nicht umändern nach:
    lngLastCol = ActiveWorkbook.ActiveSheet.Cells(1, .Columns.Count).End(xlToLeft).Column
    In deiner Hilfe steht:
    With Worksheets("Tabelle1") Hmmm !
    In deiner Hilfe steht auch dreimal:
    MsgBox Erscheint dann nicht jedesmal ein Hinweisfenster ?
    Ich hatte mich vielleicht nicht korrekt ausgedrückt mit der Bitte um Hilfe zur Ermittlung der letzten Spalte.
    Ich muss das Resultat nicht angezeigt bekommen.
    Die Ermittlung ist ja nötig für Punkt 2 und 3.
    Nochmals. Danke Gerd.
    Aber ich habe lediglich etwas Erfahrung mit dem Macro-recorder.
    Bei den nötigen Anpassungen habe ich grosse Probleme.
    Ergänzungen welche für Dich selbstverständlich sind, sind für mich nicht unbedingt ersichtlich.
    Für Punkt 2 war eigentlich gedacht wie der Code wäre um den Chart der Werte von Spalte A UND der-letzten Spalte.
    Punkt 3 sollte der Code für den Chart der Spalten A BIS zur vorletzte Spalte.
    Sorry dass ich mich nicht präziser Ausgedrückt hatte. Das ist aber auch kompliziert, Mensch.
    In "meinem" Code war das für den Fall von 24 Zellen ja so:
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("$A$1:$Y$" & loletzte)

    Nur dass die Anlagen sich so geändert haben dass es nun nicht mehr IMMER 24 Zellen sind.
    Es können auch 4 oder 8 Akku's sein. Deshalb muss die letzte Spalte ermittelt werden.
    Letzte Spalte ist die Gesamtspannung.
    Ersten Spalte ist die Zeit in Minuten.
    Also ein Chart aus der ersten UND der letzten Spalte ergibt den Verlauf der Gesamtspannung.
    Ein Chart aus der ersten Spalte BIS zur vorletzten Spalte ergibt ein Chart mit den Verläufen aller Zellen. Wenn eine aus der Reihe tanzt - dann fällt das auf.
    Gerd. Darf ich dich freundlichst bitten um nochmal ein Blick darauf zu werfen ?
    Vielen Dank
    Anzeige
    AW: Makro anpassen
    28.12.2016 23:29:14
    paulb
    Hallo Werner
    Auch Dir vielen Dank.
    Versuchen kann ich auch dein Vorschlag morgen.
    Ich habe hier zuhause "Libre-Office".
    Dein Makro habe ich mir angeschaut und ich kann das auch nachvollziehen :-)
    Für die Spalte A und die letzte Spalte hast du ein rngBereich3 erstellt.
    Frage 1: wie müsste den jetzt die Codezeile zur Erstellung vom Chart lauten ?
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range(rngBereich3) etwa so ?
    und wie für den Bereich von Spalte a bis vorletzte Spalte ?
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("rngBereich1" & rngBereich2) etwa so ?
    Vielen Dank
    Freundliche Grüsse.
    Anzeige
    AW: Makro anpassen
    28.12.2016 23:51:33
    paulb
    Hallo Werner
    Mein voriger Vorschlag wie die Kommandozeile lauten soll ist wohl mehrfach falsch.
    Zum einen ist darin zuviel Range, und dann fehlen auch nochmal ".
    In meinem aktuellen Makro steht ja folgendes für den Chart von Spalte A BIS Spalte Y
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("$A$1:$Y$" & loletzte)
    Könnte man das nicht so umändern ?
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("$A$1:$vorletzteSpalte$" & loletzte)
    Für Spalte A UND letzte Spalte ist doch bestimmt .Range nicht richtig ?
    ActiveChart.SetSourceData Source:=ActiveWorkbook.Sheets(strTabname).Range("rngBereich3")
    Nochmals Dank
    Jetzt gehe ich zu Bett. Hoffentlich träume ich nicht von irgendwelchen Spalten.
    Anzeige
    AW: Makro anpassen
    29.12.2016 11:28:38
    Werner
    Hallo Paul,
    schau dir mal das Beispiel an, ist für deinen Datenbereich eingerichtet. Du musst im Code nur noch das Tabellenblatt anpassen.
    https://www.herber.de/bbs/user/110246.xlsm
    Gruß Werner
    AW: Makro anpassen
    29.12.2016 18:55:46
    paulb
    Hallo
    Es ist vollbracht.
    Mit Eurer Hilfe läuft das Ding jetzt durch und funktioniert wie erhofft.
    Vielen Dank an Werner und Gerd.
    Die Erklärungen im Makro von Werner, welche Zeile dann welche Wirkung hat hilft mir zudem zu verstehen.
    Meine besten Wünsche für das neue Jahr
    AW: Gerne u. Danke für die Rückmeldung
    29.12.2016 19:47:37
    Werner
    Hallo Paul,
    danke und dir auch einen guten Rutsch nach 2017.
    Gruß Werner
    Anzeige
    AW: Makro anpassen
    29.12.2016 10:15:03
    Gerd
    Hallo Paul,
    du kannst
    With Worksheets("Tabelle1")
    durch
    With ActiveWorkbook.Worksheets(strTabname)
    ersetzen, wenn du strTabname oberhalb einen Blattnamen zugewiesen hast
    und den Diagrammen nach End With
    ....SetDatasource Source:=rngAL
    bzw. ........... Source:=rngAVL
    die Bereiche als Quelle zuweisen.
    Gruß Gerd

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige