XLS Sheet mit komplett gestalteten Inhalt erzeugen

Hallo,

normalerweise ist es so, dass man, wenn man einen Sheet erzeugt, diese leer ist. Aber ist es möglich ein Sheet mit kompletten Inhalt zu erzeugen?

Also ein neues Sheet erzeugen, welches bereits farbige Felder mit formatierten Zellen etc. enthält.

Vielen Dank im Voraus für die Antworten.
LG

Bsp.:
Hiermit erzeuge ich neue Sheets.

Private Sub CommandButton1_Click()
Dim i As Integer

For i = 1 To 12

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = „Monat“ & i

Next i

End Sub

Jedoch sind sie alle leer. Jetzt möchte ich aber, dass darin schon was steht.
Z.B. Monat 1: Zelle A1=Monat (in gelb)
Zelle A2 (formatiert in Währung)
etc.

ist das möglich??


Und in Monat 2:
Zelle A1= Februar (Schrift in roter Farbe, Zelle in gelber Farbe)
ZElle A2 (formatiert in Datum)
usw.

neues Blatt vorformatieren
Hallo asdf,

na siehste, geht doch, *lächel*

normalerweise ist es so, dass man, wenn man einen Sheet
erzeugt, diese leer ist. Aber ist es möglich ein Sheet mit
kompletten Inhalt zu erzeugen?

Gegenfrage wie erzeugst du das Blatt?

Spontan fallen mir zwei Wege ein.
Du erstellst ein Blatt mit den Formatierungen die du willst.
Bei Bedarf kopierst du dieses Blatt quasi als Vorlage, benennst es um und fertig.

Oder du erzeugst das neue Blatt mit mit Vba-Code, im Code kannst du dann festlegen welche Formatierungen oder sonstwas im neuen Blatt stehen sollen.

Gruß
Reinhard

hi,

so erzeuge ich das neue Sheet:

Private Sub CommandButton1_Click()
Dim i As Integer

For i = 1 To 12

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = „Motoren“ & i

Next i

End Sub

jetzt möchte ich, dass in diesem neu erzeugten Blatt bestimmte Felder bestimmte Farbe und bestimmte Formatierungen haben, die Felder bestimmte Texte tragen und bestimmte Zellen bestimmte Formeln enthalten. Möglich?

LG

Hallo Hans-Bärbel :smile:

wie nun, in Blatt1 A2 als Datum, in Blatt2 A2 als Währung?

Gibt es da eine Regel?

Gruß
Reinhard

hi,

es sollte nur ein Beispiel sein, um zu zeigen, dass die neu erzeugten Sheets in ihrer Formatierung nicht identisch sein müssen, sondern individuell gestlatet werden können.

LG

es sollte nur ein Beispiel sein, um zu zeigen, dass die neu
erzeugten Sheets in ihrer Formatierung nicht identisch sein
müssen, sondern individuell gestlatet werden können.

Hallo asdf,

okay, mit dem „individuell“ muß man noch schauen.

Probiers mal so, ungetestet:

Private Sub CommandButton1\_Click()
Dim i As Integer
For i = 1 To 12
 Sheets.Add After:=Sheets(Sheets.Count)
 ActiveSheet.Name = "Motoren" & i
 With ActiveSheet.Range("A1")
 .Font.ColorIndex = 3
 .Interior.ColorIndex = 6
 .Interior.Pattern = xlSolid
 End With
 ActiveSheet.Range("A2").NumberFormat = "dd.MMMM.yyyy"
Next i
End Sub

Gruß
Reinhard

Hi,

ja, hat funktioniert. Ich denke, dass mit den individuell muss ich wohl dadurch lösen, indem ich jede einzele Sheets nicht in einen Batch, sondern einzeln erzeugen muss.

Danke!!! :smiley: Liebe Grüße

hi,

… vllt. gehts auch einfacher, indem ich nicht eine neues Sheet vorformatiert erzeuge, sondern ein besethendes nur kopiere??

ja, hat funktioniert. Ich denke, dass mit den individuell muss
ich wohl dadurch lösen, indem ich jede einzele Sheets nicht in
einen Batch, sondern einzeln erzeugen muss.

Hallo asdf,

wieso das. natürlich kannste das alles in einer Batch äh einer For-Schleife machen.

In der For-Schleife bauste eine Select case Abfrage ein, so z.B.:

For i 1 To 12
 Select Case i
 Case 2,5,7
 'formatiere so
 Case 1,3,6
 'formatiere anders
 Case Else
 'formatiere nochmals anders
 End Select
Next i

Deine andere Idee geht auch. Du könntest in einer Drittmape 12 Blätter anlegen und die nach Wunsch formatieren.

Das Makro öffnet dann die Drittmappe (oder ists die Zweitmappe? egal *gg*) und in der For-Schleife werden dann die 12 Blättervorlagen übernommen.

Gruß
Reinhard

Hi,

nehmen wir mal an, ich würde mehrerer solcher Batches erzeugen:

Das heißt also
für Jahr 1: diese 12 Sheets erzeugen
für Jahr 2: weitere 12 Sheets erzeugen
für Jahr 3: wieder weiter 12 Sheets erzugen

für Jahr n: wieder weiter 12 Monate erzeugen

Und dann am Ende eine Zusammenfassung (ein Ergebnis-Sheet), das mir alle Monate 1 der Jahre von 1 bis n zusammenfasst. Beispielsweise alle Werte iin der Zelle C3 des Sheets „Monat 1“ des Jahres 1 bis n zusammenaddieren.

Wie man sieht ist das n vorher nicht definiert. D.h. das Ergebnissheet we9ß im Vornherein nicht wieviele Zellen in den Sheets es zusammenaddieren soll. Geht das?

Hui, ich hoffe ich habe mich nicht zu kompliziert ausgedrückt.^^
LG. Und ja, danke für den Tipp. Schein ne gute Idee zu sein.

Hallo qwert :smile:,

Das heißt also
für Jahr 1: diese 12 Sheets erzeugen
für Jahr 2: weitere 12 Sheets erzeugen
für Jahr 3: wieder weiter 12 Sheets erzugen

für Jahr n: wieder weiter 12 Monate erzeugen

kein Akt.

Und dann am Ende eine Zusammenfassung (ein Ergebnis-Sheet),
das mir alle Monate 1 der Jahre von 1 bis n zusammenfasst.
Beispielsweise alle Werte iin der Zelle C3 des Sheets „Monat
1“ des Jahres 1 bis n zusammenaddieren.

? Wer befüllt die Blätter mit Werten?

Ansonsten ist das auch kein Problem mit Vba. Hilfreich dafür wäre, die Mappen hätten eindeutige Namen aus denen man den Monat auslesen kann.
Oder das Jahr, wenn da 12 Monate als Blätter sind.

Wie man sieht ist das n vorher nicht definiert. D.h. das
Ergebnissheet we9ß im Vornherein nicht wieviele Zellen in den
Sheets es zusammenaddieren soll. Geht das?

Ja, Vba kann im entsprechenden Ordner nachschauen wieviele es „davon“ gibt und da jeweils C3 auslesen.
Einzelne Zellen kann man auch auslesen ohne offiziell die Datei zu öffnen.
Ansonsten öffnet eine Prozedur nacheinander alle Mappen, liest sie aus und schließt sie wieder usw.

Irschendwie weiß ich immer noch nicht was du da vorhast, warum Monate unterschiedlch formatieren? Und weitere Unklarheiten.

Gruß
Reinhard

hi,

es geht nur darum, ob ich das machen kann. Die Monate oder Jahre sind unwichtig. Ich wollte die objektorientierte Arbeitsweise auf Excel übertragen.

Aber wie greift man denn mit VBA auf die Sheets zu? Und wie ermittelt man die Anzahl der Sheets und den Namen?

Lg

es geht nur darum, ob ich das machen kann. Die Monate oder
Jahre sind unwichtig. Ich wollte die objektorientierte
Arbeitsweise auf Excel übertragen.

Aber wie greift man denn mit VBA auf die Sheets zu? Und wie
ermittelt man die Anzahl der Sheets und den Namen?

Hallo asdf,

auf die Schnelle fand ich in meiner Schatztruhe nur diesen professionellen Auflistcode. Teste ihn mal in einer neuen leeren Mappe.
Er macht noch nicht das was du willst, erlistet nur Mappennamen auf. Und ja, er hat noch viele Features, die du scheinbar nicht brauchst, egal die kann man immer noch rauswerfen.

Wie du nach einem test siehst hat man dann alle ;Mappennamen. Nun ist es für mich einleichtes, an der richtigen Stelle im Code einzubauen, daß er auch die jeweilige Mappe öffnet, die Blattnamen oder/und Anzahl ausliest, die mappe schleßt und das Ergebnis irgendwo in Zellen schreibt.

Zum Code, was du machen mußt, du mußt diese Zeile in DateiAuflisten anpassen:
For Each Datei In GetFiles(„C:\test“, False, „*.xls“)

Das erste Argument ist der Ordnername, das zweite ist True oder False, jenachdem ob auch Unterordner des Ordners durchsucht werden sollen. Das dritte Argument gibt die Dateiendung an nach der gesucht wird.

Um den Code zu benutzen.
Alt+F11, Einfügen—Modul, Code reinkopieren, dann unter Extras—Verweise den Verweis anhaken (Microsoft Scripting Runtime), Editor schließen.

Makro Dateilisten ausfhren mit Alt+F8…

Gruß
Reinhard

Option Explicit
' Achtung!
' --\> Microsoft Scripting Runtime - Verweis notwendig!
Sub Dateilisten()
Dim Datei As File, Zei As Long
For Each Datei In GetFiles("C:\test", False, "\*.xls")
 Zei = Zei + 1
 Cells(Zei, 1) = Datei.Name
Next
End Sub
'
Public Function GetFiles(FolderPath As String, scanSubDirectorys As Boolean, Optional \_
SearchPattern As String, Optional SortBy As String) As Collection
 ' Die MSR - Objekte
 Dim objFs As New FileSystemObject
 Dim objRootFolder As Folder
 Dim objSubFolder As Folder
 Dim objFile As File
 ' Zwischenspeicher für den Rückgabewert der Funktion
 Dim HColl As New Collection
 Set HColl = Nothing
 ' Wenn kein Suchmuster angegeben alle Dateien zurückliefern
 If SearchPattern = "" Then SearchPattern = "\*"
 ' Das Ordner-Objekt für den angegebenen Pfad laden
 On Error GoTo err01
 Set objRootFolder = objFs.GetFolder(FolderPath)
err01:
 If Err.Number 0 Then
 Set GetFiles = HColl
 Exit Function
 End If
 ' Alle Dateien in diesem Ordner durchlaufen
 For Each objFile In objRootFolder.Files
 ' Wenn das Suchmuster übereinstimmt Datei der Collection hinzufügen
 If objFile.Name Like SearchPattern Then
 HColl.Add objFile
 End If
 Next
 ' Wenn angegeben, die Unterordner des Startpfades durchlaufen
 If scanSubDirectorys Then
 For Each objSubFolder In objRootFolder.SubFolders
 ' Alle per Rekursion zurückgelieferten Dateien der Hilfscollection hinzufügen
 For Each objFile In GetFiles(objSubFolder.Path, scanSubDirectorys, SearchPattern)
 HColl.Add objFile
 Next
 Next
 End If
 ' Wenn angegeben, die Hilfs-Collection sortieren
 If SortBy "" Then
 Set HColl = SortItemCollection(HColl, SortBy)
 End If
 ' Rückgabewert
 Set GetFiles = HColl
End Function
'
Public Function SortItemCollection(col As Collection, strPropertyName) As Collection
 Dim colNew As Collection
 Dim objCurrent As Object
 Dim objCompare As Object
 Dim lngCompareIndex As Long
 Dim variantCurrent As Variant
 Dim variantCompare As Variant
 Dim blnGreaterValueFound As Boolean
 'make a copy of the collection, ripping through it one item
 'at a time, adding to new collection in right order...
 Set colNew = New Collection
 For Each objCurrent In col
 'get value of current item...
 variantCurrent = CallByName(objCurrent, strPropertyName, VbGet)
 'setup for compare loop
 blnGreaterValueFound = False
 lngCompareIndex = 0
 For Each objCompare In colNew
 lngCompareIndex = lngCompareIndex + 1
 variantCompare = CallByName(objCompare, strPropertyName, VbGet)
 'die Vergleichstypen auf Variant geändert, somit können beliebige Datentypen \_
miteinander verglichen werden
 If variantCurrent