1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

EXCEL MAKROS - Diagramme in Sheets einfügen, Paste Spezial

Discussion in 'Office-Programme' started by Topper_Harley, Nov 27, 2008.

Thread Status:
Not open for further replies.
  1. Hallo allerseits,

    habe seit gestern angefangen mit Makros in Excel zu experimentieren.
    Bin dauernd auf Google und in Foren unterwegs, konnte aber nach stundenlanger Suche meine Probleme immer noch nicht lösen.

    Ich habe eine Excel Datei mit vielen Tabellenblättern.
    Nun soll in jedem Tabellenblatt ein Diagramm erzeugt werden, welches in dem selben Tabellelnblatt als kleines Fenster erscheinen soll.

    In den unten fett gedrucken Regionen stand immer nur die absolute Bezeichnung eines Sheets. Ich habe mal ein wenig herumversucht (bitte nicht lachen es ist gewiss vom Syntax total falsch). Das Makro erstellt mir nun schon die Diagramme, aber leider immer als gesondertes neues Tabellenblatt VOR dem aktuellen Sheet und beendet sich natürlich mit einer Debugger Fehlermeldung "Index ausserhalb des gültigen Bereichs".
    Wie muss ich die fettgedrucken Passagen abändern, damit es klappt?

    =======================
    ActiveSheet.Select
    Range("B16:C16").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Charts.Add
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
    ActiveChart.SetSourceData Source:=Sheets("ActiveSheet").Range("B16:C2902" _
    ), PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="ActiveSheet"
    Windows("Auswertung_3.xls").SmallScroll Down:=-160
    =======================

    ____________________________________________________________________________________




    Dann noch eine Kleinigkeit mit einem Paste Spezial Befehl.
    Der Programmteil soll aus allen Tabellenblättern einen durch eine Formel erzeugten Wert kopieren. Es klappt auch soweit, aber natürlich kopiert er so nur die Formel und nicht die WERTE!

    =======================
    Worksheets(i).Select
    Range("H9").Select
    Selection.Copy
    Worksheets(3).Select
    Range(Cells(i, 4), Cells(i, 4)).Select
    ActiveSheet.Paste

    Next
    ======================


    Der folgende Befehl ist ja fürs "paste spezial", aber wie bekomme ich ihn oben vernünftig anstatt "ActiveSheet.Paste" eingefügt?


    ======================
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    ======================

    Vielen Dank für eure Mühe!

    Grüße,


    Geerd
     
  2. Beverly

    Beverly Halbes Megabyte

    Hi Geerd,

    zu Frage 1:
    Code:
    Sub diagramm()
        Dim chDiagramm As ChartObject
        Set chDiagramm = ActiveSheet.ChartObjects.Add(0, 0, 500, 350)
        With chDiagramm.Chart
            .ChartType = xlXYScatterSmoothNoMarkers
            .SetSourceData Source:=ActiveSheet.Range("B16:C2902"), PlotBy:=xlColumns
        End With
    End Sub
    
    zu Frage 2:
    Code:
    Sub kopieren()
        Dim i As Integer
        For i = 1 To Worksheets.Count
            With Worksheets(3)
                If Worksheets(i).Name <> Worksheets(3).Name Then
                    Worksheets(i).Range("H9").Copy
                    .Cells(i, 6).PasteSpecial Paste:=xlValues
                End If
            End With
        Next i
    End Sub
    
    Ich würde an deiner Stelle aber nicht mit Worksheets(3) arbeiten, sondern mit dem richtigen Namen des Tabellenblattes, z.B. Worksheets("Tabelle3"). Wenn das Tabellenblatt aus irgendeinem Grund verschoben wird, funktioniert der Code sonst nicht mehr korrekt.

    Die andere Möglichkeit - du verwendest den Codenamen des Tabellenblattes (das ist im Projektexplorer die Bezeichnung am Tabellenblatt vor dem Namen in Klammern):

    Code:
    Sub kopieren()
        Dim i As Integer
        For i = 1 To Worksheets.Count
            With Tabelle3
                If Worksheets(i).CodeName <> Tabelle3.CodeName Then
                    Worksheets(i).Range("H9").Copy
                    .Cells(i, 6).PasteSpecial Paste:=xlValues
                End If
            End With
        Next i
    End Sub
    
     
  3. Wow!
    Wahnsinn Karin!
    Vielen Dank!

    Das mit dem Diagramm hat auf Anhieb funktioniert.
    Die 2. Geschichte habe ich allerdings nach mehreren Anläufen selbst gelöst...
    musste einfach die letzte Zeile des Blockes in
    "Selection.PasteSpecial Paste:=xlPasteValues" ändern.

    Besten Dank noch einmal und alles Gute!
     
  4. Beverly

    Beverly Halbes Megabyte

    Hi Geerd,

    in VBA kann zu 99% auf Select und Activate verzichtet werden, wodurch der Code wesentlich schneller wird und der Cursor nicht mehr im Tabellenlbatt oder zwischen den Tabellenblättern hin- und herspringt.
     
Thread Status:
Not open for further replies.

Share This Page