VBA-Methoden: Eine Datei schließen

Wenn eine Datei geöffnet und bearbeitet wurde, soll sie irgendwann auch wíeder geschlossen werden. Das wiederum kann manuell oder mit einem Makro erledigt werden.

Das manuelle Schließen war schon im Beitrag „VBA-Methoden: Eine Datei speichern“ ein Thema. Dabei wurde vor dem Schließen eine Speicherung mit einem Makro vorgenommen.

Wenn du eine Datei mit einem Makro schließen willst, gibt es auch hierbei verschiedene Möglichkeiten.

Einfaches Schließen einer Datei

Für das Schließen der aktiven Datei wird die Methode Close genutzt. Das geht so:

Sub SchließenDatei1()
ActiveWorkbook.Close
End Sub

Wenn du vorher nicht gespeichert hast, bekommst du diese Mitteilung:

Datei_schließen1

Erst wenn du dann „Speichern“ klickst, wird die Datei geschlossen. Das kannst du umgehen, wenn du den Speichern-Befehl in deinen Code mit einbaust. Zwei Möglichkeiten hast du hierfür:

Sub SchließenDatei2()
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

oder so:

Sub SchließenDatei3()
ActiveWorkbook.Close SaveChanges:=True
End Sub

Nach dem Close-Befehl wird zusätzlich die Anweisung gegeben, dass die Speicherung von Veränderungen vorgenommen wird.

Schließen einer zusätzlich geöffneten Datei

Wie im Beitrag „VBA_Methoden: Eine Datei öffnen“ erläutert, hast du z.B. eine weitere Datei manuell oder mit einem Makro geöffnet. Du hast deine Bearbeitungen vorgenommen und willst die Datei nun über dein Makro wieder schließen. Eine Speicherung siehst du ebenfalls vor.

Sub SchließenDatei4()
Workbooks(„VBA_Datenblatt.xlsx“).Save
Workbooks(„VBA_Datenblatt.xlsx“).Close
End Sub

oder so:

Sub SchließenDatei5()
Workbooks(„VBA_Datenblatt.xlsx“).Close SaveChanges:=True
End Sub

Öffnen, Bearbeiten, Speichern und Schießen einer zusätzlichen Datei

Jetzt willst du die Vorgänge vom Öffnen bis zum Schließen einer zusätzlichen Datei mit einem Makro ausführen lassen.

Im Arbeitsblatt „Tabelle1“ der Zusatzdatei soll in Zelle B10 der Text „Bearbeitung ist erfolgt“ eingetragen werden. Die Bearbeitung wird mit einer MsgBox bestätigt.

Sub SchließenDatei6()
Workbooks.Open Filename:=“C:\Excel\VBA_Datenblatt.xlsx“
Worksheets(„Tabelle1“).Range(„B10″)=“Bearbeitung ist erfolgt“
MsgBox(„Eintrag erfolgt“)
Workbooks(„VBA_Datenblatt.xlsx“).Save
Workbooks(„VBA_Datenblatt.xlsx“).Close
End Sub

Schließen einer Datei nach dem Speichern

Die Zusatzdatei soll sofort geschlossen werden, wenn gespeichert wurde.

Sub SchließenDatei7()
If Workbooks(„VBA_Datenblatt.xlsx“).Saved=True Then
Workbooks(„VBA_Datenblatt.xlsx“).Close
Else
MsgBox(„Datei ist nicht gespeichert“)
End If
End Sub


Wurde nicht gespeichert, kann in diesem Fall auch nicht geschlossen werden. Du erhälst deshalb die Mitteilung „Datei ist nicht gespeichert“ mittels einer MsgBox.

VBA-Methoden: Eine Datei umbenennen

Wenn du eine Datei „speicherst als“, hast du zwei Dateien. Einmal die ursprüngliche und einmal die mit einem neuen Namen und / oder einer anderen Extension.

Manchmal willst du eine Datei einfach nur umbenennen. Auch dazu bietet VBA eine Lösung.

1. Einfach umbenennen

Die umzubenennende Datei ist geschlossen. Deshalb wird jeweils der gesamte Pfad mit angegeben.

Sub Umbenennen1()
Name „C:\Excel\VBA_Datenblatt.xlsx“ As „C:\Excel\VBA_Datenblatt_2.xlsx“
End Sub

Wenn du das Ganze wieder rückgängig machen willst, tauscht du im zweiten Code die Bezeichnungen der Dateien.

Sub Umbenennen2()
Name „C:\Excel\VBA_Datenblatt_2.xlsx“ As „C:\Excel\VBA_Datenblatt.xlsx“
End Sub

2. Umbenennen mit Variablen

Es gibt dann noch die Möglichkeit, für den alten und neuen Namen jeweils eine Variable zu verwenden. Für das erste Beispiel sieht der Code dann so aus:

Sub Umbenennen3()
Dim strAltname As String
Dim strNeuname As String
strAltname=“C:\Excel\VBA_Datenblatt.xlsx“
strNeuname=“C:\Excel\VBA_Datenblatt_2.xlsx“
Name strAltname As strNeuname
End Sub

3. Umbenennen nach Liste

Vielfach gibt es eine ganze Reihe von Dateien in einem Ordner, die umbenannt werden sollen, beispielsweise wenn die Jahreszahl im Namen enthalten ist und ein neues Jahr begonnen hat.

Auf dem Laufwerk sollen z.B. die Dateien

  • VBA-Umsatz_2016.xlsx
  • VBA-Kosten_2016.xlsx
  • VBA-Mengen_2016.xlsx

liegen. Sie sollen jeweils die Jahreszahl 2017 erhalten.

Da es auch sehr viel mehr als diese drei Dateien sein können, kann eine Auflistung im Arbeitsblatt nützlich sein.

Datei_umbenennen1

Der folgende Code wird die Umbenennung der Dateien in Spalte B in die Dateien in Spalte C. vornehmen.

Das Makro wurde sehr ausführlich aufgeschrieben, Schritt für Schritt, so dass auch VBA-Neulinge die Prozedur verstehen sollten.

Sub Umbenennen4()
Dim intZeile As Integer
Dim strPfad As String
Dim strAltname As String
Dim strNeuname As String
Dim strAlt As String
Dim strNeu As String
strPfad=“C:\Excel\“
For intZeile=3 To 5
strAltname=Cells(intZeile,2).Value
strNeuname=Cells(intZeile,3).Value
strAlt=strPfad & strAltname
strNeu=strPfad & strNeuname
Name strAlt As strNeu
Next intZeile
End Sub

Komfortabler wäre es. die Dateien, die umbenannt werden sollen, per VBA aus dem Ordner auszulesen, sie in einer weiteren Spalte umbenennen und dann die Änderungen im Ordner vorzunehmen.

Das Auslesen von Dateien aus Ordnern ist aber eine andere Geschichte, die ich hier nicht behandle.

VBA-Methoden: Eine Datei neu erstellen und speichern als

Es kann innerhalb einer VBA-Prozedur erforderlich werden, eine neue Excel-Arbeitsmappe zu erstellen. Gleichzeitig sollte der neuen Datei dann auch ein Name und ein Ablageort zugewiesen werden.

Weiterlesen „VBA-Methoden: Eine Datei neu erstellen und speichern als“

VBA-Steuerelemente: Die TextBox

Die TextBox kann als Steuerelement sowohl im Arbeitsblatt als auch in einer UserForm verwendet werden.

In diesem Beitrag geht es um die Verwendung im Arbeitsblatt.

Aus Anwendungsprogrammen kennst du sicherlich Fälle, in denen TextBoxen zu finden sind. Z.B. kann es in einem Finanzbuchhaltungsprogramm eine Kontoauskunft geben.

In einer TextBox gibst du die Konto-Nr. ein und in einer zweiten TextBox wird der Konto-Name ausgegeben.

Hierzu hast du dir eine kleine Liste mit ein paar Konten gesucht. [1]

textbox1

In eine der folgenden TextBoxen gibst du manuelle eine Konto-Nr. ein. Mit einem Makro willst du den dazugehörigen Konto-Namen finden und in die zweite TextBox eintragen.

Sub TextBox1()
Dim strKonto As String
Dim rngFund As Range
strKonto=Tabelle1.TextBox3.Value
Set rngFund=Range(„B4:B27“).Find(strKonto,LookIn:=xlValues)
Tabelle1.TextBox4.Text=rngFund.Offset(0,1)
End Sub

 Was geschieht?

TextBox1 enthält die Information „Konto-Nr.“, TextBox 2 enthält „Bezeichnung“.

Den Inhalt von TextBox3 (deine Eingabe) deklarierst du als Variable „strKonto“. Die Fundstelle in obiger Liste deklarierst du als Variable „rngFund“. Der Variablen „strKonto“ weist du den wert aus TextBox1 zu.

Jetzt befiehlst du, dass im Bereich B4:B27 der Wert von strKonto gefunden werden soll. Diese Zelle deklarierst du als „rngFund“

In TextBox4 soll letztlich der Wert eingetragen werden, den du, ausgehend von rngFund und mittels der Funktion Offset (=BEREICH.VERSCHIEBEN) in der Spalte rechts daneben (C4:C27) findest.

textbox2

Das Makro hat richtig den zugehörigen Konto-Namen gefunden und eingetragen.

Die Inhalte der TextBoxen (3 und 4) kannst du hiermit löschen:

Sub TextBox2()
Tabelle1.TextBox3.Text=““
Tabelle1.TextBox4.Text=““
End Sub

Für den umgekeh´rten Fall, Eingabe des Namens und Suche der Nummer, verwendest du z.B. dieses Makro:

Sub TextBox3()
Dim strName As String
Dim rngFund As Range
strName=Tabelle1.TextBox4.Value
Set rngFund=Range(„C4:C27“).Find(strName,LookIn:=xlValues)
Tabelle1.TextBox3.Text=rngFund.Offset(0,-1)
End Sub

Wie kann es nun weitergehen?

Für die Kontoauskunft gibt es nun die Möglichkeiten, sich den Saldo des Kontos oder die Kontobewegungen für ein Geschäftsjahr und/oder einer Periodenauswahl anzeigen zu lassen. Dem könnte sich dann noch eine Druckvorschau  und der Ausdruck anschließen.

Dazu müsstest du ein Makro schreiben, das dies alles machen kann und dabei auf die Inhalte der TextBoxen 3 und 4 zugreift.

Das aber ist eine andere Geschichte, die in diesem Beitrag nicht mehr eingebaut werden kann.

Quellen:

[1] DATEV-Standardkontenrahmen (SKR) 04, 2015,

http://www.werz-kraft-vogt.de/fileadmin/Dateien/Dateien(SKR 04.pdf

VBA-Methoden: Eine Datei speichern

VBA ist Programmierung. Zu einer ordentlichen Prozedur sollte es immer gehören, die Datei zum Abschluss zu speichern.

Das kann manuell geschehen, aber auch automatisch.

Dieser Beitrag soll zwei Wege dazu aufzeigen.

Weiterlesen „VBA-Methoden: Eine Datei speichern“

VBA-Methoden: Eine Datei öffnen

Muss eine Datei mit VBA geöffnet werden? In der Regel nicht. Notwendig kann es aber innerhalb einer laufenden Prozedur werden, wenn Daten eben aus dieser Datei benötigt werden.

Wenn es um die Programmierung des Öffnens einer Datei geht, ist es gleichgültig, ob Daten in diese Datei eingetragen oder ob Daten aus dieser Datei entnommen werden sollen.

Dieser Beitrag unterscheidet zwei Fälle. Zuerst geht es um das einfache Öffnen, dann um das von einer Entscheidung abhängige Öffnen.

Weiterlesen „VBA-Methoden: Eine Datei öffnen“

Bilder dynamisch in Berichte einfügen

Größere Unternehmen haben oft Niederlassungen in anderen Staaten. Das monatliche Berichtswesen aus diesen Niederlassungen folgt in der Regel einer einheitlichen Vorgabe.

Angenommen, du hast die Aufgabe, die monatlichen Meldungen aus den Niederlassungen in die erwünschte Berichtsform zu bringen. Wie wäre es, das Berichtsdesign mit der jeweiligen Nationalflagge ein wenig aufzufrischen?

Excel bietet dazu mehrere Möglichkeiten, von denen ich dir eine reine Excel- und eine VBA-Variante zeigen will.

Weiterlesen „Bilder dynamisch in Berichte einfügen“