Makro_Verzweifler Geschrieben 29. November 2010 Geschrieben 29. November 2010 Hallo Genies Ich bin langsam am verzweifeln. Ich muss in der Arbeit ein Makro programmieren und ich komm einfach nicht darauf was ich falsch mache. Zum Sachverhalt: Es wurde eine Excel Datei erstellt, die an alle Tochterunternehmen geschickt wurde. In diesem File sind ungefähr 10 Segmentsheets enthalten, die jeweils "3.x Seghment Sheet" heissen, wobei das x für die Zahlen von 1 bis 10 steht. Daneben hat jedes Segment Sheet noch mal 10 Produktsheets, die jeweils "3.x.y Produkt Sheets" heissen, wobei das x wieder für die 10 Segmente steht und das y für die Produktgruppen von 1 bis 10. Darüber hinaus gibt es noch ein Startmenu, in dem der Button für das Makro enthalten ist und ein Blatt, das "Data confidentially" heisst. Diese Excel Datei enthält schon ein Makro, dass beim Ausführen das Excel Sheet nach den Bedürfnissen des jeweiligen Tochterunternehmens anpasst. Es macht folgendes: - Lösche alle nicht gebrauchten Tabellenblätter, bis auf Startmenu und Data confidentially - bennene die übrig gebliebenen Tabellenblätter um (je nach den Bedürfnissen des Unternehmens) (bis auf Starmenu und Data confidentially) Ein Beispiel: Unternehmen X hat z.B. 3 Segmente und es gehören jeweils 3 Produktgruppen zu diesen Segmenten, dh. es bleiben für dieses Unternehmen noch genau 3x3 Produktgruppensheets und 3 Segmentsheets, das Startmenu und Data confidentially = 14 Sheets übirg Unternehemn Y hat z.B. 4 Segmenten wobei 2 davon jeweils 2 Produktgruppen haben und die anderen beiden jeweils 5. -> 2x2 + 2 + 2x5 + 2 + Starmenu + Data confidentially = 20 Sheets Die jeweiligen Sheets wurden nach den Produkten und den Segmenten die dieses Unternehmen besitzt umbenannt -> jedes File eines Unternehmens besitzt also unterschiedlich viele unterschiedlich benannte Sheets. Z.B. Unternehmen X 3.1 Smta früher 3.1 Segment 3.1.1 Prod1 früher 3.1.1 Produkt 3.1.2 Prod2 früher 3.1.2 Produkt ... früher .... 3.2 Tsg b früher 3.2 Segment 3.2.1 Prrxt früher 3.2.1 Produkt 3.2.2 gzu früher 3.2.2 Produkt .... ...... Z.B. Unternehmen Y 3.1 Stmc früher 3.1 Segment 3.1.1 Pdr8 früher 3.1.1 Produkt 3.1.2 Xpt9 früher 3.1.2 Produkt ... früher .... 3.2 Mhtd früher 3.2 Segment 3.2.1 Zkl früher 3.2.1 Produkt 3.2.2 Jlöd früher 3.2.2 Produkt ... ...... Ist das so einigermaßen klar? Eigentlich ist das auch nicht so ganz wichtig, denn dieses Makro funktioniert. Was wichtig ist, ist dass ich ungefähr 10 Files habe mit unterschiedlicher Anzahl an Sheets und unterschiedlich benannten Sheets. (bis auf Startmenu und Data confidentially) Gut, jetzt wurde in der Ausgangsdatei 10 Sheets vergessen, die jeweils Formeln beinhalten, die sich auf die jeweiligen Segment und Produktgruppen Sheets beziehen. Nennen wir sie mal "3.x Zukunft" wobei wieder das x für die jeweiligen Segmente 1-10 steht. Ich habe auch schon das oben genannte Makro in der Ausgangsdatei geändert, sodass nicht gebrauchte "3.x Zukunft" sheets gelöscht werden. Z.B. wenn ein Unternehmen nur 3 Segment hat, so hat es auch nur 3 "3.x Zukunft" Sheets in seiner Datei. Mein Problem ist jetzt, dass die Unternehmen Dateien zurückschicken, in denen die "3.x Zukunft" Sheets nicht enthalten sind und ich nicht jedes Mal diese Sheets in die Unternehmensdateien reinkopieren möchte. Deswegen wollte ich unter dem schon vorhandenen Makro in der Ausgangsdatei ein Makro anfügen, dass zuerst das oben beschriebene Makro ausführt, ich also eine Datei habe, die auf das jeweilige Unternehmen zugeschnitten ist, also auch die korrekte Anzahl an Sheets beinhaltet, die auch gleichzeitig umbenannt wurden. Jedoch sind jetzt in dieser Datei noch die jeweils benötigten "3.x Zukunft" Sheets enthalten. Z.B. Unternehmen X (siehe oben) Startmenu, Data Confidentially, 3 Segmentsheets á 3 Produktgruppen und 3 "3.x Zukunft" Sheets = 17 Sheets Unternehmen Y 2x2 + 2 + 5x2 + 2 + 4 "3.x Zukunft" Sheets + Startmenu + Data confidentially = 24 Sheets Was das neue Makro machen soll: Nachdem die Sheets gelöscht und unbenannt wurden, soll die Datei, die von den Unternehmen geschickt wurde - geöffnet, - alle Sheets (bis auf Startmenu und Data confidentially) die darin enthalten sind aktiviert - alle Zellen makiert, - alle Zellen kopiert - die Datei geschlossen werden. Danach soll das Makro wieder zurück in die Ausgangsdatei gehen, - alle Sheets bis auf Startmenu und Data confidentially und die ÜBRIG gebliebenen "3.x Zukunft" Sheets aktivieren - alle Zellen makieren - und das kopierte einfügen. Ich habe auch schon folgendes Makro mit Beiträgen aus verschiedenen Foren erstellt, und es funktioniert auch soweit, dass ich eine Datei öffnen kann, und alle darin enthaltenen Tabellenblätter makiert werden, dh es werden in jedem Tabellenblatt die Zellen makiert. Was nicht funktioniert, ist das das Makro jedes einzelne Blatt kopiert und dieses dann in der Ausgangsdatei einfügt. Bevor ihr euch das Makro durchlest, bedenkt bitte, dass ich ein absoluter Anfänger bin, was VBA betrifft und oben genannte Makro auch von jemand anderem erstellt wurde. Dh, dass meine Schleife wahrscheinlich kompletter Mist ist und ihr euch kaputt lachen werdet. Wie gesagt, ich kann schon eine andere Datei öffnen und in dieser Datei werden auch alle Zellen in allen benötigten (dh alle bis auf Startmenu und Dataconfidentially) Blättern makiert. Jedoch werden nur die Zellen im letzten Blatt kopiert, aber nicht in der Ausgangsdatei eingefügt. Wäre echt nett, wenn mir einer von euch sagen könnte, wo mein Fehler liegt. Private Sub CommandButton1_Click() Dim shtTemp as Worksheet Dim i As Boolean Dim Ziel As Excel.Workbook LetztesBlatt = ActiveWorkbook.Worksheets.Count Set Ziel = ThisWorkbook ' diese Datei (in der das Makro steht) wird der Variablen "Ziel" zugewiesen i = Application.Dialogs(xlDialogOpen).Show If i = True Then For Each shtTemp In ActiveWorkbook.Worksheets Do Set Source = ActiveWorkbook 'die Quelldatei hat den Focus und wird der Variablen "Source" zugewiesen If shtTemp.Visible = -1 And shtTemp.Name <> "Startmenu" And shtTemp.Name <> "Data confidentiality" Then shtTemp.Activate shtTemp.Cells.Select shtTemp.Cells.Copy End If Set Ziel = ActiveWorkbook If shtTemp.Visible = -1 And shtTemp.Name <> "Startmenu" And shtTemp.Name <> "Data confidentiality" And shtTemp.Name <> "3.1 Zukunft" And shtTemp.Name <> "3.2 Zukunft" And shtTemp.Name <> "3.3 Zukunft" And shtTemp.Name <> "3.4 Zukunft" And shtTemp.Name <> "3.5 Zukunft" And shtTemp.Name <> "3.6 Zukunft And shtTemp.Name <> "3.7 Zukunft" And shtTemp.Name <> "3.8 Zukunft" And shtTemp.Name <> "3.9 Zukunft" And shtTemp.Name <> "3.10 Zukunft" Then shtTemp.Activate shtTemp.Cells.Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End If Loop Until ActiveWorkbook.Worksheets.Count Next End If End Sub Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.