Als Controller kennst du diese Aufgabe bestimmt. In einem monatlichen Managementbericht, den du in MS Word erstellst, ist u.a. die Liquiditätsentwicklung des Unternehmens darzustellen.
Sinnvollerweise führst du die Liquiditätsentwicklung in MS Excel. Die Aufgabe besteht nun darin, die Excel-Tabelle in den Word-Bericht einzuarbeiten und beides zu verknüpfen.
Das sich mit der bedingten Formatierung eine Menge Effekte in einer Excel-Arbeitsmappe erreichen lassen, hast du schon in mehreren Beiträgen sehen können.
Eine weitere Möglichkeit ist Gegenstand dieses Beitrages. Du kannst damit Zellinhalte formatieren, die bestimmte Eigenschaften haben oder bestimmte Werte beinhalten: Nur Zellen formatieren, die enthalten
Befindest du dich in einer geöffneten Arbeitsmappe, kannst du das sofort sehen, wenn sich die Anzahl auf ein überschaubares Maß beschränkt.
Geht es aber um 95 oder 134 Arbeitsblätter, müsstest du zählen.
Das aber kannst du auch durch ein kleines Makro erledigen lassen.
Sub ArbBlattZählen1() Dim intZahl As Integer intZahl=ActiveWorkbook.Sheets.Count MsgBox intZahl End Sub
So sieht die Antwort aus. Bestätige sie mit „OK“.
Lässt sich die Anzahl der Arbeitsblätter für eine andere, geöffnete, Mappe ermitteln?
Sub ArbBlattZählen2() Dim intZahl As Integer Workbooks(„VBA_Datei öffnen.xlsm“).Activate intZahl=ActiveWorkbook.Sheets.Count MsgBox intZahl End Sub
Hier gibt die MsgBox z.B. die Anzahl „3“ zurück.
Nun fragst du dich, ob du diese Abfrage auch an eine geschlossene Datei richten kannst.
Nachfolgendes Makro verwendet die GetObject-Funktion, die ich hier nicht weiter erläutere. Nur soviel, GetObject wird für den Zugriff auf ein ActiveX-Object verwendet. Mit der Set-Anweisung wird dem Objekt die Objektvariable zugewiesen.
Sub ArbBlattZählen3() Dim intZahl As Integer Dim wb As Workbook Set wb=GetObject(„C:\Excel\VBA\VBA_Arbeitsblätter Anzahl.xlsm“) intZahl=wb.Sheets.Count MsgBox intZahl End Sub
Die MsgBox gibt hier die Anzahl „5“ zurück.
Anzahl Arbeitsblätter festlegen
Eine neue Excel-Arbeitsmappe enthält standardmäßig drei Arbeitsblätter. Dies ist in den Excel-Optionen unter „Allgemein“ so eingestellt.
Wenn du aber eine neue Mappe haben willst, die 12 Arbeitsblätter enthält, kannst du das mit einem Makro erledigen lassen.
Du fragst dazu zuerst die hinterlegte Anzahl der Arbeitsblätter für neue Arbeitsmappen ab.
Dim intBlatt As Integer intBlatt=Application.SheetsInNewWorkbook
Dann legst du die Anzahl der Blätter für deine neue Mappe fest, in diesem Fall sollen es 12 sein.
Application.SheetsInNewWorkbook=12
Jetzt legst du eine neue Mappe an und gibst ihr einen Namen. Wie das geht, habe ich in meinem Beitrag „VBA-Methoden: Eine Datei neu erstellen und speichern als“ beschrieben:
Sub ArbBlätter() Dim intBlatt As Integer intBlatt=Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook=12 Workbooks.Add ActiveWorkbook.SaveAs Filename:=“C:\Excel\VBA\VBA_NeuDatei.xlsx“ Application.SheetsInNewWorkbook=intBlatt ActiveWorkbook.Save ActiveWorkbook.Close End Sub
Natürlich kannst du den 12 Arbeitsblättern in deiner neuen Mappe gleich noch neue Namen geben, z.B.“Januar“ bis „Dezember“.
Füge dazu im einfachsten Weg diese Codezeilen in dein Makro vor den Anweisungen .Save und .Close ein:
Angeregt durch die Anfrage eines Lesers, die ich zunächst nicht beantworten konnte, ist dieser Beitrag entstanden.
In der Anfrage ging es darum, Flugzeiten zu addieren, wenn zwei Bedingungen in einer anderen Spalte eingehalten werden. Das Problem war, dass die Spalte mit den Flugzeiten auch nichtnumerische Werte enthalten sollten, z.B. in Klammern gesetzt oder mit Buchstaben versehen.
(4:00)
4:00 xz
Der Leser wollte das Problem mit der Funktion SUMMENPRODUKT lösen, hatte aber keinen Erfolg damit.