Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Alle Blätter gruppieren und danach Gruppierung aufheben
#1
Hallo,

wie kann ich per VBA alle Blätter eins WB's gruppieren, dann verschiedene Subs laufen lassen, und dann die Gruppierung wieder aufheben?

Salve
Alooha
Antworten Top
#2
Hallo,

da solltest du aber etwas ausführlicher beschreiben, was du machen willst.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hallo Alooha,

(05.01.2018, 18:51)Alooha schrieb: wie kann ich per VBA alle Blätter eins WB's gruppieren, dann verschiedene Subs laufen lassen, und dann die Gruppierung wieder aufheben?
  Dim oWs As Worksheet
 Set oWs = ActiveSheet
 ThisWorkbook.Worksheets.Select
 
 Sub1
 Sub2
 Sub3
 
 oWs.Activate
Gruß Uwe
Antworten Top
#4
Hallo,

vielen Dank für eure Antworten!
Klaus-Dieter, du hast Recht, und weil du Recht hast, habe ich ein Beispiel zusammengestellt. Es handelt sich um Daten Angestellte betreffend.

Die Sheets auswählen ist in Wirklichkeit nur ein kleiner Teil der Aufgabe. Zuerst glaubte ich, dem Rest gewachsen zu sein, aber es ist komplizierter als ich glaubte und es übersteigt meine VBA Kapazitäten.

Um von vorne zu beginnen: das Ganze ist die Schuld der verflixten Funktion INDIRECT() die ja nun mal nicht arbeiten will wenn das File auf das die Formeln sich beziehen nicht geöffnet ist.

Ich habe 2 Files präpariert, die sich eng an die echten Files anlehnen. Da das ganze Projekt (dies soll lediglich eine Ergänzung sein) in frz. Sprache ist, sind meine Beispielfiles es auch, aber das dürfte kein Problem sein.
Meine Files:

* Base : enthält Personnel und SERVICE 1 bis 4 (in Wirklichkeit 10)
Da es in Personnel von D3:AI489 tonnenweise Formeln gibt die allerhand Berechnungen machen, hole ich mir die Daten aus den SERVICES in Personnel, sodass ich nicht 10 mal diese vielen Formeln brauche. Ich hole sie mir, indem ich in Personnel : A1 den Namen des SERVICE schreibe, im Beispiel SERVICE 3.

* SERVICE 3 2017
Jeder Service hat sein File mit einem Blatt pro Angestelltem und ein Modellfile "Modèle" (dient dazu, ein neues, identisches Blatt zu produzieren).

Wegen der INDIRECT Funktion habe ich die Daten nicht zur Verfügung a) wenn "Base" nicht geöffnet ist und b) wenn bei geöffnetem "Base" in "Personnel" A1 nicht "SERVICE 3" steht.

Daher habe ich geplant per VBA (in "Base") folgendes zu tun:

1. aus "Base" heraus "SERVICE 3" öffnen

2. dann habe ich 2 Alternativen entdeckt:


I) Alternative I

1. alle Blätter ausser "Modèle" auswählen und "kollektiv" (bin aber nicht sicher ob das möglich ist; mir scheint dass, wenn ich die Makro abarbeite, ein Blatt nach dem anderen drankommt) in jede Zelle von B6:H8 die betreffende Formel schreiben, Zelle pro Zelle

2. in "Base" wechseln und in A1 des Blattes "Personnel" "SERVICE 3" schreiben
womit die Formeln in SERVICE 3 ihre Werte produzieren

3. Zurück in SERVICE 3 wechseln, wo noch alle Blätter ausser "Modèle" ausgewählt sind
B6:H8 kopieren und als Werte in das gleiche Areal zurückpasten

4. die Auswahl aufheben (z.B. durch Auswählen von "Modèle") und SERVICE 3 abspeichern.
Wenn ich es dann wieder öffne (jeden Monat kommen Daten dazu; die habe ich in meinem Beispiel weggelassen weil sie irrelevant sind) dann habe ich Werte anstatt der #N/A.


II) Alternative II (schneller, aber "Modèle" darf auf keinen Fall mit den anderen Blättern ausgewählt werden, damit die Formeln dieses Blattes erhalten bleiben)

1. "Modèle" auswählen

2. die Formeln die sich in B6:H8 befinden kopieren

3. alle anderen Blätter auswählen

4. die kopierten Formeln nach B6:H8 aller Blätter pasten

5. die Auswahl aufheben (z.B. durch Auswählen von "Modèle") und SERVICE 3 abspeichern.


Ich hoffe, mich verständlich ausgedrückt zu haben.

Einen schönen Abend wünsche ich euch.
Alooha


Angehängte Dateien
.xlsm   Base.xlsm (Größe: 72,7 KB / Downloads: 1)
.xlsx   SERVICE 3 2017.xlsx (Größe: 13,32 KB / Downloads: 1)
Antworten Top
#5
...was übrigens sehr strange ist: im VBA meines Originalfile's habe ich eine Funktions-Sub mit Namen Sub Ostern(), die das Datum von Ostern berechnet und wenn ich meinen Code step by step (F8) ausführe, dann lande ich immer in dieser Sub, gleich nach dem Oeffnen von SERVICE3. Die wird dann durchlaufen und dann geht es weiter. Wie ist sowas möglich. Im Code steht kein Wort von Ostern!

Mir ist eben aufgefallen, dass die Endung von "Base" falsch ist im Code:sie ist "xlsm" und nicht "xlsx". Sorry
Antworten Top
#6
Hallo,

ich habe mir eine funktionierende Lösung zusammengebastelt aus Code aus dem Internet und aufgezeichnetem:


Code:
Sub Remplacer_formules()
'die Formeln ersetzen
   Dim wSht As Worksheet
   Sheets("Personnel").Select
   Range("A1").Select
   Application.CutCopyMode = False
   ActiveCell.FormulaR1C1 = "SERVICE 3"
   Workbooks.Open Filename:= _
       "C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 3\SERVICE 3 2017.xlsx"
   Sheets("Modèle").Visible = True
   Sheets("Modèle").Select
   Range("B6:H8").Select
   Selection.Copy
For Each wSht In Worksheets
   If wSht.Name <> "Modèle" Then
   wSht.Select
   Range("B6:H8").Select
   Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False
   End If
Next wSht
For Each wSht In Worksheets
   If wSht.Name <> "Modèle" Then
   wSht.Select
   Range("B6:H8").Select
   Selection.Copy
   Range("B6:H8").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
   End If
Next wSht
   Sheets("Modèle").Visible = False
   ActiveWorkbook.Save
   ActiveWindow.Close
End Sub

Was haltet ihr davon? Er ist übrigens ultraschnell, was ja kein Nachteil ist!

Wo ich jetzt eine Hilfe bräuchte, das wäre beim nächsten Schritt: Excel dazu bringen,
alle 10 Dateien eine nach der anderen zu öffnen, die Formeln zu pasten, sie durch ihre
Werte zu ersetzen, die Datei abzuspeichern und die nächste zu öffnen. Das übersteigt klar meine VBA-Kapazitäten!

Dazu müsstet ihr natürlich den Pfad der Dateien kennen:

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 1\SERVICE 1 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 2\SERVICE 2 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 3\SERVICE 3 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 4\SERVICE 4 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 5\SERVICE 5 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 6\SERVICE 6 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 7\SERVICE 7 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 8\SERVICE 8 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 9\SERVICE 9 2017.xlsx"

"C:\Users\...\Desktop\Exemple 5.1.18\SERVICE 10\SERVICE 10 2017.xlsx"



Gute Nacht
Alooha
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste