Zum Inhalt springen

Makro in Excel: Datei öffnen und Daten in andere Datei kopieren


Empfohlene Beiträge

Geschrieben

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. :D

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...