Clever-Excel-Forum

Normale Version: Kopieren von Seiten in eine Seite durch Case condition
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Allerseits!

ich bin neu hier und in der VBA-Welt. Auf gute Zusammenarbeit!

*Seite=Sheet/Blatt in diesem Zusammenhang, sämtliche Angaben in ein und der selben Mappe (workbook)

Ich sitze über einem Makro, dass wie folgend funktionieren soll:
Eine Maschine gibt für jeden Durchlauf Excel-Tabellen mit Prozesswerten aus, die gemessen werden.
Diese sollen automatisiert aufbereitet werden, sodass qualitative Aussagen zügig getroffen werden können.

1) Seite 1: Visualisierung von gefilterten relevanten Werten in einer Tabelle und ein Diagramm
2) Seite 2: mein temporärer Zwischenspeicher für das betrachtete Profil der Maschine; also hier soll von der betrachteten Seite alles hinkopiert werden.
3) folgende Seiten: die Roh-Daten.

ich habe das jetzt einigermaßen bewältigt, hänge aber noch beim Kopieren; irgendwie kopiert mein Makro immer die gleiche Seite (?);
wahrscheinlich ein Fehler mit dem "aktivieren" der Seiten. Ich habe gelesen, man soll activesheet eh vermeiden, aber manchmal geht das nur sehr umständlich...



Arbeitsmappe/Workbook:

Private Sub Workbook_Open()
'1)überprüfe existierende Worksheets

    Dim Mainworkbook As Workbook
   
    Set Mainworkbook = ActiveWorkbook
        'Print Mainworkbook.Sheets.Count
       
        For Z = 1 To Mainworkbook.Sheets.Count
            Mainworkbook.Sheets("Auswertung").Range("I" & Z) = Mainworkbook.Sheets(Z).Name
        Next Z
        'funktioniert
        Y = Mainworkbook.Sheets.Count - 2
       
        MsgBox "Es wurden " & Y & " Ofenprofile erfasst.", vbOKOnly, "Erfasste Ofenprofile"
       
Tabelle2.Anzeigeauswahl.Clear
Tabelle2.Anzeigeauswahl.Value = ""
    With Tabelle2.Anzeigeauswahl    'erfasst dynamisch die eingefügten Tabellen
        For L = 1 To Y
            .AddItem Mainworkbook.Sheets(L + 2).Name
        Next L
       
    End With

End Sub


Sheet1/Blatt1:

Private Sub Anzeigeauswahl_Change()
Dim ZeilenAnzahl As Long
Dim Anzeigeauswahl As String
Dim Mainworkbook As Workbook
Dim ProfilName As String
Dim rng1 As Range
Dim rng2 As Range

Set Mainworkbook = ActiveWorkbook
Anzeigeauswahl = Me.Anzeigeauswahl.Text
Application.ActiveSheet.Range("G4").Select
ActiveCell.Value = Anzeigeauswahl
Worksheets(1).Activate
MsgBox "Dieses Profil ist derzeit ausgewählt: " & Anzeigeauswahl, vbOKOnly, "Profilauswahl"
'----------------------------------------------------
Select Case Ofenprofilsetzen
   
'Lade Ofenprofil 3 Tabelle 4 12-58
    Case Anzeigeauswahl = Worksheets(3).Name    'Abfrage ob das gewählte Profil einer Seite entspricht
            Worksheets(3).Activate                            'Ursprungsseite öffnen und wählen
            ActiveSheet.Range("A1:T920").Copy          'Kopieren der Matrix
            Worksheets(2).Activate                             'Wählt Blatt fürs Ziel
            Worksheets(2).Range("A1").Select             'Auswahl der Zielzelle
            ActiveSheet.Paste                                    'Einfügen der Rohdaten auf Analyseseite
           Application.CutCopyMode = False               'löscht Zwischenablage und Markierung
          'Worksheets(1).Activate


dann wiederhole ich diese Angabe bis 20 mit geändertem Index. Der Grund, dass ich den Index und nicht den expliziten Namen oder Codenamen des Sheets nehme ist, dass ich automatisch eingefügte Rohdatenblätter mit eignenen Namen (Zeitdatum) benutzen können möchte. Den späteren Teil muss ich noch beenden.

'Fehlerabfang
    Case Else
        MsgBox "Ofenprofil nicht erfasst. Entweder mehr als 20 Profile; erweitern mit Copy-Paste und Index anpassen.", vbOKOnly, "Fehler bei Profilerfassung"
       
End Select
'----------------------------------------------
'Übergabe der Paramter
(hier hab ich was gelöscht was in diesem Zusammenhang nicht relevant ist)




Wie bereits erwähnt, was beim testen tatsächlich passiert ist, dass egal welche Seite in meiner Combobox (Kombinationsfeld, siehe oben) ausgewählt wird, immer Seite 3 in Seite 2 reinkopiert wird. Möglicherweise liegt der Fehler in der Art und Weise, wie ich bei CASE die Bedingung abgleiche; oder aber in der Art und Weise, wie kopiert wird mit Auswählen. Das Kopieren selbst findet statt.

Vielen vielen Dank für Anregungen!
'Lade Ofenprofil 3 Tabelle 4 12-58
    Case Anzeigeauswahl = Worksheets(3).Name    'Abfrage ob das gewählte Profil einer Seite entspricht
        Worksheets(3).Activate:                        'Ursprungsseite öffnen und wählen
        Worksheets(3).Range("A1:T920").Copy: 'Kopieren der Matrix
        Worksheets(2).Activate:                       'Wählt Blatt fürs Ziel
        Worksheets(2).Range("A1").Select:        'Auswahl der Zielzelle
        Worksheets(2).Paste:                           'Einfügen der Rohdaten auf Analyseseite
        Application.CutCopyMode = False          'löscht Zwischenablage und Markierung
        Worksheets(1).Activate

ich hab die relativen Bezüge (active sheet) mal konsequent mit absoluten (sheet indexnr) ersetzt; und zwischen den Anweisungen (:) hinzugefügt.
Trotzdem wird immer nur blatt 3 in blatt 2 importiert, egal welche Werte ich einstelle....
Lösung:
Ich habe eine x-If Bedingung vorangestellt und die Syntax bei Case condition repariert:

If Anzeigeauswahl = Worksheets(3).Name Then

x = 3

...

Select Case x

   
'Lade Ofenprofil 3 Tabelle 4 12-58
    Case Is = 3
    'Anzeigeauswahl = Worksheets(3).Name    'Abfrage ob das gewählte Profil einer Seite entspricht
        Worksheets(3).Activate:                  'Ursprungsseite öffnen und wählen
        Worksheets(3).Range("A1:T920").Copy:     'Kopieren der Matrix
        Worksheets(2).Activate:                  'Wählt Blatt fürs Ziel
        Worksheets(2).Range("A1").Select:        'Auswahl der Zielzelle
        Worksheets(2).Paste:                     'Einfügen der Rohdaten auf Analyseseite
        Application.CutCopyMode = False         'löscht Zwischenablage und Markierung
        Worksheets(1).Activate