Office Logo VBA Klicken für Hauptseite von "The SOSCQ Page"   Klicken für Hauptseite von "The SOSCQ Page - VBA/VB-Codebeispiele" Klicken für Startseite von 'xlam - Excel and more!'

Diskette kopieren anhand des Windows-Dialoges "Diskette kopieren"

.Beschreibung
Das nachstehende VBA-Codebeispiel öffnet das Dialogfenster "Diskette kopieren". Es handelt sich um einen Standarddialog von Windows, der im Windows Explorer über den Menübefehl "Diskette kopieren" aufgerufen werden kann. Mit diesem Dialog können Sie eine Kopie einer beliebigen Diskette erstellen.

Der Programmcode kann ausgeführt werden (d.h. der Dialog angezeigt werden), ohne dass sich eine Diskette im Diskettenlaufwerk befinden muss.

.VBA-Code
Public Sub ShowDiskCopyDialog()
  Shell "rundll32.exe diskcopy.dll,DiskCopyRunDll 0,0", vbNormalFocus

End Sub

Verwandte Codebeispiele

Datenträger/Laufwerk kopieren

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Diskette formatieren anhand des Windows-Dialoges "Diskette formatieren"

.Beschreibung
Mit diesem Programmcode können Sie eine Diskette anhand des Windows-Dialoges "Diskette formatieren" formatieren. Bitte beachten Sie, dass beim Ausführen des Programmcodes (d.h. für das Öffnen des Dialogfensters) eine Diskette im Diskettenlaufwerk eingelegt sein muss. Anderenfalls erscheint die Fehlermeldung "Es befindet sich kein Datenträger in Laufwerk A:", die vom Benutzer bestätigt werden muss. Das VBA-Programm läuft jedoch ungeachtet dessen weiter, d.h. auch ohne dass die Fehlermeldung bestätigt wurde.

.VBA-Code
Public Sub ShowDiskFormatDialog()
  Shell "rundll32.exe shell32.dll,SHFormatDrive", vbNormalFocus

End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Add-In beim Öffnen einer Arbeitsmappe automatisch laden

.Beschreibung
Das nachfolgende Codebeispiel zeigt, wie ein Add-In beim Öffnen einer Arbeitsmappe explizit geladen wird. Damit wird erreicht, dass das Add-In automatisch verfügbar gemacht wird, sobald der Benutzer eine bestimmte Arbeitsmappe öffnet. Beim Schliessen der Mappe wird das Add-In wieder entladen.

.VBA-Code
'Modul 'DieseArbeitsmappe'
Private Sub Workbook_Open()
  Application.AddIns("Mein AddIn").Installed = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.AddIns("Mein AddIn").Installed = False
End Sub

.Hinweis
Add-Ins werden gewöhnlich mappenunabhängig geladen und entladen und stehen somit allen in einer Excel-Instanz geöffneten Arbeitsmappen zur Verfügung. Durch obigen VBA-Code kann ein Add-In quasi an eine bestimmte Arbeitsmappe 'gebunden' werden.

Weitere Informationen

Add-Ins

To Top


E-Mail-Formular öffnen und Betreff (Subject) und Mitteilung (Body) vorblenden

.Beschreibung
Es existiert eine ganze Reihe verschiedener Möglichkeiten, wie man aus einem VBA/VB-Programm heraus eine E-Mail versenden kann. Die einfachste Variante ist die Verwendung der SendMail-Methode (Application-Objekt). Leider ist diese Lösung nicht sehr flexibel. Den Betreff ("Subject") kann man zwar angegeben, jedoch keinen Mitteilungstext ("Body"). Zudem gibt es keine Möglichkeiten zum Festlegen der CC-Empfänger ("Carbon Copy"; Empfänger einer Kopie) und BCC-Empfänger ("Blind Carbon Copy"; Empfänger einer Blindkopie).

Wenn zum Öffnen des E-Mail-Formulares stattdessen die Run-Methode des Shell-Objektes aus der "Windows Script Host"-Bibliothek benutzt wird, kann man Empfänger, CC-Empfänger, BCC-Empfänger, Betreff und Mitteilung vorgeben.

.VBA-Code
Sub ShowMailForm()
  CreateObject("WScript.Shell").Run """mailto:support@pc-help.com?cc=itsupport@company.ch;management@company.ch" & _
      "&bcc=philipp@company.ch&subject=Dringendes PC-Problem&body=Folgender Fehler ist aufgetreten:"""
End Sub

.Hinweis
Bitte beachten Sie, dass das gesamte Argument in dreifachen Anführungszeichen geschrieben werden muss, sobald die Zeichenfolge ein Leerzeichen enthält. Es wird empfohlen, generell drei Anführungszeichen zu verwenden, also auch dann, wenn kein Leerzeichen vorhanden ist.

To Top


Eingerichtete Drucker auflisten (inkl. Angabe des Druckerports)

.Beschreibung
Dieses Codebeispiel zeigt, wie man die in Windows eingerichteten Drucker abfragen kann. Die Drucker werden nacheinander mit Angabe des Druckerports und des Druckernamens in einem Dialogfeld ausgegeben.

Bitte beachten Sie, dass als Port der Name des Anschlusses angezeigt wird, welcher vom Drucker benutzt wird. Dieser muss nicht zwingend mit dem (internen) Namen des Ports übereinstimmen. Beispielsweise wird beim Acrobat Distiller als Druckerport der Pfad "C:\WINNT\Profiles\All Users\Desktop\*.pdf" ausgegeben, anstelle des internen Portnamens "Ne00:".

.VBA-Code
Public Sub ShowPrinterConnections()
  Dim lngItem As Long
  Dim objWSHNetwork As Object
  Dim objWSHCollection As Object

  Set objWSHNetwork = CreateObject("WScript.Network")
  Set objWSHCollection = objWSHNetwork.EnumPrinterConnections
  For lngItem = 0 To objWSHCollection.Count - 1 Step 2
    MsgBox "Drucker Nr. " & CStr(lngItem / 2 + 1) & ":" & vbCrLf & objWSHCollection(lngItem) & " " & objWSHCollection(lngItem + 1)
  Next lngItem
  Set objWSHCollection = Nothing
  Set objWSHNetwork = Nothing
End Sub

Verwandte Codebeispiele

Eingerichtete Drucker mit zusätzlichen Informationen auflisten

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Eingerichtete Drucker mit zusätzlichen Informationen auflisten

.Beschreibung
Das nachfolgende Codebeispiel erstellt eine Liste der eingerichteten Windows-Drucker auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe.

Zuerst werden die vorhandenen Drucker ermittelt und in einer Datenfeldvariable (astrPrinters) abgelegt. Anschliessend wird der Arbeitsmappe ein neues Tabellenblatt hinzugefügt und die Überschriften der Listenspalten eingetragen. Zu jedem Drucker werden in der Windows Registry Informationen wie unter anderem Druckertreiber, Beschreibung, Ort, Dateiname der Trennseite und Freigabename nachgesehen und aufgelistet.

.VBA-Code
Public Sub ListPrintersWithProperties()
  Const RegKey As String = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\"
  Dim lngItem As Long
  Dim astrPrinters() As String
  Dim wksSheet As Worksheet
  Dim objWSHShell As Object
  Dim objWSHNetwork As Object
  Dim objWSHCollection As Object
  Set objWSHNetwork = CreateObject("WScript.Network")
  Set objWSHCollection = objWSHNetwork.EnumPrinterConnections
  For lngItem = 0 To objWSHCollection.Count - 1 Step 2
    ReDim Preserve astrPrinters(lngItem / 2 + 1)
    astrPrinters(lngItem / 2 + 1) = objWSHCollection(lngItem + 1)
  Next lngItem
  Set objWSHShell = CreateObject("WScript.Shell")
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  With wksSheet
    .Range("A1:N1").Value = Array("Drucker", "Druckertreiber", "Kommentar", "Default-Priorität", _
       "Priorität", "Standort", "Anschluss", "Trennseite", "Freigabename", "Spool-Verzeichnis", _
       "Druckprozessor", "Standard-Datentyp", "Status")
    .Range("A1:N1").Font.Bold = True
    For lngItem = 1 To UBound(astrPrinters)
      .Cells(lngItem + 1, 1).Value = astrPrinters(lngItem)
      .Cells(lngItem + 1, 2).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Printer Driver")
      .Cells(lngItem + 1, 3).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Description")
      .Cells(lngItem + 1, 4).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Default Priority")
      .Cells(lngItem + 1, 5).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Priority")
      .Cells(lngItem + 1, 6).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Location")
      .Cells(lngItem + 1, 7).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Port")
      .Cells(lngItem + 1, 8).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Separator File")
      .Cells(lngItem + 1, 9).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Share Name")
      .Cells(lngItem + 1, 10).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\SpoolDirectory")
      .Cells(lngItem + 1, 11).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Print Processor")
      .Cells(lngItem + 1, 12).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Datatype")
      .Cells(lngItem + 1, 13).Value = objWSHShell.RegRead(RegKey & astrPrinters(lngItem) & "\Status")
    Next lngItem
    .Range("A:N").EntireColumn.AutoFit
    .Range("A1").Sort Key1:=wksSheet.Range("A1"), Order1:=xlAscending, Header:=xlYes
  End With
  Set objWSHCollection = Nothing
  Set objWSHNetwork = Nothing
  Set objWSHShell = Nothing
  Set wksSheet = Nothing
End Sub

Verwandte Codebeispiele

Eingerichtete Drucker auflisten (inkl. Angabe des Druckerports)

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Meldungsdialog nach x Sekunden automatisch schliessen

.Beschreibung
Hier wird eine Möglichkeit vorgestellt, wie auf sehr einfache Art und Weise ein Dialogfeld für eine festgelegte Zeitdauer eingeblendet werden kann. Mit der gewöhnlichen MsgBox-Anweisung (bzw. MsgBox-Funktion) lässt sich dies nicht bewerkstelligen, da das Dialogfenster erst geschlossen wird, wenn der Benutzer eine Schaltfläche anklickt.

In den Codebeispielen weiter unten wird die Meldung für 5 Sekunden eingeblendet (siehe Popup-Parameter mit der Zahl 5 im VBA-Code). Die Syntax der Popup-Methode ist derjenigen der MsgBox-Anweisung von VBA ähnlich; nur die Reihenfolge der Argumente ist unterschiedlich.

Syntax
Mit Auswerten der gewählten Schaltfläche:
x = Object.Popup(bstrText As String, [pvarSecondsToWait], [pvarTitle], [pvarType]) As Long

Ohne Auswerten der gewählten Schaltfläche:
Object.Popup bstrText As String, [pvarSecondsToWait], [pvarTitle], [pvarType]

Argumente
Diese Argumente werden von Popup verwendet:

Argument Beschreibung
bstrText Anzuzeigender Meldungstext
pvarSecondsToWait Sekunden bis zum automatischen Schliessen des Dialogfeldes
pvarTitle Titel des Dialogfeldes
pvarType Typ des Dialogfeldes
(es können die Button-Konstanten von MsgBox verwendet werden,
in der Objektbibliothek zu finden unter VbMsgBoxStyle)

» Im ersten Codebeispiel wird der übliche Weg verwendet: Objektvariable deklarieren, Objektreferenz mit Set zuweisen, Objektmethode aufrufen, Objektvariable aus dem Speicher entfernen.

» Das zweite Beispiel zeigt die abgekürzte Variante ohne Benutzung einer Objektvariable.

» Das Beispiel #3 verwendet ebenfalls die Variante ohne Objektvariable, wobei zusätzlich der von Popup zurückgegebene Wert ausgewertet wird.

.VBA-Code #1
Sub ShowPopupMessage1()
  Dim objWSHShell As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  objWSHShell.Popup "Dies ist ein WSH-Popup!", 5, "Dialog-Titel", 64
  Set objWSHShell = Nothing

End Sub

.VBA-Code #2
Sub ShowPopupMessage2()
  CreateObject("WScript.Shell").Popup "Dies ist ein WSH-Popup!", 5, "Dialog-Titel", 64
End Sub

.VBA-Code #3
Sub ShowPopupMessage3()
  If CreateObject("WScript.Shell").Popup("Weiterfahren?", 3, "Ablauf", vbYesNo + vbQuestion) = vbYes Then
    MsgBox "Benutzer hat 'Ja' geklickt."
  Else
    MsgBox "Benutzer hat 'Nein' geklickt oder nicht geantwortet."
  End If

End Sub

.Hinweis
Es ist auch möglich, die Benutzer-Reaktion genauer auszuwerten. Alles zu diesem Thema erfahren Sie hier:

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Prüfen, ob eine Arbeitsmappe gerade gespeichert/geöffnet wird

.Beschreibung
Dieses Codebeispiel zeigt, wie man kontrollieren kann, ob eine bestimmte Arbeitsmappe gerade gespeichert beziehungsweise geöffnet wird.

Im Beispiel wird die Arbeitsmappendatei "C:\Daten\EineMappe.xls" verwendet.

.VBA-Code
Public Sub CheckFileOperation()
  Const strFile As String = "C:\Daten\EineMappe.xls"
  On Error Resume Next
  Open strFile For Binary Access Read Lock Read As #1
  If Err.Number = 70 Then
    Err.Clear
    Open strFile For Binary Access Read As #1
    If Err.Number = 70 Then
      MsgBox "Die Datei wird momentan gespeichert oder geöffnet."
    Else
      MsgBox "Die Datei wird bearbeitet aber momentan nicht gespeichert/geöffnet."
    End If
  Else
    MsgBox "Die Datei wird nicht bearbeitet und somit momentan nicht gespeichert/geöffnet."
  End If
  Close #1
End Sub

To Top


Prüfen, ob ein VBA-Projekt noch nicht gespeicherte Änderungen besitzt

.Beschreibung
Anhand der Saved-Eigenschaft kann man überprüfen, ob ein VBA-Projekt Änderungen enthält, die noch nicht gespeichert wurden.

Das Setzen der Saved-Eigenschaft auf True ist nicht möglich. Bei einer Arbeitsmappe ist dies dagegen möglich.

Eine Änderung im VBA-Projekt setzt sowohl die Saved-Eigenschaft des Projektes als auch der Mappe auf False. Eine Änderung in der Arbeitsmappe setzt dagegen in den meisten Fällen nur die Saved-Eigenschaft der Mappe auf False - die Saved-Eigenschaft des VBA-Projektes enthält weiterhin True. Nur wenn die Mappen-Änderung einen Einfluss auf das Projekt hat, genauer gesagt auf die Projekt-Struktur, also die Module, so wird auch Saved des Projektes auf False gesetzt. Dies ist beispielsweise bei Hinzufügen oder Löschen eines Arbeitsblattes der Fall, weil dadurch ein neues (Blatt-)Modul hinzukommt bzw. wegfällt.

.VBA-Code #1
Public Sub CheckUnsavedProjectChanges1()
  If Application.VBE.ActiveVBProject.Saved = False Then

    MsgBox "Das VBA-Projekt besitzt noch nicht gespeicherte Änderungen."
  Else
    MsgBox "Das VBA-Projekt besitzt keine noch nicht gespeicherten Änderungen."
  End If
End Sub

.VBA-Code #2
Public Sub CheckUnsavedProjectChanges2()
  If ActiveWorkbook.VBProject.Saved = False Then

    MsgBox "Das VBA-Projekt besitzt noch nicht gespeicherte Änderungen."
  Else
    MsgBox "Das VBA-Projekt besitzt keine noch nicht gespeicherten Änderungen."
  End If
End Sub

To Top


Anzahl aktuelle Bearbeiter einer freigegebenen Arbeitsmappe ermitteln

.Beschreibung
Anhand der UserStatus-Eigenschaft von Workbook kann man herausfinden, wie viele Benutzer aktuell mit der aktiven, freigegebenen Arbeitsmappe arbeiten.

UserStatus ist ein zweidimensionales Datenfeld, wobei die zweite Dimension immer drei Elemente enthält.

Es tritt kein Laufzeitfehler auf, wenn die Arbeitsmappe nicht freigegeben ist oder die Verbindung zur Mappe abgebrochen ist.

.VBA-Code
Public Sub GetNumberOfCurrentWorkbookUsers()
  MsgBox UBound(ActiveWorkbook.UserStatus)
End Sub

To Top


Aktuelle Bearbeiter einer freigegebenen Arbeitsmappe auflisten

.Beschreibung
Dieses Codebeispiel zeigt, ...

UserStatus ist ein zweidimensionales Array, wobei die zweite Dimension immer die drei Elemente Benutzername, Datum/Zeit des Mappenöffnens und Dateizugriffsmodus enthält.

Listet die aktuellen Bearbeiter der aktiven (freigegebenen) Arbeitsmappe auf einem Arbeitsblatt einer neuen Arbeitsmappe auf. Es wird absichtlich eine neue Arbeitsmappe verwendet, da man einer freigegebenen Arbeitsmappe grundsätzlich kein neues Blatt hinzufügen kann. Diese Funktionalität ist für freigegebene Mappen gesperrt (Anmerkung des Autors: Allerdings ist es nur über die Excel Benutzeroberfläche nicht möglich. Mit VBA würde es problemlos gehen.)

.VBA-Code
Public Sub ListCurrentWorkbookUsers()
  Dim intCounter As Integer
  Dim wkbBook As Workbook
  Dim wkbReport As Workbook
  Set wkbBook = ActiveWorkbook
  Set wkbReport = Workbooks.Add(Template:=xlWBATWorksheet)
  With wkbReport.Worksheets(1)
    For intCounter = 1 To UBound(wkbBook.UserStatus)
      .Cells(intCounter, 1).Value = wkbBook.UserStatus(intCounter, 1)
      .Cells(intCounter, 2).Value = wkbBook.UserStatus(intCounter, 2)
      .Cells(intCounter, 3).Value = wkbBook.UserStatus(intCounter, 3)
    Next intCounter

    .Range("A:C").EntireColumn.AutoFit
  End With
  Set wkbReport = Nothing
  Set wkbBook = Nothing
End Sub

To Top


Bisherige Bearbeiter einer freigegebenen Arbeitsmappe auflisten

.Beschreibung
Es gibt eine Möglichkeit herauszufinden, wie die Namen der Benutzer lauten, die jemals mit einer bestimmten freigegebenen Arbeitsmappe gearbeitet haben.

Listet die aktuellen Bearbeiter der aktiven (freigegebenen) Arbeitsmappe auf einem Arbeitsblatt einer neuen Arbeitsmappe auf.

Vier Spalten: Nummer, Benutzername, Druckereinstellungen und Filtereinstellungen.

Für jeden neuen Bearbeiter erstellt Excel automatisch eine persönliche Ansicht. Die Erstellung erfolgt, sobald der neue Benutzer die Arbeitsmappe zum ersten Mal speichert.

Fehlermeldung "Einige Ansichten-Einstellungen können nicht angewendet werden".

 

.VBA-Code
Public Sub ListAllWorkbookUsers()
  Dim intViews As Integer
  Dim intCustomViews As Integer
  Dim wkbBook As Workbook
  Dim wkbReport As Workbook
  On Error Resume Next
  Set wkbBook = ActiveWorkbook
  Set wkbReport = Workbooks.Add(Template:=xlWBATWorksheet)
  With wkbReport.Worksheets(1)
    .Range("A1:D1").Value = Array("Nr.", "Benutzername", "Drucker", "Filter")
    .Range("A1:D1").Font.Bold = True
    For intViews = 1 To wkbBook.CustomViews.Count
      .Cells(intViews - intCustomViews + 1, 1).Value = intViews - intCustomViews
      .Cells(intViews - intCustomViews + 1, 2).Value = wkbBook.CustomViews(intViews).Name
      If Err.Number = 0 Then
        If Right$(wkbBook.CustomViews(intViews).Name, 22) = " - Persönliche Ansicht" Then
          .Cells(intViews - intCustomViews + 1, 2).Value = Left$(wkbBook.CustomViews(intViews).Name, _

             Len(wkbBook.CustomViews(intViews).Name) - 22)
          .Cells(intViews - intCustomViews + 1, 3).Value = wkbBook.CustomViews(intViews).PrintSettings
          .Cells(intViews - intCustomViews + 1, 4).Value = wkbBook.CustomViews(intViews).RowColSettings
        Else
          .Cells(intViews - intCustomViews + 1, 1).Value = ""
          .Cells(intViews - intCustomViews + 1, 2).Value = ""
          intCustomViews = intCustomViews + 1
        End If
      Else
        .Cells(intViews - intCustomViews + 1, 2).Value = "(Benutzername nicht verfügbar)"
        Err.Clear
      End If
    Next intViews
    .Range("A:D").EntireColumn.AutoFit
  End With
  Set wkbReport = Nothing
  Set wkbBook = Nothing
End Sub

Verwandte Codebeispiele

Persönliche Ansichten anderer Bearbeiter einer freigegebenen Arbeitsmappe löschen

To Top


Anderer Bearbeiter einer freigegebenen Arbeitsmappe entfernen

.Beschreibung
Man kann sich selber nicht entfernen. Die Arbeitsmappe muss somit von mindestens zwei Benutzern bearbeitet werden, damit man einen anderen Benutzer entfernen kann.

Laufzeitfehler 1004 "Anwendungs- oder objektdefinierter Fehler", wenn die Arbeitsmappe nicht freigegeben ist.

Laufzeitfehler 1004 "Sie sind nicht mehr mit dieser Datei verbunden. Unter Umständen hat ein anderer Benutzer Sie von dieser Datei getrennt oder die Datei überschrieben."

Der Index für die bei RemoveUser anzugebenden Benutzernummer beginnt bei 1.

UserStatus-Eigenschaft (zweidimensionales Datenfeld)

Der Inhalt von UserStatus wird bei jedem Zugriff auf diese Eigenschaft neu ermittelt.

 

.VBA-Code
Public Sub RemoveWorkbookUser()
  ActiveWorkbook.RemoveUser Index:=1
End Sub

Verwandte Codebeispiele

Anderer Bearbeiter einer freigegebenen Arbeitsmappe entfernen

To Top


Persönliche Ansichten anderer Bearbeiter einer freigegebenen Arbeitsmappe löschen

.Beschreibung
Für jeden Bearbeiter einer freigegebenen Arbeitsmappe wird eine eigene Ansicht benutzt. Microsoft Excel legt eine solche persönliche Ansicht automatisch an, sobald ein Benutzer die Arbeitsmappe das erste Mal öffnet und eine Änderung vornimmt. Das Problem dieser persönlichen Ansichten ist, dass sie - einmal erstellt - für immer in der Arbeitsmappe liegen bleiben. Excel kann ja nicht wissen, ob ein bestimmter Benutzer noch mal mit der Mappe arbeiten wird. Hinzu kommt, dass beim Aufheben der Arbeitsmappen-Freigabe die persönlichen Ansichten ebenfalls nicht entfernt werden. Daher muss man sie von Hand oder mittels VBA-Programm löschen.

 

Es spielt keine Rolle, ob zum Zeitpunkt der VBA-Codeausführung die Arbeitsmappe tatsächlich freigegeben ist.

Der Inhalt von UserStatus wird bei jedem Zugriff auf diese Eigenschaft neu ermittelt.

 

.VBA-Code
Public Sub RemoveCustomViews()

End Sub

Verwandte Codebeispiele

Anderer Bearbeiter einer freigegebenen Arbeitsmappe entfernen

Bisherige Bearbeiter einer freigegebenen Arbeitsmappe auflisten

To Top


Prüfen, ob eine freigegebene Arbeitsmappe noch verbunden ist

.Beschreibung
So lange man eine freigegebene Arbeitsmappe bearbeitet, besteht eine Verbindung zur Arbeitsmappendatei. Diese Verbindung kann aus verschiedenen Gründen abgebrochen werden.

Laufzeitfehler 1004 "Sie sind nicht mehr mit dieser Datei verbunden. Unter Umständen hat ein anderer Benutzer Sie von dieser Datei getrennt oder die Datei überschrieben."

Wenn beim Abfragen von "UserStatus(1, 1)" kein Fehler auftritt, ist man mit der Arbeitsmappe verbunden.

.VBA-Code
Public Sub CheckWorkbookConnection()
  On Error Resume Next
  If ActiveWorkbook.UserStatus(1, 1) = "" Then
    MsgBox "Nicht mehr mit der Arbeitsmappe verbunden!", vbExclamation
  End If
End Sub

Verwandte Codebeispiele

Anderer Bearbeiter einer freigegebenen Arbeitsmappe entfernen

To Top


Freigegebene Arbeitsmappe exklusiv öffnen

.Beschreibung
Manchmal wäre es sinnvoll, eine freigegebene Arbeitsmappe exklusiv zu öffnen. Also genau so, wie es bei gewöhnlichen, d.h. nicht freigegebenen Arbeitsmappen der Fall ist, sodass nur ein einzelner Benutzer die Mappe bearbeiten kann. Das exklusive Öffnen einer freigegebenen Arbeitsmappe ist jedoch nicht direkt möglich. Es geht nur auf indirektem Weg: Man muss zuerst wie gewohnt die Mappe öffnen und anschliessend den Zugriffsmodus auf "Exklusiv" ändern.

Bitte beachten Sie, dass auf diese Weise die Freigabe der Arbeitsmappe aufgehoben und andere Benutzer von der Datei getrennt werden. Zudem wird das Änderungsprotokoll gelöscht.

.VBA-Code #1
Public Sub OpenSharedWorkbookExclusive1()
  Workbooks.Open "C:\Daten\Freigegeben.xls"
  ActiveWorkbook.ExclusiveAccess
End Sub

.VBA-Code #2
Public Sub OpenSharedWorkbookExclusive2()
  Dim wkbWorkbook As Workbook
  Set wkbWorkbook = Workbooks.Open("C:\Daten\Freigegeben.xls")
  If wkbWorkbook.MultiUserEditing Then
    wkbWorkbook.ExclusiveAccess
  Else
    MsgBox "Die Arbeitsmappe ist nicht freigegeben und somit bereits exklusiv geöffnet.", vbInformation
  End If
  Set wkbWorkbook = Nothing
End Sub

Verwandte Codebeispiele

Anderer Bearbeiter einer freigegebenen Arbeitsmappe entfernen

To Top


Prüfen, ob eine geschlossene Arbeitsmappe freigegeben ist

.Beschreibung
Hier wird gezeigt, wie man überprüfen kann, ob eine Arbeitsmappe freigegeben ist, welche nicht in der aktuellen Excel-Sitzung geöffnet ist.

Noch keine Lösung gefunden!

.VBA-Code
Public Sub CheckWorkbookSharing()

End Sub

Verwandte Codebeispiele

Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigegeben ist

To Top


Datei im Windows Explorer anzeigen

.Beschreibung
Die nachfolgenden Codebeispiele zeigen, wie man den Windows Explorer öffnen kann und in der Dateiliste des Explorer-Fensters eine bestimmte Datei markiert wird.

Der Schalter "/select" legt fest, dass eine Datei (oder ein Ordner) selektiert werden soll.

Bitte beachten Sie, dass nach jedem Schalter ein Komma stehen muss.

» Beispiel #1: Ordneransicht. Ohne Schalter "/e".

» Beispiel #2: Baumansicht. Mit Schalter "/e".

.VBA-Code #1
Public Sub ShowWindowsExplorer1()
  Shell "Explorer.exe /select, C:\Daten\EineMappe.xls", vbNormalFocus
End Sub

.VBA-Code #2
Public Sub ShowWindowsExplorer2()
  Shell "Explorer.exe /e, /select, C:\Daten\EineMappe.xls", vbNormalFocus
End Sub

.Hinweis
Wird eine nicht vorhandene Datei angegeben, so erscheint die Fehlermeldung "Der Pfad <x> ist nicht vorhanden oder verweist auf kein Verzeichnis". Diese Meldung wird nicht von VBA bzw. dem VBA-Editor angezeigt, sondern vom Windows Explorer. Das bedeutet, dass kein Laufzeitfehler auftritt, welchen man abfangen könnte. Nach Bestätigen der Fehlermeldung mit OK wird der Explorer nicht gestartet bzw. dadurch wieder beendet. Es wird kein Explorer-Fenster geöffnet. Bitte beachten Sie auch, dass, wenn Sie Shell als Funktion verwenden, eine Task-ID zurückgegeben wird, die so lange gültig ist, bis die Fehlermeldung bestätigt wird.

Verwandte Codebeispiele

Ordner im Windows Explorer anzeigen

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Papierkorb von Windows leeren

.Beschreibung
Noch keine Lösung gefunden!

.VBA-Code
Public Sub EmptyPaperBin()

End Sub

To Top


Stammverzeichnis eines Laufwerkes abfragen

.Beschreibung
Jedes Laufwerk besitzt ein so genanntes Stammverzeichnis, auch Stammordner genannt.

» Codebeispiel #1: Gibt "C:\" zurück.

» Codebeispiel #2: Gibt "C:" zurück.

.VBA-Code #1
Public Sub GetRootDirectory1()
  MsgBox CreateObject("Scripting.FileSystemObject").GetDrive("C").RootFolder
End Sub

.VBA-Code #2
Public Sub GetRootDirectory2()
  MsgBox CreateObject("Scripting.FileSystemObject").GetDrive("C").Path
End Sub

.Hinweis
Wenn das angegebene Laufwerk nicht vorhanden ist, erscheint der Laufzeitfehler 68 "Gerät nicht verfügbar". Ist das angegebene Laufwerk nicht bereit (z.B. keine Diskette in Diskettenlaufwerk eingelegt), tritt der Laufzeitfehler 76 "Pfad nicht gefunden" auf. Letzterer Laufzeitfehler ist übrigens ungewöhnlich, da normalerweise der Laufzeitfehler 71 "Datenträger nicht bereit" erscheint, wenn sich keine Diskette im Laufwerk befindet.

To Top


Typ eines Laufwerkes abfragen

.Beschreibung
Der Laufwerkstyp ist in verschiedenen Situationen nützlich.

Meldungstext: "Es befindet sich keine Diskette im Diskettenlaufwerk A:" oder "Die Festplatte C: ist voll".

Symbol: Entsprechendes Laufwerk-Symbol anzeigen.

Lesen/Schreiben: Speichern auf CD-ROM nicht möglich. Öffnen einer Mappe von Diskette nicht zu empfehlen.

 

Tabelle der Werte von DriveType und GetDriveType:

DriveType Laufwerktyp   GetDriveType Laufwerktyp
0 Unbekannt   0 Unbekannt
1 Wechselplatte/Diskette   1 (?)
2 Festplatte   2 Wechselplatte/Diskette
3 Netzwerk   3 Festplatte
4 CD-ROM-Laufwerk   4 (?)
5 RAM-Disk   5 CD-ROM-Laufwerk

 

.VBA-Code #1
Public Sub GetDriveType1()
  MsgBox CreateObject("Scripting.FileSystemObject").GetDrive("C:").DriveType
End Sub

.VBA-Code #2
Public Sub GetDriveType2()
  Dim intDriveType As Integer
  Dim strDriveType As String
  Dim strDrive As String
  strDrive = "C:"
  intDriveType = CreateObject("Scripting.FileSystemObject").GetDrive(strDrive).DriveType
  Select Case intDriveType
    Case 0
      strDriveType = "Unbekannt"
    Case 1
      strDriveType = "Wechselplatte/Diskette"
    Case 2
      strDriveType = "Festplatte"
    Case 3
      strDriveType = "Netzwerk"
    Case 4
      strDriveType = "CD-ROM-Laufwerk"
    Case 5
      strDriveType = "RAM-Disk"
  End Select
  MsgBox "Der Typ von Laufwerk " & strDrive & " ist " & strDriveType & ".", vbInformation
End Sub

.VBA-Code #3
'Deklarationsbereich
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

'Codemodul
Public Sub GetDriveType3()
  Dim intDriveType As Integer
  Dim strDrive As String
  strDrive = "C:\"
  intDriveType = GetDriveType(strDrive)
  If intDriveType = 2 Then
    MsgBox "Diskettenlaufwerk"
  ElseIf intDriveType = 3 Then
    MsgBox "Festplatte"
  ElseIf intDriveType = 5 Then
    MsgBox "CD-ROM"
  End If
End Sub

Verwandte Codebeispiele

Prüfen, ob ein Laufwerk ein CD-ROM Laufwerk ist

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Laufwerk-Eigenschaft ändern

.Beschreibung
Dieses Codebeispiel zeigt, wie man eine Eigenschaft eines Laufwerkes ändern kann. Gewöhnlich kann man allerdings nur eine einzige Eigenschaft ändern, nämlich die so genannte Datenträger-Bezeichnung (Volume-Name). Andere Eigenschaften wie Laufwerktyp oder Freigabename (Share-Name) sind schreibgeschützt.

.VBA-Code
Public Sub SetDriveProperty()

End Sub

To Top


Ordner-Eigenschaft abfragen

.Beschreibung
Jeder Ordner besitzt mehrere Eigenschaften, die man ohne weiteres abfragen kann. Zu diesen Eigenschaften gehören unter anderem das Erstellt am-Datum und der Ordnertyp. Auch Ordner-Eigenschaften, die sozusagen dynamisch ermittelt werden, können abgefragt werden. Dazu gehört beispielsweise die Ordnergrösse, die Anzahl Unterordner und die Anzahl Dateien des Ordners.

.VBA-Code
Public Sub GetFolderProperty()

End Sub

To Top


Ordnerstruktur erstellen

.Beschreibung
Zum Anlegen von mehreren Ordnern, die ihrerseits Unterordner enthalten können, benötigt man ein bisschen mehr Programmcode als gewohnt.

Komplette Struktur erstellen (mehrere Ordner mit Unterordnern).

Programmcode: TODO

.VBA-Code
'Codemodul
Public Function SearchList(Filename As String, StartPath As String, FolderList As Collection) As Long
  Dim SubFolderList As New Collection
  Dim strResult As String
  Dim lngCounter As Long
  On Error Resume Next
  If Right(StartPath, 1) <> "\" Then
    StartPath = StartPath & "\"
  End If
  strResult = Dir(StartPath & Filename, vbDirectory)
  Do While strResult <> ""
    If strResult <> "" Then
      If GetAttr(StartPath & strResult) And vbDirectory Then
        If strResult <> "." And strResult <> ".." Then
          FolderList.Add StartPath & strResult, StartPath & strResult
        End If
      End If
    End If
    strResult = Dir()
  Loop
  strResult = Dir(StartPath & "*", vbDirectory)
  Do While strResult <> ""
    If GetAttr(StartPath & strResult) And vbDirectory Then
      If strResult <> "." And strResult <> ".." Then
        SubFolderList.Add StartPath & strResult, strResult
      End If
    End If
    strResult = Dir()
  Loop
  For lngCounter = 1 To SubFolderList.Count
    SearchList Filename, SubFolderList(lngCounter), FolderList
  Next lngCounter
  SearchList = FolderList.Count
End Function

'*** Aufruf ***
Public Sub CreateFolderTree()
  Dim colList As New Collection
  Dim lngCounter As Long
  Dim astrFolders() As String
  Const strBasePath As String = "C:\Daten"
  For lngCounter = 1 To SearchList("*", strBasePath, colList)
    ReDim Preserve astrFolders(1 To lngCounter)
    astrFolders(lngCounter) = Right$(colList(lngCounter), Len(colList(lngCounter)) - Len(strBasePath) - 1)
  Next lngCounter
End Sub

To Top


Programm starten und warten, bis es beendet wurde

.Beschreibung
Dieses Codebeispiel startet ein Programm und wartet so lange, bis es beendet wurde.

.VBA-Code
'Deklarationsbereich
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, _
  lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
  ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STILL_ACTIVE = &H103

'Codemodul
Public Sub RunProgramAndWait(ByVal strProgram As String)
  Dim hwndShell As Long
  Dim hwndProzess As Long
  Dim lngActive As Long
  hwndShell = Shell(strProgram, vbNormalFocus)
  hwndProzess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, hwndShell)
  Do
    GetExitCodeProcess hwndProzess, lngActive
    Sleep 100
    DoEvents
  Loop While lngActive = STILL_ACTIVE
End Sub

'*** Aufruf ***
Sub TestCall()
  Call RunProgramAndWait("Notepad.exe")
  MsgBox "Das Programm wurde beendet."
End Sub

Verwandte Codebeispiele

Anwendung starten und Makroausführung anhalten

Programm starten und warten, bis es beendet oder die Esc-Taste gedrückt wurde

Programm mit einer bestimmten Prozess-Basispriorität starten

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Programm starten und warten, bis es beendet oder die Esc-Taste gedrückt wurde

.Beschreibung
Dieses Codebeispiel zeigt, wie ein Programm gestartet und dann so lange gewartet wird, bis das Programm entweder beendet wurde oder der Benutzer die Esc-Taste gedrückt hat.

Als Beispiel wird der Windows Editor (Notepad) gestartet.

.VBA-Code
'Deklarationsbereich
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, _
  lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
  ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STILL_ACTIVE = &H103

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

'Codemodul
Public Function RunProgramAndWait(ByVal strProgram As String) As Boolean
  Dim hwndShell As Long
  Dim hwndProzess As Long
  Dim lngActive As Long
  hwndShell = Shell(strProgram, vbNormalFocus)
  hwndProzess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, hwndShell)
  Do
    GetExitCodeProcess hwndProzess, lngActive
    Sleep 100
    If Abs(GetKeyState(27) < 0) Then
      RunProgramAndWait = True
      Exit Do
    End If
    DoEvents
  Loop While lngActive = STILL_ACTIVE
End Function

'*** Aufruf ***
Sub TestCall()
  If RunProgramAndWait("Notepad.exe") = False Then
    MsgBox "Das Programm wurde beendet."
  Else
    MsgBox "Die Esc-Taste wurde gedrückt."
  End If
End Sub

Verwandte Codebeispiele

Anwendung starten und Makroausführung anhalten

Programm starten und warten, bis es beendet wurde

Programm mit einer bestimmten Prozess-Basispriorität starten

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Programm mit einer bestimmten Prozess-Basispriorität starten

.Beschreibung
Windows-Programme bzw. -Prozesse werden standardmässig mit der Priorität "Normal" ausgeführt. Die Priorität ist unter anderem im Windows Task-Manager ersichtlich.

Mit dem folgenden VBA-Code können Sie ein Programm starten und dabei die zu verwendende Basispriorität angeben.

.VBA-Code
'Deklarationsbereich
Const WindowStyleHide = 0
Const WindowStyleNormal = 1
Const WindowStyleMaximize = 3
Const WindowStyleMinimize = 6
Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessId As Long
  dwThreadId As Long
End Type
Type STARTUPINFO
  cb As Long
  lpReserved As String
  lpDesktop As String
  lpTitle As String
  dwX As Long
  dwY As Long
  dwXSize As Long
  dwYSize As Long
  dwXCountChars As Long
  dwYCountChars As Long
  dwFillAttribute As Long
  dwFlags As Long
  wShowWindow As Integer
  cbReserved2 As Integer
  lpReserved2 As Byte
  hStdInput As Long
  hStdOutput As Long
  hStdError As Long
End Type
Type SECURITY_ATTRIBUTES
  nLength As Long
  lpSecurityDescriptor As Long
  bInheritHandle As Long
End Type
Const PriorityNormal = 32
Const PriorityLow = 64
Const PriorityHigh = 128
Const STARTF_USESHOWWINDOW = &H1
Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName _

   As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, _
   lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags _
   As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
   lpProcessInformation As PROCESS_INFORMATION) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

'Codemodul
Public Function ExecuteProgram(ByVal ProgramFile As String, ByVal WorkDir As String, ByVal _
    WaitTime As Long, ByVal WindowStyle As Long, ByVal Priority As Long) As Boolean
  Dim sInfo As STARTUPINFO
  Dim pInfo As PROCESS_INFORMATION
  Dim sAttr1 As SECURITY_ATTRIBUTES
  Dim sAttr2 As SECURITY_ATTRIBUTES
  sAttr1.nLength = Len(sAttr1)
  sAttr2.nLength = Len(sAttr2)
  sInfo.cb = Len(sInfo)
  sInfo.dwFlags = STARTF_USESHOWWINDOW
  sInfo.wShowWindow = WindowStyle
  If CreateProcess(vbNullString, ProgramFile, sAttr1, sAttr2, False, Priority, 0&, WorkDir, sInfo, pInfo) Then
    WaitForSingleObject pInfo.hProcess, WaitTime
    SuperShell = True
  Else
    SuperShell = False
  End If
End Function

'*** Aufruf ***
Sub TestCall()
  If ExecuteProgram("Notepad.exe", vbNullString, 500, WindowStyleNormal, PriorityHigh) = True Then
    MsgBox "Das Programm wurde gestartet."
  Else
    MsgBox "Das Programm konnte nicht gestartet werden."
  End If

End Sub

Verwandte Codebeispiele

Anwendung starten und Makroausführung anhalten

Programm starten und warten, bis es beendet wurde

Programm starten und warten, bis es beendet oder die Esc-Taste gedrückt wurde

To Top


Priorität eines laufenden Prozesses ändern

.Beschreibung
Noch keine Lösung gefunden!

.VBA-Code
Public Sub SetProcessPriority()

End Sub

To Top


Externer Zellbezug mit Datei- und Tabellenname erstellen

.Beschreibung
Beschreibung folgt.

Durch Setzen des External-Argumentes der Address-Eigenschaft auf True kann man die Zelladresse als einen externen Zellbezug erhalten.

 

.VBA-Code
Public Sub GetExternalLink()
  MsgBox Workbooks("EineMappe.xls").Worksheets("EineTabelle").Range("A1").Address(External:=True)
End Sub

To Top


Prüfen, ob eine Diskette genügend freien Speicherplatz besitzt

.Beschreibung
Bevor man eine Datei auf ein wechselbares Speichermedium (z.B. eine Diskette) kopiert, sollte man grundsätzlich zuerst überprüfen, ob der Ziel-Datenträger genügend freien Speicherplatz besitzt. Dazu muss man lediglich die Grösse der Datei mit dem verfügbaren Speicherplatz vergleichen. Wie das geht, zeigt das folgende Beispiel.

Laufzeitfehler 61 "Datenträger voll"

 

.VBA-Code
Public Sub CheckFreeFloppyDiskSpace()
  Dim lngFileSize As Long
  Dim lngDiskSpace As Long
  lngFileSize = FileLen("C:\Daten\EineMappe.xls")
  lngDiskSpace = CreateObject("Scripting.FileSystemObject").GetDrive("A:").FreeSpace
  If lngFileSize > lngDiskSpace Then
    MsgBox "Der Datenträger besitzt nicht genügend freien Speicherplatz." & vbCrLf & vbCrLf & _
      "Frei:" & Chr$(9) & Format$(lngDiskSpace, "#,##0") & " Bytes" & vbCrLf & _
      "Benötigt:" & Chr$(9) & Format$(lngFileSize, "#,##0") & " Bytes" & vbCrLf & _
      "Fehlend:" & Chr$(9) & Format$(lngFileSize - lngDiskSpace, "#,##0") & " Bytes", vbInformation
  End If
End Sub

Verwandte Codebeispiele

Gesamter Speicherplatz eines Laufwerkes abfragen

Grösse eines Laufwerkes abfragen

Freier Speicherplatz eines Laufwerkes abfragen

Verfügbarer Speicherplatz eines Laufwerkes abfragen

Belegter Speicherplatz eines Laufwerkes abfragen

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Prüfen, ob ein Laufwerk ein CD-ROM Laufwerk ist

.Beschreibung
Mit der DriveType-Eigenschaft des Drive-Objektes aus der FileSystemObject-Bibliothek kann man unter anderem herausfinden, ob ein Laufwerk ein CD-ROM Laufwerk ist.

.VBA-Code
Public Function IsCDROMDrive(ByVal strDriveLetter As String) As Boolean
  If CreateObject("Scripting.FileSystemObject").GetDrive(strDriveLetter).DriveType = 4 Then
    IsCDROMDrive = True
  Else
    IsCDROMDrive = False
  End If
End Function

'*** Aufruf ***
Sub TestCall()
  Dim strDrive As String
  strDrive = "E:"

  MsgBox "Das Laufwerk " & strDrive & " ist ein CD-ROM: " & IsCDRUMDrive(strDrive)
End Sub

Verwandte Codebeispiele

Typ eines Laufwerkes abfragen

Prüfen, ob ein Laufwerk verfügbar und bereit ist

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Textdatei öffnen und sequentiell lesen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub ReadTextfile()

End Sub

To Top


Installierte Schriften auflisten

.Beschreibung
Beschreibung folgt.

Erstellt eine Liste der in Microsoft Excel verfügbaren Schriften auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe.

 

.VBA-Code
Public Sub ListInstalledFonts()
  Dim intFonts As Integer
  Dim wksSheet As Worksheet
  Dim objFontControl As Object
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Set objFontControl = Application.CommandBars("Formatting").FindControl(Id:=1728)
  For intFonts = 0 To objFontControl.ListCount - 1
    wksSheet.Cells(intFonts + 1, 1).Value = objFontControl.List(intFonts + 1)
  Next intFonts
  wksSheet.Cells(1, 1).EntireColumn.AutoFit
  Set objFontControl = Nothing
  Set wksSheet = Nothing
End Sub

Verwandte Codebeispiele

Schriftart installieren

Schriftart deinstallieren

Prüfen, ob eine Schriftart installiert ist

To Top


Arbeitsmappe basierend auf einer anderen Arbeitsmappe erstellen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub AddWorkbook()
  Workbooks.Add "C:\Daten\EineMappe.xls"
End Sub

Verwandte Codebeispiele

Arbeitsmappe anlegen

Arbeitsmappe mit einem Arbeitsblatt anlegen

Arbeitsmappe mit mehreren Arbeitsblättern anlegen

Arbeitsmappe mit einem Diagramm-, Makro- oder Dialogblatt anlegen

Arbeitsmappe basierend auf einer Vorlage erstellen

Arbeitsmappe anlegen und sofort speichern

Arbeitsmappe anlegen und Mappenfenster sofort ausblenden

To Top


Arbeitsmappe basierend auf einer Vorlage erstellen

.Beschreibung
Dieses Codebeispiel legt eine neue Arbeitsmappe basierend auf der Mustervorlage "C:\Daten\VorlageMappe.xlt" an.

.VBA-Code
Public Sub AddWorkbook()
  Workbooks.Add "C:\Daten\VorlageMappe.xlt"
End Sub

To Top


Arbeitsmappe anlegen und sofort speichern

.Beschreibung
Dieses Codebeispiel legt eine neue Arbeitsmappe an und speichert diese unmittelbar danach.

.VBA-Code
Public Sub AddAndSaveWorkbook()
  Workbooks.Add.SaveAs "C:\Daten\EineMappe.xls"
End Sub

To Top


Arbeitsmappe anlegen und Mappenfenster sofort ausblenden

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub AddAndHideWorkbook()
  Workbooks.Add.Windows(1).Visible = False
End Sub

To Top


Arbeitsmappe mit einem Diagramm-, Makro- oder Dialogblatt anlegen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub AddWorkbook()
  Workbooks.Add xlWBATChart
End Sub

To Top


Datei öffnen-Dialog anzeigen und ausgewählte Datei schreibgeschützt öffnen

.Beschreibung
Beschreibung folgt.

Durch Setzen von arg3 auf True wird die ausgewählte Datei schreibgeschützt geöffnet. Im Titel des Arbeitsmappenfensters erscheint der Hinweis "[Schreibgeschützt]".

.VBA-Code
Public Sub ShowOpenDialogAndOpenFileReadOnly()
  Application.Dialogs(xlDialogOpen).Show arg3:=True
End Sub

Verwandte Codebeispiele

Datei öffnen-Dialog anzeigen

Datei öffnen-Dialog anzeigen und Pfad/Datei vorblenden

Prüfen, ob die aktive Arbeitsmappe schreibgeschützt geöffnet wurde

To Top


Aktuelles Laufwerk wechseln

.Beschreibung
Es wird bei ChDrive generell nur das erste Zeichen berücksichtigt. Erlaubt sind nur Buchstaben von A bis Z (Gross-/Kleinschreibung ist egal).

.VBA-Code #1
Public Sub ChangeCurrentDrive1()
  ChDrive "D"
End Sub

.VBA-Code #2
Public Sub ChangeCurrentDrive2()
  ChDrive "C:\Daten"
End Sub

.Hinweis
Bitte beachten Sie, dass ChDrive keine UNC-Pfade verarbeiten kann. Es können nur Laufwerksbuchstaben angegeben werden. Im Gegensatz zu ChDrive kann ChDir auch zwischen Verzeichnissen wechseln, die als UNC-Pfade angegeben werden.

Verwandte Codebeispiele

Aktuelles Verzeichnis wechseln

Aktuelles Verzeichnis ermitteln

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Aktuelles Verzeichnis wechseln

.Beschreibung
Mit ChDir wird das aktuelle Verzeichnis gewechselt.

Wenn sich das gewünschte Verzeichnis nicht auf dem aktuellen Laufwerk befindet, muss zuerst das Laufwerk mit ChDrive gewechselt werden.

.VBA-Code
Public Sub ChangeCurrentDirectory()
  ChDir "C:\Backup"
End Sub

Verwandte Codebeispiele

Aktuelles Verzeichnis ermitteln

Aktuelles Laufwerk wechseln

 

Weitere Informationen

VBA-Befehle und -Funktionen

Kompatibilität zwischen Excel für Windows und Excel für Macintosh

To Top


Arbeitsmappe für die gemeinsame Bearbeitung freigeben

.Beschreibung
Beschreibung folgt.

Wenn Sie möchten, dass eine Arbeitsmappe von mehreren Benutzern gleichzeitig bearbeitet werden kann, so muss die Arbeitsmappe freigegeben werden. Dies wird erreicht, indem die Mappe mit der SaveAs-Methode gespeichert wird, wobei das Argument AccessMode mit xlShared angegeben wird.

Eine andere Variante ist die Verwendung der ProtectSharing-Methode. Sie gibt die Arbeitsmappe ebenfalls frei, wobei die Freigabe automatisch geschützt wird.

.VBA-Code #1
Public Sub ShareWorkbook1()
  ActiveWorkbook.SaveAs FileName:="C:\Daten\Freigegeben.xls", AccessMode:=xlShared
End Sub

.VBA-Code #2
Public Sub ShareWorkbook2()
  ActiveWorkbook.ProtectSharing FileName:="C:\Daten\Freigegeben.xls"
End Sub

Verwandte Codebeispiele

Freigabe einer Arbeitsmappe für die gemeinsame Bearbeitung aufheben

Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigeben ist

Prüfen, ob eine geschlossene Arbeitsmappe freigegeben ist

Prüfen, ob eine freigegebene Arbeitsmappe gerade von einem anderen Benutzer bearbeitet wird

Freigegebene Arbeitsmappe schützen

Freigegebene Arbeitsmappe mit einem Freigabekennwort schützen

Freigabeschutz einer freigegebenen Arbeitsmappe aufheben

To Top


Freigabe einer Arbeitsmappe für die gemeinsame Bearbeitung aufheben

.Beschreibung
Beschreibung folgt.

Wenn Sie SaveAs mit dem Argument "AccessMode:=xlExclusive" verwenden, so muss die Arbeitsmappe unter einem anderen Namen gespeichert werden. Das heisst, dass für "Filename" ein anderer Dateiname angegeben werden muss. Anderenfalls wird die Arbeitsmappe zwar (unter dem gleichen Namen) gespeichert, aber die Freigabe nicht aufgehoben. Eine Fehlermeldung erscheint nicht. Ausschnitt aus der Excel-VBA-Referenz: "Wenn Sie ein gemeinsam genutztes Dokument speichern, ohne den Dateinamen zu ändern, wird dieses Argument ignoriert. Verwenden Sie die ExclusiveAccess-Methode, um den Zugriffsmodus zu ändern."

ExclusiveAccess erzeugt einen Laufzeitfehler 1004 "Anwendungs- oder objektdefinierter Fehler", wenn die Arbeitsmappe nicht freigegeben ist. Sie sollten daher zuerst überprüfen, ob die Mappe tatsächlich für die gemeinsame Bearbeitung freigegeben ist (siehe Codebeispiel #3).

Ist die Arbeitsmappe freigegeben aber die Freigabe geschützt (egal ob mit oder ohne Kennwort), so erscheint der Laufzeitfehler 1004 "Anwendungs- oder objektdefinierter Fehler", weil wegen dem Schutz kein exklusiver Zugriff gewährt werden kann.

Nebenbei erwähnt gibt es die MultiUserEditing-Eigenschaft, welche bei einer freigegebenen Mappe True enthält. Es ist nicht möglich, diese Eigenschaft einfach auf False zu setzen, da sie schreibgeschützt ist.

 

.VBA-Code #1
Public Sub RemoveWorkbookSharing1()
  ActiveWorkbook.SaveAs FileName:="C:\Daten\NichtFreigegeben.xls", AccessMode:=xlExclusive
End Sub

.VBA-Code #2
Public Sub RemoveWorkbookSharing2()
  ActiveWorkbook.ExclusiveAccess
End Sub

.VBA-Code #3
Public Sub RemoveWorkbookSharing3()
  If ActiveWorkbook.MultiUserEditing Then

    ActiveWorkbook.ExclusiveAccess
  End If

End Sub

.Hinweis
Bitte beachten Sie folgendes ungewöhnliche Verhalten von Microsoft Excel:

Bei der ersten Ausführung von ExclusiveAccess erscheint der Laufzeitfehler 1004 "Diese Arbeitsmappe enthält VBA-Makros. Visual Basic-Module können im Freigabemodus nicht bearbeitet werden." Bei jeder weiteren Ausführung von ExclusiveAccess tritt der Laufzeitfehler 1004 "Anwendungs- oder objektdefinierter Fehler" auf.

Verwandte Codebeispiele

Arbeitsmappe für die gemeinsame Bearbeitung freigeben

Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigeben ist

Prüfen, ob eine freigegebene Arbeitsmappe gerade von einem anderen Benutzer bearbeitet wird

Freigegebene Arbeitsmappe schützen

Freigegebene Arbeitsmappe mit einem Freigabekennwort schützen

Freigabeschutz einer freigegebenen Arbeitsmappe aufheben

Prüfen, ob eine geschlossene Arbeitsmappe freigegeben ist

To Top


Freigegebene Arbeitsmappe schützen

.Beschreibung
Ist die Arbeitsmappe freigegeben, so wird die Freigabe geschützt. Es wird kein Freigabeschutz-Kennwort zugewiesen.

Ist die Arbeitsmappe nicht freigegeben, so wird sie freigegeben und gleichzeitig die Freigabe geschützt. Da Arbeitsmappen beim Freigeben immer gespeichert werden, erscheint die Rückfrage "Eine Datei mit dem Namen <x> existiert schon an diesem Platz. Soll sie ersetzt werden?".

Ist die Freigabe bereits geschützt (egal ob mit oder ohne Freigabeschutz-Kennwort), so passiert nichts. Der bisherige Schutz bleibt bestehen.

 

.VBA-Code
Public Sub ProtectSharedWorkbook()
  ActiveWorkbook.ProtectSharing
End Sub

Verwandte Codebeispiele

Freigegebene Arbeitsmappe mit einem Freigabekennwort schützen

Freigabeschutz einer freigegebenen Arbeitsmappe aufheben

Prüfen, ob die Freigabe einer freigegebenen Arbeitsmappe geschützt ist

Arbeitsmappe für die gemeinsame Bearbeitung freigeben

Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigeben ist

To Top


Freigegebene Arbeitsmappe mit einem Freigabekennwort schützen

.Beschreibung
Es ist mit VBA tatsächlich nicht direkt möglich, eine freigegebene Arbeitsmappe mit einem Freigabekennwort zu schützen. Ist die Arbeitsmappe bereits freigegeben, so kann die Freigabe nicht durch ein Kennwort geschützt werden! Über die Benutzeroberfläche von Microsoft Excel ist es wohlgemerkt kein Problem, eine bereits freigegebene (ungeschützte) Mappe mit einem Freigabekennwort zu schützen.

Man kann die Freigabe einer freigegebenen Arbeitsmappe zwar schützen, jedoch nur ohne Kennwort. Wenn man ein Kennwort angibt, so wird die Mappe zwar geschützt, aber das angegebene Kennwort schlicht ignoriert! Das Schützen der Freigabe einer bereits freigegebenen Arbeitsmappe ist somit möglich, aber eben nur ohne Kennwort.

Wenn man jedoch ein Kennwort zuweisen möchte, so gibt es nur einen Lösungsweg: Die Freigabe der Arbeitsmappe muss zuerst aufgehoben werden, damit die Mappe anschliessend freigegeben werden kann, mit gleichzeitigem Schützen der Freigabe und mit Zuweisen eines Kennwortes. Diese drei Schritte sind erforderlich:
1. Allfälliger Freigabeschutz aufheben
2. Freigabe der Arbeitsmappe aufheben
3. Arbeitsmappe neu freigeben, Freigabe schützen und Kennwort zuweisen

Gross-/Kleinschreibung beim Kennwort beachten.

.VBA-Code
Public Sub ProtectSharedWorkbook()
  ActiveWorkbook.UnprotectSharing

  ActiveWorkbook.ExclusiveAccess
  ActiveWorkbook.ProtectSharing SharingPasswort:="Sommer"
End Sub

Verwandte Codebeispiele

Freigegebene Arbeitsmappe schützen

Freigabeschutz einer freigegebenen Arbeitsmappe aufheben

Prüfen, ob die Freigabe einer freigegebenen Arbeitsmappe geschützt ist

Arbeitsmappe für die gemeinsame Bearbeitung freigeben

Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigeben ist

To Top


Freigabeschutz einer freigegebenen Arbeitsmappe aufheben

.Beschreibung
Man kann die Freigabe einer freigegebenen Arbeitsmappe schützen, und zwar entweder ohne oder mit einem Kennwort. Da es mit den zur Verfügung stehenden Elementen des Excel-Objektmodells nicht möglich ist herauszufinden, ob ein Kennwort verwendet wird, sollte man die verschiedenen Auswirkungen kennen, die beim Aufheben des Freigabeschutzes auftreten können. Die folgende Tabelle zeigt diese Auswirkungen:

  Kein Freigabeschutz Freigabeschutz ohne Kennwort Freigabeschutz mit Kennwort
Aufheben ohne Kennwort Keine Auswirkung Schutz wird aufgehoben Dialog "Freigabeschutz aufheben" erscheint
Aufheben mit Kennwort Keine Auswirkung Schutz wird aufgehoben Schutz wird aufgehoben
Aufheben mit falschem Kennwort Keine Auswirkung Schutz wird aufgehoben Laufzeitfehler 1004 "Das eingegebene Kennwort ist ungültig" tritt auf

Zu Beachten sind insbesondere die beiden Auswirkungen beim Versuch, einen Kennwort-Schutz ohne oder mit falschem Kennwort aufzuheben (in der obigen Tabelle rot markiert). Ist die Freigabe ohne Kennwort geschützt und man gibt ein Kennwort an, so wird dieses ignoriert und der Freigabeschutz aufgehoben (gelb markiert).

Ist die Arbeitsmappe freigegeben und die Freigabe durch ein Kennwort geschützt, so erscheint der Eingabeaufforderungsdialog "Freigabeschutz aufheben" und verlangt das Freigabe-Kennwort. Diese Aufforderung kann übrigens nicht mit "Application.DisplayAlerts = False" unterdrückt werden.

Wird das Freigabeschutz-Kennwort angegeben, wird der Freigabeschutz aufgehoben.

Wird ein falsches Freigabeschutz-Kennwort angegeben, tritt der Laufzeitfehler 1004 "Das eingegebene Kennwort ist ungültig. [...]" auf.

 

.VBA-Code #1
Public Sub UnprotectSharedWorkbook1()
  ActiveWorkbook.UnprotectSharing
End Sub

.VBA-Code #2
Public Sub UnprotectSharedWorkbook2()
  ActiveWorkbook.UnprotectSharing SharingPassword:="Sommer"
End Sub

Tipp! Tipp!
Es gibt einen Trick, wie man herausfinden kann, ob eine Freigabe geschützt ist. Mehr dazu siehe unter Prüfen, ob die Freigabe einer freigegebenen Arbeitsmappe geschützt ist.

Verwandte Codebeispiele

Freigegebene Arbeitsmappe schützen

Freigegebene Arbeitsmappe mit einem Freigabekennwort schützen

Prüfen, ob die Freigabe einer freigegebenen Arbeitsmappe geschützt ist

Arbeitsmappe für die gemeinsame Bearbeitung freigeben

Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigeben ist

To Top


Prüfen, ob die Freigabe einer freigegebenen Arbeitsmappe geschützt ist

.Beschreibung
Es ist nicht möglich, anhand den im Excel-Objektmodell zur Verfügung stehenden Elementen herauszufinden, ob eine Freigabe geschützt ist. Folglich ist es auch nicht möglich herauszufinden, ob ein Freigabeschutz ein Kennwort verwendet oder nicht.

Es gibt jedoch einen Trick, der zumindest eine 'Notlösung' darstellt: Da in Microsoft Excel je nach vorhandenem Freigabeschutz den Menübefehl unter Extras/Schutz automatisch entsprechend beschriftet, kann man anhand dieser Beschriftung feststellen, ob die Freigabe geschützt ist. Das dazu benötigte Symbolleisten-Steuerelement besitzt die ID 3059. Wenn es die Beschriftung "Freigegebene Arbeitsmappe schützen..." besitzt, ist kein Schutz vorhanden. Beim Text "Freigabeschutz aufheben..." ist die Freigabe geschützt.

Diese Lösung ist insofern eine Notlösung, weil sie nur mit der deutschsprachigen Excelversion funktioniert. Zudem muss der abgefragte Menübefehl vorhanden sein. Wenn er beispielsweise durch den Benutzer entfernt wurde, tritt ein Laufzeitfehler auf.

.VBA-Code
Public Sub CheckSharingProtection()
  If InStr(CommandBars.FindControl(Id:=3059).Caption, "aufheben") Then
    MsgBox "Freigabe ist geschützt.", vbInformation
  Else
    MsgBox "Freigabe ist nicht geschützt.", vbInformation
  End If
End Sub

To Top


Namen der geöffneten Arbeitsmappen mit allen Arbeitsblättern auflisten

.Beschreibung
Beschreibung folgt...

.VBA-Code
Public Sub ListOpenWorkbooksWithSheets()
  Dim wkbBook As Workbook
  Dim wksSheet As Worksheet
  Dim intRow As Integer
  For Each wkbBook In Workbooks
    For Each wksSheet In wkbBook.Worksheets
      intRow = intRow + 1
      ActiveSheet.Cells(intRow, 1).Value = wkbBook.Name
      ActiveSheet.Cells(intRow, 2).Value = wksSheet.Name
    Next wksSheet
  Next wkbBook
End Sub

To Top


Dateiname in der Makrozuweisung eines Steuerelementes abfragen

.Beschreibung
Beschreibung folgt.

Schaltflächen von Symbolleisten

Menübefehle von Symbolleisten

Schaltflächen auf dem Arbeitsblatt (Formular-Steuerelemente)

 

'D:\Programme\Microsoft Office\Office\XLSTART\PERSONL.XLS'!AufrufVonTeileMich

'D:\Programme\Microsoft Office\Office\XLSTART\PERSONL.XLS'!ActivateNextSheet

 

.VBA-Code
Public Sub GetOnActionFile()
  MsgBox Application.CommandBars("MeineSymbolleiste").Controls("Schrift vergrössern").OnAction

  MsgBox ActiveSheet.Shapes("Button 1").OnAction
End Sub

To Top


Dateinamenerweiterungen mit zugeordnetem Dateityp auflisten

.Beschreibung
In Windows ist ein Dateityp einer oder mehreren Dateinamenerweiterungen zugeordnet. Welche Dateinamenerweiterungen zu welchen Dateitypen gehören, ist in der Windows Registry abgelegt (Schlüssel HKEY_CLASSES_ROOT).

Das nachstehende Codebeispiel zeigt, wie man eine Liste der Dateinamenerweiterungen mit ihren Dateitypen erhält. Die Liste wird zuerst anhand des DOS-Befehls ASSOC generiert und in die Datei "Assoc.txt" geschrieben. Der Dateiname und Pfad dieser Datei kann individuell festgelegt werden (siehe Konstante DestFile). Anschliessend wird der Inhalt dieser Datei in ein neues Arbeitsblatt der aktiven Arbeitsmappe eingefüllt.

Informationen über ASSOC erhalten Sie, indem Sie im Konsolenfenster/DOS-Fenster von Windows (aufrufen mit CMD) den Befehl "ASSOC /?" eingeben.

.VBA-Code
Public Sub ListExtensionsWithType()
  Dim strItem As String
  Dim intCounter As Integer
  Dim wksSheet As Worksheet
  Const DestFile As String = "C:\Daten\Assoc.txt"
  CreateObject("WScript.Shell").Run "CMD /C ASSOC >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Open DestFile For Input As #1
    Do While Not EOF(1)
      intCounter = intCounter + 1
      Input #1, strItem
      wksSheet.Cells(intCounter, 1).Value = strItem
    Loop
  Close #1

  wksSheet.Range("A1").EntireColumn.AutoFit
  Set wksSheet = Nothing

  Kill DestFile
End Sub

Verwandte Codebeispiele

Neue Dateinamenerweiterung mit Dateitypzuordnung registrieren

Zugeordneter Dateityp einer Dateinamenerweiterung ermitteln

Dateitypen mit den definierten Öffnen-Befehlen auflisten

Öffnen-Befehl eines Dateityps ändern

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Dateitypen mit den definierten Öffnen-Befehlen auflisten

.Beschreibung
Die meisten Dateitypen besitzen einen so genannten Öffnen-Befehl (engl. Open Command). Der Öffnen-Befehl legt fest, was beim Öffnen einer Datei eines bestimmten Dateityps passieren soll. Der Befehl ist in der Windows Registry im Zweig des jeweiligen Dateityps abgelegt.

Registry-Eintrag "HKEY_CLASSES_ROOT\<Dateityp>\Shell\open\command"

Das nachstehende Codebeispiel zeigt, wie man eine Liste der Dateitypen mit ihren Öffnen-Befehlen erhält. Die Liste wird zuerst anhand des DOS-Befehls FTYPE generiert und in die Datei "FType.txt" geschrieben. Der Dateiname und Pfad dieser Datei kann individuell festgelegt werden (siehe Konstante DestFile). Anschliessend wird der Inhalt dieser Datei in ein neues Arbeitsblatt der aktiven Arbeitsmappe eingefüllt.

Informationen über FTYPE erhalten Sie, indem Sie im Konsolenfenster/DOS-Fenster von Windows (aufrufen mit CMD) den Befehl "FTYPE /?" eingeben.

.VBA-Code
Public Sub ListOpenCommands()
  Dim strItem As String
  Dim intCounter As Integer
  Dim wksSheet As Worksheet
  Const DestFile As String = "C:\Daten\FType.txt"
  CreateObject("WScript.Shell").Run "CMD /C FTYPE >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Open DestFile For Input As #1
    Do While Not EOF(1)
      intCounter = intCounter + 1
      Line Input #1, strItem
      wksSheet.Cells(intCounter, 1).Value = strItem
    Loop
  Close #1

  wksSheet.Range("A1").EntireColumn.AutoFit
  Set wksSheet = Nothing
  Kill DestFile

End Sub

Verwandte Codebeispiele

Öffnen-Befehl eines Dateityps ändern

Neue Dateinamenerweiterung mit Dateitypzuordnung registrieren

Zugeordneter Dateityp einer Dateinamenerweiterung ermitteln

Dateinamenerweiterungen mit zugeordnetem Dateityp auflisten

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Öffnen-Befehl eines Dateityps ermitteln

.Beschreibung
Für die meisten Dateitypen ist in Windows ein so genannter Öffnen-Befehl definiert. Der Öffnen-Befehl legt fest, was beim Öffnen einer Datei des besagten Dateityps passieren soll.

Gibt den Öffnen-Befehl des Dateityps "Microsoft Excel-Arbeitsmappe" (entspricht der ProgID "Excel.Sheet.8") aus.

Der von FTYPE angezeigte Öffnen-Befehl wird in die Datei "C:\Daten\FType.txt" geschrieben. Man kann hier auch einen beliebigen anderen Datei- bzw. Pfadnamen verwenden.

Welche sonstigen Dateitypen bzw. Öffnen-Befehle es auf Ihrem Computer gibt, können Sie durch Eingabe von FTYPE ohne eines bestimmten Dateityps herausfinden (siehe Codebeispiel Dateitypen mit den definierten Öffnen-Befehlen auflisten).

Informationen über FTYPE erhalten Sie, indem Sie im Konsolenfenster/DOS-Fenster von Windows (aufrufen mit CMD) den Befehl "FTYPE /?" eingeben.

.VBA-Code
Public Sub GetOpenCommand()
  Dim strCommand As String
  Const DestFile As String = "C:\Daten\FType.txt"
  Const FileType As String = "Excel.Sheet.8"
  CreateObject("WScript.Shell").Run "CMD /C FTYPE " & FileType & " >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Open DestFile For Input As #1
    Line Input #1, strCommand
  Close #1
  MsgBox "Öffnen-Befehl des Dateityps '" & FileType & "':" & vbCrLf & Mid$(strCommand, Len(FileType) + 2)
  Kill DestFile
End Sub

Verwandte Codebeispiele

Dateitypen mit den definierten Öffnen-Befehlen auflisten

Neue Dateinamenerweiterung mit Dateitypzuordnung registrieren

Zugeordneter Dateityp einer Dateinamenerweiterung ermitteln

Dateinamenerweiterungen mit zugeordnetem Dateityp auflisten

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Öffnen-Befehl eines Dateityps ändern

.Beschreibung
Mit FTYPE kann man den Öffnen-Befehls eines Dateityps nicht nur abfragen sondern auch ändern.

Programmdatei.exe

"C:\Programme\MeinProgramm"

Dateityp bwdfile

"%1" bedeutet, dass beim Programmstart die aktuell markierte Datei geöffnet wird.

Informationen über FTYPE erhalten Sie, indem Sie im Konsolenfenster/DOS-Fenster von Windows (aufrufen mit CMD) den Befehl "FTYPE /?" eingeben.

.VBA-Code
Public Sub ModifyOpenCommand()
  Dim strFileType As String

  Dim strOpenCommand As String
  strFileType = "bwdfile"
  strOpenCommand = Chr$(34) & "C:\Programme\MeinProgramm\Programmdatei.exe" & Chr$(34) & " %1"
  CreateObject("WScript.Shell").Run "CMD /C FTYPE " & strFileType & "=" & strOpenCommand, 6, True
End Sub

Verwandte Codebeispiele

Dateitypen mit den definierten Öffnen-Befehlen auflisten

Neue Dateinamenerweiterung mit Dateitypzuordnung registrieren

Zugeordneter Dateityp einer Dateinamenerweiterung ermitteln

Dateinamenerweiterungen mit zugeordnetem Dateityp auflisten

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Dateitypen eines bestimmten Programmes auflisten

.Beschreibung
Dieses Codebeispiel erstellt eine Liste der Dateitypen, die mit einem bestimmten Programm geöffnet werden. Zu jedem Dateityp ist der entsprechende Öffnen-Befehl angegeben. Die Liste wird anhand von FTYPE generiert und in der Datei FType.txt gespeichert. Der Dateiinhalt wird anschliessend eingelesen, bezüglich des gesuchten Programmes ausgewertet und in ein neues Arbeitsblatt der aktiven Arbeitsmappe eingetragen.

Die Konstante Program enthält den Namen der exe-Datei des Programmes. Im Beispiel wird "excel.exe" verwendet.

Informationen über FTYPE erhalten Sie, indem Sie im Konsolenfenster/DOS-Fenster von Windows (aufrufen mit CMD) den Befehl "FTYPE /?" eingeben.

.VBA-Code
Public Sub ListFiletypesOfProgram()
  Dim strItem As String
  Dim intCounter As Integer
  Dim wksSheet As Worksheet
  Const DestFile As String = "C:\Daten\FType.txt"
  Const Program As String = "excel.exe"
  CreateObject("WScript.Shell").Run "CMD /C FTYPE >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  With wksSheet
    .Range("A1").Value = "Dateityp"
    .Range("B1").Value = "Öffnen-Befehl"
    .Range("A1:B1").Font.Bold = True
  End With
  intCounter = 1
  Open DestFile For Input As #1
    Do While Not EOF(1)
      Line Input #1, strItem
      If InStr(LCase$(strItem), LCase$(Program)) > 0 Then
        intCounter = intCounter + 1
        wksSheet.Cells(intCounter, 1).Value = Left$(strItem, InStr(strItem, "=") - 1)
        wksSheet.Cells(intCounter, 2).Value = Mid$(strItem, InStr(strItem, "=") + 1)
      End If
    Loop
  Close #1
  wksSheet.Range("A1:B1").EntireColumn.AutoFit
  Set wksSheet = Nothing
  Kill DestFile
End Sub

Verwandte Codebeispiele

Dateitypen mit den definierten Öffnen-Befehlen auflisten

Öffnen-Befehl eines Dateityps ändern

Neue Dateinamenerweiterung mit Dateitypzuordnung registrieren

Zugeordneter Dateityp einer Dateinamenerweiterung ermitteln

Dateinamenerweiterungen mit zugeordnetem Dateityp auflisten

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Unterordner eines Ordners als Verzeichnisbaum auflisten/darstellen

.Beschreibung
Neues Arbeitsblatt in die aktive Arbeitsmappe.

Schriftart "Courier New"

True bei Run bedeutet, dass die nächste Programmzeile erst dann ausgeführt wird, wenn der mit Run gestartete Prozess (CMD) beendet ist.

Der Schalter "/C" bewirkt, dass nach Ausführen des DOS-Befehls TREE der CMD-Prozess beendet bzw. das CMD-Fenster geschlossen wird.

Der Schalter "/A" von TREE bewirkt, dass der ASCII- statt des erweiterten Zeichensatzes verwendet wird.

.VBA-Code
Public Sub ShowDirectoryTree()
  Dim strItem As String
  Dim intCounter As Integer
  Dim wksSheet As Worksheet
  Const BaseFolder As String = "C:\Daten"
  Const DestFile As String = "C:\Tree.txt"
  ChDrive Left$(BaseFolder, 1)

  ChDir BaseFolder
  CreateObject("WScript.Shell").Run "CMD /C TREE /A >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Open DestFile For Input As #1
    Do While Not EOF(1)
      intCounter = intCounter + 1
      Input #1, strItem
      wksSheet.Cells(intCounter, 1).Value = strItem
    Loop
  Close #1
  wksSheet.Range("A1:A" & CStr(intCounter)).Font.Name = "Courier New"
  wksSheet.Range("A1").EntireColumn.AutoFit
  Set wksSheet = Nothing

  Kill DestFile
End Sub

Verwandte Codebeispiele

Dateien eines Ordners und allen Unterordnern als Verzeichnisbaum auflisten/darstellen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Dateien eines Ordners und allen Unterordnern als Verzeichnisbaum auflisten/darstellen

.Beschreibung
Neues Arbeitsblatt in die aktive Arbeitsmappe.

Schriftart "Courier New"

True bei Run bedeutet, dass die nächste Programmzeile erst dann ausgeführt wird, wenn der mit Run gestartete Prozess (CMD) beendet ist.

Der Schalter "/C" bewirkt, dass nach Ausführen des DOS-Befehls TREE der CMD-Prozess beendet bzw. das CMD-Fenster geschlossen wird.

Der Schalter "/A" von TREE bewirkt, dass der ASCII- statt des erweiterten Zeichensatzes verwendet wird.

Der Schalter "/F" von TREE bewirkt, dass der ASCII- statt des erweiterten Zeichensatzes verwendet wird.

.VBA-Code
Public Sub ShowDirectoryTreeWithFiles()
  Dim strItem As String
  Dim intCounter As Integer
  Dim wksSheet As Worksheet
  Const BaseFolder As String = "C:\Daten"
  Const DestFile As String = "C:\Tree.txt"
  ChDrive Left$(BaseFolder, 1)

  ChDir BaseFolder
  CreateObject("WScript.Shell").Run "CMD /C TREE /A /F >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Open DestFile For Input As #1
    Do While Not EOF(1)
      intCounter = intCounter + 1
      Input #1, strItem
      wksSheet.Cells(intCounter, 1).Value = strItem
    Loop
  Close #1
  wksSheet.Range("A1:A" & CStr(intCounter)).Font.Name = "Courier New"
  wksSheet.Range("A1").EntireColumn.AutoFit
  Set wksSheet = Nothing

  Kill DestFile
End Sub

Verwandte Codebeispiele

Unterordner eines Ordners als Verzeichnisbaum auflisten/darstellen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Datei-Verknüpfung im Favoriten-Ordner erstellen

.Beschreibung
Mit diesem Codebeispiel können Sie eine Verknüpfung mit einer beliebigen Datei Ihrem Favoriten-Ordner hinzufügen.

Der Pfad des Favoriten-Ordners wird anhand SpecialFolders ermittelt.

.VBA-Code
Public Sub CreateShortcutInFavorites()
  Dim strFavoritesFolder As String
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  strFavoritesFolder = objWSHShell.SpecialFolders("favorites")
  Set objWSHShortcut = objWSHShell.CreateShortcut(strFavoritesFolder & "\EineMappe.lnk")
  With objWSHShortcut
    .TargetPath = "C:\Daten\EineMappe.xls"
    .Description = "Verknüpfung mit Arbeitsmappe"
    .WorkingDirectory = "C:\Daten"
    .WindowStyle = 1     '1 = Normale Fenstergrösse
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

Verwandte Codebeispiele

Verknüpfung mit Arbeitsmappendatei zu Favoriten hinzufügen

Zu Favoriten hinzufügen-Dialog anzeigen

Dateien des Favoriten-Ordners auflisten

Pfad eines Spezialordners ermitteln

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Datei-Verknüpfung zu einer Programmdatei im Autostart-Ordner erstellen

.Beschreibung
Dieses Codebeispiel zeigt, wie Sie eine Verknüpfung zu einer Programmdatei in der Programmgruppe "Autostart" erstellen können. Diese Programmgruppe enthält die Dateien des Ordners "Autostart", welcher im Verzeichnis "Startmenü/Programme" des Profil-Verzeichnisses des Benutzers befindet. Der Verzeichnispfad des Autostart-Ordners wird anhand SpecialFolders des Shell-Objektes aus der Windows Script Host-Bibliothek ermittelt, indem das Element mit der Bezeichnung "startup" abgefragt wird. Die Datei-Verknüpfung wird mit der CreateShortcut-Methode angelegt.

Im Beispiel wird im Autostart-Ordner eine Verknüpfung "Programm.lnk" angelegt, welche das Ziel "C:\Programme\EinProgramm\Programm.exe" und das Arbeitsverzeichnis "C:\Daten" besitzt.

.VBA-Code
Public Sub CreateShortcutInAutostart()
  Dim strAutostartFolder As String
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  strAutostartFolder = objWSHShell.SpecialFolders("startup")
  Set objWSHShortcut = objWSHShell.CreateShortcut(strAutostartFolder & "\Programm.lnk")
  With objWSHShortcut
    .TargetPath = "C:\Programme\EinProgramm\Programm.exe"
    .Description = "Verknüpfung mit Programm"
    .WorkingDirectory = "C:\Daten"
    .WindowStyle = 1     '1 = Normale Fenstergrösse
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

Verwandte Codebeispiele

Verknüpfung mit Arbeitsmappendatei zu Favoriten hinzufügen

Datei-Verknüpfung im Favoriten-Ordner erstellen

Pfad eines Spezialordners ermitteln

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Internet-Verknüpfung erstellen

.Beschreibung
Eine Internet-Verknüpfung ist eine spezielle Datei-Verknüpfung, bei der das Verknüpfungsziel eine URL-Adresse ist. Internet-Verknüpfungsdateien besitzen die Dateinamenerweiterung "url".

» Codebeispiel #1: In diesem Beispiel wird eine Internet-Verknüpfung "Webseite.url" im Verzeichnis "C:\Daten" erstellt. Als URL wird "http://www.xlam.com" verwendet. Beachten Sie bitte, dass bei der Verknüpfungserstellung automatisch ein Backslash-Zeichen (\) an die URL angehängt wird. Wenn die Adresse ohne "http://" angegeben wird (z.B. "www.xlam.com"), dann wird "http://" automatisch hinzugefügt.

» Codebeispiel #2: ftp

» Codebeispiel #3: file (lokale Datei)

» Codebeispiel #4: file (lokales Verzeichnis)

.VBA-Code #1
Public Sub CreateURLShortcut1()
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut("C:\Daten\Webseite.url")
  With objWSHShortcut
    .TargetPath = "http://www.xlam.com"
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

.VBA-Code #2
Public Sub CreateURLShortcut2()
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut("C:\Daten\FTP.url")
  With objWSHShortcut
    .TargetPath = "ftp://195.186.84.74/files/muster.htm"
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

.VBA-Code #3
Public Sub CreateURLShortcut3()
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut("C:\Daten\FILE-Datei.url")
  With objWSHShortcut
    .TargetPath = "file:///C:/Daten/EineMappe.xls"
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

.VBA-Code #4
Public Sub CreateURLShortcut4()
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut("C:\Daten\FILE-Ordner.url")
  With objWSHShortcut
    .TargetPath = "file:///C:/Daten/Backup"
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

.Hinweis
Der bei CreateShortcut angegebene Dateiname muss bei Internet-Verknüpfungen zwingend die Dateinamenerweiterung "url" besitzen. Wenn Sie die Erweiterung "lnk" verwenden, wird eine gewöhnliche Datei-Verknüpfung erstellt. Wird eine andere Erweiterung als "url" oder "lnk" verwendet, tritt der Laufzeitfehler -2147352567 "Der Pfadname der Verknüpfung muss in .lnk oder .url enden." auf.

Verwandte Codebeispiele

E-Mail-Verknüpfung erstellen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


E-Mail-Verknüpfung erstellen

.Beschreibung
Eine E-Mail-Verknüpfung ist eine spezielle Internet-Verknüpfung, bei der die URL eine "mailto"-Adresse ist. E-Mail- bzw. Internet-Verknüpfungen besitzen immer die Dateinamenerweiterung "url".

» Codebeispiel #1: In diesem Beispiel wird eine Internet-Verknüpfung "Mail-Formular.url" im Verzeichnis "C:\Daten" erstellt. Als Ziel-URL wird die Mail-Adresse "philipp.von.wartburg@bluewin.ch" verwendet.

» Codebeispiel #2: Dieses Codebeispiel soll zeigen, wie man eine Internet-Verknüpfung mit einer Mail-Vorlage erstellen kann (beispielsweise für eine Support-Anfrage). Die Verknüpfungsdatei heisst "Support-Mail.url" und wird im Verzeichnis "C:\Daten" gespeichert. Als Ziel-URL wird bei diesem Beispiel eine längere Zeichenfolge verwendet, welche mehrere Informationen enthält, die im E-Mail-Formular vorgeblendet werden:
- Empfänger-Mail-Adresse "support@pc-help.com"
- Mail-Adressen zweier Kopie-Empfänger "itsupport@company.ch" und "management@company.ch"
- Mail-Adresse des Blindkopie-Empfängers, welche aus dem Login-Namen des angemeldeten Benutzers und "@company.ch" zusammengesetzt wird
- Betreff "Dringendes PC-Problem!"
- Mitteilungstext "Folgender Fehler ist aufgetreten:"

.VBA-Code #1
Public Sub CreateURLMailShortcut1()
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut("C:\Daten\Mail-Formular.url")
  With objWSHShortcut
    .TargetPath = "mailto:philipp.von.wartburg@bluewin.ch"
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

.VBA-Code #2
Public Sub CreateURLMailShortcut1()
  Dim strUserName As String
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  strUserName = CreateObject("WScript.Network").UserName
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut("C:\Daten\Support-Mail.url")
  With objWSHShortcut
    .TargetPath = "mailto:support@pc-help.com?cc=itsupport@company.ch,management@company.ch&bcc=" & strUserName & _

        "@company.ch&subject=Dringendes PC-Problem!&body=Folgender Fehler ist aufgetreten:"
    .Save
  End With
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

.Hinweis
Der bei CreateShortcut angegebene Dateiname muss bei Internet-Verknüpfungen zwingend die Dateinamenerweiterung "url" besitzen. Wenn Sie die Erweiterung "lnk" verwenden, wird eine gewöhnliche Datei-Verknüpfung erstellt. Wird eine andere Erweiterung als "url" oder "lnk" verwendet, tritt der Laufzeitfehler -2147352567 "Der Pfadname der Verknüpfung muss in .lnk oder .url enden." auf.

Verwandte Codebeispiele

Internet-Verknüpfung erstellen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Symbol einer Symbolleisten-Schaltfläche als Grafikdatei speichern

.Beschreibung
Speichert das Symbol einer Symbolleisten-Schaltfläche oder eines Menüelementes als Grafikdatei.

bmp, gif, jpg, jpeg, png

 

.VBA-Code
Public Sub ExportCommandBarButtonIcon()

End Sub

To Top


Arbeitsmappe alle x Minuten speichern

.Beschreibung
Beschreibung folgt.

Arbeitsmappe, in welcher sich der Programmcode befindet, wird immer nach Ablauf einer Minute gespeichert.

Mit der Prozedur StopSaveWorkbook wird der Intervall gestoppt.

Bevor die Arbeitsmappe geschlossen wird, muss die Prozedur StopSaveWorkbook ausgeführt werden.

.VBA-Code
'Deklarationsbereich
Private datTimer As Date

'Codemodul

Public Sub SaveWorkbook()
  ThisWorkbook.Save
  datTimer = Now + TimeValue("00:01:00")
  Application.OnTime datTimer, "SaveWorkbook"
End Sub

Public Sub StopSaveWorkbook()
  On Error Resume Next
  Application.OnTime datTimer, "SaveWorkbook", , False
End Sub

To Top


Arbeitblatt als Textdatei speichern

.Autor
Philipp von Wartburg, www.xlam.info

.VBA-Code
Public Sub SaveWorksheetAsText()

End Sub

To Top


Arbeitsbereich speichern

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub SaveWorkgroup1()
  Application.SaveWorkspace "C:\Daten\EinArbeitsbereich.xlw"
End Sub

.VBA-Code #2
Public Sub SaveWorkgroup2()
  Application.Save "C:\Daten\EinArbeitsbereich.xlw"
End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Zugriffsmodus einer geöffneten Datei abfragen

.Beschreibung
Beschreibung folgt.

 

Wert Zugriffsmodus
1 Input
2 Output
4 Random
8 Append
32 Binary

 

.VBA-Code
Public Sub GetFileMode()
  Open "C:\Daten\EineDatei.txt" For Input As #1

    MsgBox "Zugriffsmodus: " & FileAttr(1)
  Close #1
End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Dateien eines Ordners auflisten

.Beschreibung
Dieses Codebeispiel erstellt eine Liste der Dateien eines bestimmten Ordners. Aufgelistet werden die Dateinamen auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe. Dateien, die sich in einem Unterordner des Ordners befinden, werden nicht aufgeführt.

.VBA-Code
Public Sub ListFiles()
  Const Path As String = "C:\Dateien"

  Dim objFolder As Object
  Dim objFile As Object
  Dim wksSheet As Worksheet
  Dim intCounter As Integer
  Set objFolder = CreateObject("Scripting.FileSystemObject").GetFolder(Path)
  If objFolder.Files.Count = 0 Then
    Set objFolder = Nothing
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  For Each objFile In objFolder.Files
    intCounter = intCounter + 1
    wksSheet.Cells(intCounter, 1).Value = objFile.Name
  Next
  wksSheet.Range("A1").EntireColumn.AutoFit
  Set objFolder = Nothing
  Set wksSheet = Nothing
End Sub

Verwandte Codebeispiele

Aktuell bearbeitete Dateien eines Ordners auflisten

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Aktuell bearbeitete Dateien eines Ordners auflisten

.Beschreibung
Mit diesem Programmcode werden alle Dateien eines bestimmten Ordners aufgelistet, die momentan von einem (anderen) Benutzer oder Prozess geöffnet sind. Aufgelistet werden die Dateinamen auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe. Dateien, die sich in einem Unterordner des Ordners befinden, werden nicht berücksichtigt.

.VBA-Code
Public Sub ListLockedFiles()
  Const Path As String = "C:\Dateien"

  Dim objFolder As Object
  Dim objFile As Object
  Dim wksSheet As Worksheet
  Dim intCounter As Integer
  Set objFolder = CreateObject("Scripting.FileSystemObject").GetFolder(Path)
  If objFolder.Files.Count = 0 Then
    Set objFolder = Nothing
    Exit Sub
  End If
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  On Error Resume Next
  For Each objFile In objFolder.Files
    Open objFile.Path For Input Lock Read As #1
    Close #1
    If Err.Number = 70 Then
      Err.Clear
      intCounter = intCounter + 1
      wksSheet.Cells(intCounter, 1).Value = objFile.Name
    End If
  Next
  wksSheet.Range("A1").EntireColumn.AutoFit
  Set objFolder = Nothing
  Set wksSheet = Nothing
End Sub

Verwandte Codebeispiele

Dateien eines Ordners auflisten

Dateien eines Ordners und allen Unterordnern auflisten

Dateien eines gesamten Laufwerkes auflisten

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Dateien eines Ordners und allen Unterordnern auflisten

.Beschreibung
Dieses Beispiel listet alle Dateien auf, die sich in einem Ordner und den Unterordnern befinden. Die Liste wird auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe erstellt.

.VBA-Code
Public Sub ListFolderFiles()

End Sub

Verwandte Codebeispiele

Dateien eines Ordners auflisten

Aktuell bearbeitete Dateien eines Ordners auflisten

Dateien eines gesamten Laufwerkes auflisten

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Dateien eines gesamten Laufwerkes auflisten

.Beschreibung
Beschreibung folgt.

Listet die Dateien auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe auf.

Schriftgrösse 8 Pt wird angewendet.

Vier Spalten: Nummer, Datei, Ordner, Pfad

Die Konstante MaxFiles legt die Anzahl der aufzulistenden Dateien fest. Der Wert darf nicht grösser als 65'536 sein, weil ein Tabellenblatt maximal 65'536 Zeilen besitzt. Da auf der ersten Zeile die Spaltenüberschriften stehen, können maximal 65'535 Dateien aufgelistet werden.

Im Beispiel werden sämtliche Dateien des Laufwerkes "C:" aufgelistet (bzw. die ersten 65'535 gefundenen Dateien).

Mit der Prozedur ListFilesOfDrive wird die Liste erstellt.

 

.VBA-Code
'Deklarationsbereich
Private objFSO As Object
Private objFolder As Object
Private wksSheet As Worksheet

Private MaxFiles As Long = 65536

'Codemodul
Public Function FindFile(ByVal sFolder As String, ByVal sFile As String, nDirs As Long, nFiles As Long) As Long
  Dim objTFolder As Object
  Dim sFileName As String
  On Error GoTo ErrorHandler
  Set objFolder = objFSO.GetFolder(sFolder)
  sFileName = Dir(objFSO.BuildPath(objFolder.Path, sFile), vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
  nDirs = nDirs + 1
  While Len(sFileName) <> 0
    nFiles = nFiles + 1
    If nFiles < MaxFiles + 1 Then
      With wksSheet
        .Cells(nFiles + 1, 1).Value = nFiles
        .Cells(nFiles + 1, 2).Value = sFileName
        .Cells(nFiles + 1, 3).Value = objFolder.Path
        .Cells(nFiles + 1, 4).Value = objFSO.BuildPath(objFolder.Path, sFileName)
      End With
      sFileName = Dir()
    Else
      sFileName = ""
    End If
  Wend
  If objFolder.SubFolders.Count > 0 Then
    If nFiles < MaxFiles + 1 Then
      For Each objTFolder In objFolder.SubFolders
        FindFile = FindFile + FindFile(objTFolder.Path, sFile, nDirs, nFiles)
      Next
    End If
  End If
  Exit Function
ErrorHandler:
  sFileName = ""
  Resume Next
End Function

Sub ListFilesOfDrive()
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  With wksSheet
    .Cells.Font.Size = 8
    .Range("A1:D1").Value = Array("Nr.", "Datei", "Ordner", "Pfad")
    .Range("A1:D1").Font.Bold = True
  End With
  Application.ScreenUpdating = False
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  FindFile "C:\", "*.*", 0, 0
  wksSheet.Range("A1:D1").EntireColumn.AutoFit
  wksSheet.Range("A1").Sort Key1:=wksSheet.Range("C2"), Order1:=xlAscending, _
     Key2:=wksSheet.Range("B2"), Order2:=xlAscending, Header:=xlGuess
  Application.ScreenUpdating = True
  Set objFSO = Nothing
  Set wksSheet = Nothing
End Sub

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Prüfen, ob eine Arbeitsmappe ein Schreibschutzkennwort verwendet

.Beschreibung
Gibt WriteReserved Wahr (True) zurück, so besitzt die Arbeitsmappe ein Schreibschutzkennwort.

.VBA-Code
Public Sub HasWriteReservedPassword()
  MsgBox "Schreibschutzkennwort vorhanden: " & ActiveWorkbook.WriteReserved
End Sub

To Top


Benutzername der Schreibschutzkennwort-Zuweisung abfragen

.Beschreibung
Beschreibung folgt.

Wenn die Arbeitsmappe kein Schreibschutzkennwort besitzt, wird der Name des aktuellen Excel-Benutzers ausgegeben.

.VBA-Code
Public Sub GetWriteResPasswordUserName()
  MsgBox "Benutzername der Schreibschutzkennwort-Zuweisung: " & ActiveWorkbook.WriteReservedBy
End Sub

To Top


Prüfen, ob eine Arbeitsmappe die Schreibschutz-Empfehlung besitzt

.Beschreibung
Die ReadOnlyRecommended-Eigenschaft des Workbook-Objektes bestimmt, ob die Arbeitsmappe eine Schreibschutz-Empfehlung besitzt.

.VBA-Code
Public Sub CheckReadOnlyRecommended()
  MsgBox "Benutzername der Schreibschutzkennwort-Zuweisung: " & ActiveWorkbook.ReadOnlyRecommended
End Sub

To Top


Prüfen, ob eine Arbeitsmappe für die gemeinsame Bearbeitung freigegeben ist

.Beschreibung
Beschreibung folgt.

Wenn die MultiUserEditing-Eigenschaft Wahr (True) enthält, dann ist die Arbeitsmappe freigegeben.

Wenn die RevisionNumber-Eigenschaft eine Zahl grösser 0 enthält, dann ist die Arbeitsmappe freigegeben.

.VBA-Code #1
Public Sub CheckWorkbookSharing1()
  MsgBox "Arbeitsmappe freigegeben: " & ActiveWorkbook.MultiUserEditing
End Sub

.VBA-Code #2
Public Sub CheckWorkbookSharing2()
  If ActiveWorkbook.RevisionNumber > 0 Then
    MsgBox "Die Arbeitsmappe ist freigegeben."
  End If
End Sub

.Hinweis
Auch wenn die Abfrage von MultiUserEditing das Ergebnis Wahr (True) zurückgibt, muss dies nicht unbedingt bedeuten, dass Sie die freigegebene Arbeitsmappe tatsächlich bearbeiten (genauer gesagt speichern) können. Es kann nämlich sein, dass Sie nicht mehr mit der Arbeitsmappendatei verbunden sind (z.B. weil ein anderer Bearbeiter der Arbeitsmappe Sie aus der Liste der Bearbeiter entfernt hat). Es kann auch sein, dass die Arbeitsmappe inzwischen nicht mehr freigegeben ist (d.h. ein anderer Bearbeiter die Freigabe aufgehoben hat). Dies alles trifft auch auf die RevisionNumber-Eigenschaft zu.

Verwandte Codebeispiele

Arbeitsmappe für die gemeinsame Bearbeitung freigeben

Prüfen, ob eine geschlossene Arbeitsmappe freigegeben ist

To Top


Prüfen, ob das Betriebssystem vom Typ Windows NT/Windows 2000/Windows XP ist

.Beschreibung
Mit einer kleinen Programmroutine kann man überprüfen, ob das Betriebssystem (Windows) des Computers die NT-Architektur besitzt. Mit anderen Worten wird ermittelt, ob Windows NT, Windows 2000 beziehungsweise Windows XP eingesetzt wird.

Bei den 32-Bit Windows-Versionen existieren zwei verschiedene Architekturen: Die Windows 95- und die Windows NT-Architektur. Die Windows 95-Architektur wird von Windows 95, Windows 98 und Windows ME verwendet. Die Windows NT-Architektur von Windows NT 4.0, Windows 2000 und Windows XP (und vermutlich auch Windows Server 2003). Die Kenntnis der vorhandenen Windows-Architektur ist immer dann wichtig, wenn vorwiegend systemnahe Aktionen durchgeführt werden sollen, zum Beispiel wenn man wissen möchte, ob das Betriebssystem grundsätzlich Benutzer-Berechtigung unterstützt, wenn man den Status einer Taste abfragen oder wenn man ein Tastatur-Ereignis auslösen möchte.

.VBA-Code
'Deklarationsbereich
Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type
Const VER_PLATFORM_WIN32_NT As Long = 2
Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

'Codemodul
Function IsOSTypeNT() As Boolean
  Dim OSVer As OSVERSIONINFO
  OSVer.dwOSVersionInfoSize = Len(OSVer)
  GetVersionEx OSVer
  IsOSTypeNT = (OSVer.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

'*** Aufruf ***
Sub TestCall()
  If IsOSTypeNT() Then
    MsgBox "Das Betriebssystem ist vom Typ Windows NT."
  Else
    MsgBox "Das Betriebssystem ist nicht vom Typ Windows NT."

  End If
End Sub

Verwandte Codebeispiele

Prüfen, ob das Betriebssystem Datei-/Verzeichnis-Berechtigungen unterstützt

Prüfen, ob ein Laufwerk Datei-/Verzeichnis-Berechtigungen unterstützt

To Top


Datei-Grösse abfragen

.Beschreibung
Die Grösse einer Datei wird am einfachsten mit der FileLen-Funktion von VBA abgefragt.

Ermittelt die Grösse einer Datei in Bytes.

.VBA-Code #1
Public Sub GetFileSize1()
  MsgBox "Dateigrösse: " & FileLen("C:\Daten\EineMappe.xls")
End Sub

.VBA-Code #2
Public Sub GetFileSize2()
  MsgBox "Dateigrösse: " & Format$(FileLen("C:\Daten\EineMappe.xls"), "#,##0")
End Sub

Verwandte Codebeispiele

Datei-Grösse einer geöffneten Datei abfragen

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Datei-Grösse einer geöffneten Datei abfragen

.Beschreibung
Beschreibung folgt.

Ermittelt die Grösse einer Datei in Bytes.

Achtung: Das Abfragen von LOF() schreibt den Inhalt des Buffer in die Datei!

.VBA-Code #1
Public Sub GetFileSize1()
  Open "C:\Daten\EineDatei.txt" For Input As #1
    MsgBox "Dateigrösse: " & LOF(1)
  Close #1
End Sub

.VBA-Code #2
Public Sub GetFileSize2()
  Open "C:\Daten\EineDatei.txt" For Append As #1
    MsgBox "Dateigrösse: " & LOF(1)
    Print #1, "0123456789"
    MsgBox "Dateigrösse: " & LOF(1)
  Close #1
End Sub

Verwandte Codebeispiele

Datei-Grösse abfragen

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Daten in eine Datei schreiben ohne die Datei zu schliessen

.Beschreibung
...

Trick: LOF() abfragen.

.VBA-Code
Public Sub WriteToFile()

End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Prüfen, ob eine freigegebene Arbeitsmappe gerade von einem anderen Benutzer bearbeitet wird

.Beschreibung
Beschreibung folgt.

Geht nur bei Arbeitsmappen, die für die gemeinsame Bearbeitung freigegeben sind.

.VBA-Code
Public Sub CheckOtherUserEditing()
  If UBound(ActiveWorkbook.UserStatus) > 1 Then
    MsgBox "Die Arbeitsmappe wird zur Zeit noch von einem anderen Benutzer bearbeitet."
  End If
End Sub

To Top


Laufende Windows-Tasks auflisten

.Beschreibung
Mit dieser Prozedur werden die Namen aller momentan ausgeführten Tasks im Direktfenster des VBA-Editors aufgelistet. Die Liste enthält sämtliche Tasks, also auch solche, die Sie als Benutzer nicht sehen (und kennen), wie beispielsweise "OleMainThreadWndName", "OLEChannelWnd" oder "DDE Server Window". Wenn Sie nur die Tasks möchten, die eine laufende Anwendung darstellen, müssen Sie die Visible-Eigenschaft des Tasks abfragen (siehe Codebeispiel Sichtbare Anwendungstasks auflisten).

.VBA-Code
Public Sub ListTasks()
  Dim intCounter As Integer
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  For intCounter = 1 To objWord.Tasks.Count
    Debug.Print intCounter & ": " & objWord.Tasks(intCounter).Name
  Next intCounter
  objWord.Quit
  Set objWord = Nothing
End Sub

Verwandte Codebeispiele

Sichtbare Anwendungstasks auflisten

To Top


Sichtbare Anwendungstasks auflisten

.Beschreibung
Dieses Beispiel zeigt, wie die Namen derjenigen momentan ausgeführten Tasks herausgefunden werden können, welche für eine Anwendung stehen. Die Namen werden im Direktfenster des VBA-Editors aufgelistet. Wenn man die Abfrage von "If objWord.Tasks(intCounter).Visible = True" weglässt, erhält man alle laufenden Windows-Tasks.

.VBA-Code
Public Sub ListVisibleTasks()
  Dim intCounter As Integer
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  For intCounter = 1 To objWord.Tasks.Count
    If objWord.Tasks(intCounter).Visible = True Then
      Debug.Print intCounter & ": " & objWord.Tasks(intCounter).Name
    End If
  Next intCounter
  objWord.Quit
  Set objWord = Nothing
End Sub

Verwandte Codebeispiele

Laufende Windows-Tasks auflisten

To Top


Laufende Microsoft Excel-Anwendungen auflisten

.Beschreibung
...

.VBA-Code
'Deklarationsbereich
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName _
   As String, ByVal lpWindowName As String) As Long
Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hWnd As Long, _

   ByVal wFlag As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, _

   ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Const GW_HWNDNEXT = 2

'Codemodul
Public Sub ListExcelTasks()
  Dim hWnd As Long
  Dim lRet As Long
  Dim sClassBuffer As String
  hWnd = FindWindow("XLMAIN", vbNullString)
  If hWnd <> 0 Then
    Debug.Print hWnd
    Do
      hWnd = GetNextWindow(hWnd, GW_HWNDNEXT)
      If hWnd = 0 Then
        Exit Do
      End If
      sClassBuffer = String(255, 0)
      lRet = GetClassName(hWnd, sClassBuffer, Len(sClassBuffer))
      sClassBuffer = Left(sClassBuffer, InStr(1, sClassBuffer, Chr(0), vbTextCompare) - 1)
      If UCase(sClassBuffer) = "XLMAIN" Then
        Debug.Print hWnd
      End If
    Loop
  End If
End Sub

Verwandte Codebeispiele

Laufende Windows-Tasks auflisten

Sichtbare Anwendungstasks auflisten

Laufende Instanzen einer anderen Anwendung auflisten

To Top


Prüfen, ob ein Windows-Task ausgeführt wird

.Beschreibung
Wenn Sie herausfinden möchten, ob ein bestimmter Task gerade ausgeführt wird, können Sie die Exists-Methode der Tasks-Auflistung aus der Microsoft Word-Objektbibliothek zu Hilfe nehmen.

Bitte beachten Sie, dass ein Mustervergleich vorgenommen wird. Wenn ein Task gefunden wird, dessen Name mit der bei Exists angegebenen Bezeichnung beginnt oder vollständig übereinstimmt, wird Wahr (True) zurückgegeben. Für das nachstehende Beispiel bedeutet dies, dass auch dann die Meldung "Microsoft Excel wird ausgeführt." ausgegeben wird, wenn die Anwendung Excel nicht läuft, aber die Hilfe/Referenz von Excel geöffnet ist, weil deren Fenster ebenfalls mit der Zeichenfolge "Microsoft Excel" beginnt.

.VBA-Code
Public Sub CheckIfTaskExists()
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  If objWord.Tasks.Exists("Microsoft Excel") = True Then
    MsgBox "Microsoft Excel wird ausgeführt."
  End If
  objWord.Quit
  Set objWord = Nothing
End Sub

Verwandte Codebeispiele

Laufende Windows-Tasks auflisten

Sichtbare Anwendungstasks auflisten

Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

To Top


Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

.Beschreibung
Mit der API-Funktion FindWindow kann man den Fenster-Handle (Window Handle; Hwnd) eines beliebigen Fensters herausfinden. Häufig wird der Handle des Fensters einer laufenden Windows-Anwendung benötigt, damit man dem Fenster eine Nachricht schicken kann (z.B. Fenster schliessen oder Fenstergrösse ändern). Auch wenn man beispielsweise einen Windows-Dialog anzeigen möchte, muss man oft den Handle des so genannten Parent Window angeben.

Es kann auch der Fenster-Handle eines VBA-Benutzerformulares ermittelt werden.

Bitte beachten Sie, dass bei FindWindow der exakte Fenstername angegeben werden muss.

Wenn es mehrere Fenster gibt, die den gleichen Fensternamen besitzen, so wird gewöhnlich der Fenster-Handle desjenigen Fensters zurückgegeben, dessen Anwendung zuletzt gestartet wurde.

Im folgenden Beispiel wird der Fenster-Handle des Windows-Taschenrechners abgefragt.

.VBA-Code
'Deklarationsbereich
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long

'Codemodul
Public Sub GetWindowHandle()
  Dim lngHwnd As Long
  lngHwnd = FindWindow(vbNullString, "Rechner")
  If lngHwnd <> 0 Then

    MsgBox "Fenster-Handle von Rechner: " & lngHwnd
  End If
End Sub

Tipp! Tipp!
Mit dem Utility "Windows-Analyzer" erhalten Sie komfortabel jegliche Window Handles und Class Names beliebiger Fenster und Objekte. Das Tool ist Freeware und kann auf der Downloadseite heruntergeladen werden.

.Hinweis
Den Fenster-Handle des VBA-Editors erhalten Sie auch ohne die FindWindow-API-Funktion, nämlich ganz einfach mit
  MsgBox Application.VBE.MainWindow.hWnd

Verwandte Codebeispiele

Fenster-Handle (hwnd) eines Fensters anhand ClassName ermitteln

Fenster-Handle (hwnd) der aktuellen Excel-Sitzung ermitteln

Fenster-Handle (hwnd) des aktiven Fensters ermitteln

Fenster-Handle (hwnd) des Windows Desktop ermitteln

To Top


Fenster-Handle (hwnd) des aktiven Fensters ermitteln

.Beschreibung
...

.VBA-Code
'Deklarationsbereich
Declare Function GetForegroundWindow Lib "user32.dll" () As Long

'Codemodul
Public Sub GetActiveWindowHandle()
  MsgBox "Fenster-Handle: " & GetForegroundWindow

End Sub

Verwandte Codebeispiele

Fenster-Handle (hwnd) der aktuellen Excel-Sitzung ermitteln

Fenster-Handle (hwnd) des Windows Desktop ermitteln

Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

To Top


Fenster-Handle (hwnd) des Windows Desktop ermitteln

.Beschreibung
...

 

ClassName "progman" oder WindowName "program manager"

.VBA-Code #1
'Deklarationsbereich
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal _
   lpClassName As String, ByVal lpWindowName As String) As Long

'Codemodul
Public Sub GetDesktopHandle1()
  MsgBox FindWindow("progman", vbNullString)

End Sub

.VBA-Code #2
'Deklarationsbereich
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal _
   lpClassName As String, ByVal lpWindowName As String) As Long

'Codemodul
Public Sub GetDesktopHandle2()
  MsgBox FindWindow(vbNullString, "program manager")

End Sub

.VBA-Code #3
'Deklarationsbereich
Declare Function GetDesktopWindow Lib "user32.dll" () As Long

'Codemodul
Public Sub GetDesktopHandle3()
  MsgBox GetDesktopWindow()

End Sub

Verwandte Codebeispiele

Fenster-Handle (hwnd) des aktiven Fensters ermitteln

Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

To Top


Fenster-Handle (hwnd) des VBA-Editors ermitteln

.Beschreibung
...

.VBA-Code
Public Sub GetVBEWindowHandle()
  MsgBox Application.VBE.MainWindow.hWnd

End Sub

Verwandte Codebeispiele

Fenster-Handle (hwnd) des aktiven Fensters ermitteln

Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

To Top


Fenster-Handle (hwnd) eines Benutzerformulares ermitteln

.Beschreibung
...

.VBA-Code
Public Sub GetUserFormWindowHandle()

End Sub

Verwandte Codebeispiele

Fenster-Handle (hwnd) des aktiven Fensters ermitteln

Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

To Top


Fenster-Handle (hwnd) der aktuellen Excel-Sitzung ermitteln

.Beschreibung
...

.VBA-Code
'Deklarationsbereich
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal _
   lpClassName As String, ByVal lpWindowName As String) As Long

Public Sub GetExcelWindowHandle()
  MsgBox FindWindow("xlmain", Application.Caption)

End Sub

Verwandte Codebeispiele

Fenster-Handle (hwnd) des aktiven Fensters ermitteln

Fenster-Handle (hwnd) einer laufenden Anwendung ermitteln

To Top


ClassName zu einem Fenster-Handle (hwnd) ermitteln

.Beschreibung
...

Man hat den Fenstertitel oder den Fenster-Handle und möchte nun herausfinden, zu welcher Anwendung das Fenster gehört.

.VBA-Code
Public Sub GetClassName()
Dim hWnd As Long
Dim lRet As Long
Dim sClass As String
hWnd = FindWindow(vbNullString, "Rechner")
If hWnd <> 0 Then
sClass = String(255, 0)
lRet = GetClassName(hWnd, sClass, Len(sClass))
sClass = Left(sClass, InStr(1, sClass, Chr(0), vbTextCompare) - 1)
Debug.Print hWnd, sClass
End If
End Sub

To Top


Fenster einer anderen Anwendung verschieben

.Beschreibung
Die einfachste Variante, das Fenster einer anderen Anwendung zu verschieben, stellt die Move-Methode des Task-Objektes aus der Microsoft Word Objektbibliothek dar. Microsoft Excel bietet kein derartiges Objekt bzw. keine derartige Methode. Das Gute an dieser Lösung ist, dass nicht einmal der genaue Name des Anwendungtasks bekannt sein muss. Es genügt, den Anfang des Fenstertitels anzugeben.

» Das Codebeispiel #1 muss unter Microsoft Word ausgeführt werden (d.h. in einem VBA-Projekt eines Word-Dokumentes).

» Das Beispiel #2 zeigt die Lösung mittels Automation. Dieser Code kann in einem beliebigen Office-Programm oder auch in einem Visual Basic-Programm ausgeführt werden.

.VBA-Code #1
Public Sub MoveWindow1()
  Application.Tasks("Rechner").Move 50, 100    'Links, Oben
End Sub

.VBA-Code #2
Public Sub MoveWindow2()
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  objWord.Tasks("Rechner").Move 50, 100    'Links, Oben

  objWord.Quit
  Set objWord = Nothing
End Sub

To Top


Fenster einer anderen Anwendung ausblenden

.Beschreibung
Anhand der Visible-Eigenschaft des Task-Objektes aus der Microsoft Word-Objektbibliothek kann man ein beliebiges Anwendungsfenster ausblenden - und natürlich auch wieder einblenden. Der genaue Name des Anwendungtasks muss nicht bekannt sein. Es genügt, den Anfang des Fenstertitels anzugeben.

Das Einblenden eines sichtbaren Fensters bzw. das Ausblenden eines ausgeblendeten Fensters erzeugt keine Fehlermeldung.

» Das Codebeispiel #1 muss unter Microsoft Word ausgeführt werden (d.h. in einem VBA-Projekt eines Word-Dokumentes).

» Das Beispiel #2 zeigt die Lösung mittels Automation. Dieser Code kann in einem beliebigen Office-Programm oder auch in einem Visual Basic-Programm ausgeführt werden.

» Codebeispiel #3: Anwendungsfenster einblenden (in einem Word VBA-Projekt).

» Codebeispiel #4: Anwendungsfenster einblenden.

.VBA-Code #1
Public Sub HideWindow1()
  Application.Tasks("Rechner").Visible = False
End Sub

.VBA-Code #2
Public Sub HideWindow2()
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  objWord.Tasks("Rechner").Visible = False

  objWord.Quit
  Set objWord = Nothing
End Sub

.VBA-Code #3
Public Sub ShowWindow3()
  Application.Tasks("Rechner").Visible = True
End Sub

.VBA-Code #4
Public Sub ShowWindow4()
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  objWord.Tasks("Rechner").Visible = True

  objWord.Quit
  Set objWord = Nothing
End Sub

To Top


Alle Anwendungsfenster minimieren

.Beschreibung
Mit diesem Programmcode werden die Fenster der laufenden Anwendungen minimiert.

.VBA-Code
Public Sub MinimizeWindows()
  Dim intCounter As Integer
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  For intCounter = 1 To objWord.Tasks.Count
    If objWord.Tasks(intCounter).Visible = True Then
      objWord.Tasks(intCounter).WindowState = 2
    End If
  Next intCounter
  objWord.Quit
  Set objWord = Nothing
End Sub

To Top


Fenster einer laufenden Anwendung aktivieren

.Beschreibung
...

scicalc ist der ClassName des Windows Taschenrechners.

.VBA-Code
'Deklarationsbereich
Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
   lpClassName As String, ByVal lpWindowName As String) As Long

'Codemodul
Public Sub ActivateWindow()
  SetForegroundWindow FindWindow("scicalc", vbNullString)
End Sub

To Top


Mehrere Textdateien zu einer Datei zusammenführen

.Beschreibung
Wenn Sie die Inhalte von mehreren Textdateien in einer einzigen Datei zusammenfassen möchten, so benutzen Sie am besten den alten COPY-Befehl von MS DOS. Dieser erlaubt die Verwendung des Plus-Zeichens (+) zum Angeben mehrerer Quelldateien.

Bitte beachten Sie folgende Punkte:
- Die Dateiinhalte werden in der Reihenfolge der Quelldateien zusammengeführt.
- Der Schalter "/B" muss vor jeder Quelldatei stehen, damit das binäre Kopierverfahren verwendet wird.
- Die Quelldateien dürfen nicht versteckt sein. Ist eine Quelldatei versteckt, wird sie einfach übergangen. Es tritt keine Fehlermeldung auf.
- Eine vorhandene, gleichnamige Zieldatei wird automatisch überschrieben.

» Codebeispiel #1: Bevor Shell ausgeführt wird, wird mittels ChDrive und ChDir zu demjenigen Verzeichnis gewechselt, in welchem sich die Dateien befinden (im Beispiel "C:\Daten").

» Codebeispiel #2: Die drei Quelldateien werden anhand von relativen Pfadangaben bestimmt. Die Zieldatei befindet sich im Ordner "D:\Neu".

.VBA-Code #1
Public Sub CopyFilesTogether1()
  ChDrive "C:\Daten"
  ChDir "C:\Daten"
  Shell "CMD /C COPY /B Quelldatei1.txt /B +Quelldatei2.txt Zieldatei.txt", vbMinimizedNoFocus
End Sub

.VBA-Code #2
Public Sub CopyFilesTogether2()
  Shell "CMD /C COPY /B ..\Quelldatei1.txt /B +Backup\Quelldatei2.txt /B +Quelldatei3.txt D:\Neu\Zieldatei.txt", vbMinimizedNoFocus
End Sub

.Hinweis
Die Syntax des COPY-Befehls erfahren Sie, wenn Sie im Konsolenfenster "COPY /?" eingeben. Das Konsolenfenster wird mit "CMD" geöffnet.

To Top


Prüfen, ob die in einem Hyperlink angegebene Datei existiert

.Beschreibung
Beschreibung folgt.

Der Hyperlink der aktiven Zelle wird überprüft.

UNC-Pfade werden nicht überprüft, ebenso auch keine Internet-Adressen (URLs wie http:, ftp:, file:, mailto: etc.).

Es werden absolute und relative Pfadangaben verarbeitet.

Die Hyperlink-Basis der Arbeitsmappe wird berücksichtigt.

Bei einem relativen Pfad wird der entsprechende absolute Pfad ausgegeben.

 

.VBA-Code
Public Sub CheckFileInHyperlink()
  Dim strPath As String
  ChDrive Left$(ActiveWorkbook.Path, 1)
  ChDir ActiveWorkbook.Path
  strPath = ActiveWorkbook.BuiltinDocumentProperties("Hyperlink base").Value
  If strPath <> "" Then
    If Dir(strPath, vbDirectory) = "" Then
      MsgBox "Das als Hyperlink-Basis eingetragene Verzeichnis existiert nicht.", vbInformation
      Exit Sub
    End If
  Else
    strPath = CurDir
  End If
  If ActiveCell.Hyperlinks.Count > 0 Then
    With ActiveCell.Hyperlinks(1)
      If Mid$(.Address, 2, 2) = ":\" Then
        If Dir(.Address, vbHidden) <> "" Then
          MsgBox "Datei in Hyperlink existiert (absoluter Pfad)." & vbCrLf & vbCrLf & "Link: " & Chr$(9) & .Name & vbCrLf & "Datei: " & Chr$(9) & Dir(.Address, vbHidden) & vbCrLf & "Pfad: " & Chr$(9) & .Address, vbInformation
        Else
          MsgBox "Datei in Hyperlink existiert nicht (absoluter Pfad)." & vbCrLf & vbCrLf & "Link: " & Chr$(9) & .Name & vbCrLf & "Pfad: " & Chr$(9) & .Address, vbInformation
        End If
      ElseIf Left$(.Address, 3) = "..\" Then
        If Dir(.Address, vbHidden) <> "" Then
          MsgBox "Datei in Hyperlink existiert (relativer Pfad)." & vbCrLf & vbCrLf & "Link: " & Chr$(9) & .Name & vbCrLf & "Datei: " & Chr$(9) & Dir(.Address, vbHidden) & vbCrLf & "Pfad: " & Chr$(9) & CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(strPath & "\" & .Address), vbInformation
        Else
          MsgBox "Datei in Hyperlink existiert nicht (relativer Pfad)." & vbCrLf & vbCrLf & "Link: " & Chr$(9) & .Name & vbCrLf & "Pfad: " & Chr$(9) & CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(strPath & "\" & .Address), vbInformation
        End If
      ElseIf .SubAddress = "" Then
        If Dir(strPath & "\" & .Address, vbHidden) <> "" Then
          MsgBox "Datei in Hyperlink existiert (relativer Pfad)." & vbCrLf & vbCrLf & "Link: " & Chr$(9) & .Name & vbCrLf & "Datei: " & Chr$(9) & Dir(.Address, vbHidden) & vbCrLf & "Pfad: " & Chr$(9) & strPath & "\" & .Address, vbInformation
        Else
          MsgBox "Datei in Hyperlink existiert nicht (relativer Pfad)." & vbCrLf & vbCrLf & "Link: " & Chr$(9) & .Name & vbCrLf & "Pfad: " & Chr$(9) & strPath & "\" & .Address, vbInformation
        End If
      Else
        MsgBox "Der Hyperlink '" & .Name & "' enthält keine Dateiangabe oder einen UNC-Pfad.", vbInformation
      End If
    End With
  Else
    MsgBox "Die markierte Zelle enthält keinen Hyperlink.", vbInformation
  End If
End Sub

To Top


Dateien in Hyperlinks auflisten und ihre Existenz prüfen

.Beschreibung
Beschreibung folgt.

Hyperlinks der gesamten Arbeitsmappe werden überprüft.

URLs werden nicht berücksichtigt (Adressen wie HTTP, FTP, FILE, MAILTO etc.)

UNC-Pfade werden nicht berücksichtigt

 

.VBA-Code
Public Sub ListAndCheckFilesInHyperlinks()
  Dim objLink As Hyperlink
  Dim wksSheet As Worksheet
  Dim wkbWorkbook As Workbook
  Dim wksWorksheet As Worksheet
  Dim lngLinks As Long
  ChDrive Left$(ThisWorkbook.Path, 1)
  ChDir ThisWorkbook.Path
  Set wkbWorkbook = Application.Workbooks.Add(Template:=xlWBATWorksheet)
  Set wksWorksheet = wkbWorkbook.Worksheets(1)
  With wksWorksheet
    .Range("A1").Value = "Hyperlink"
    .Range("B1").Value = "Datei"
    .Range("C1").Value = "Vorhanden"
    .Range("A1:C1").Font.Bold = True
  End With
  For Each wksSheet In ThisWorkbook.Worksheets
    For Each objLink In wksSheet.Hyperlinks
      If Left$(objLink.Address, 3) = "..\" Or Mid$(objLink.Address, 2, 2) = ":\" Or objLink.SubAddress = "" Then
        lngLinks = lngLinks + 1
        With wksWorksheet
          .Cells(lngLinks + 1, 1).Value = objLink.Name
          .Cells(lngLinks + 1, 2).Value = objLink.Address
          If Dir(objLink.Address, vbHidden) = "" Then
            .Cells(lngLinks + 1, 3).Value = "Ja"
          Else
            .Cells(lngLinks + 1, 3).Value = "Nein"
          End If
        End With
      End If
    Next
  Next
  wksWorksheet.Columns("A:C").AutoFit
  Set wksWorksheet = Nothing
  Set wkbWorkbook = Nothing
End Sub

To Top


Prüfen, ob der Hyperlink einer Zelle einen absoluten oder relativen Pfad verwendet

.Beschreibung
Beschreibung folgt.

Hyperlinks, die einen UNC-Pfad verwenden, können nicht überprüft werden.

 

.VBA-Code
Public Sub CheckHyperlinkPath()

End Sub

To Top


Datei in Hyperlink als Verknüpfung zu Favoriten hinzufügen

.Beschreibung
Beschreibung folgt.

Es ist ganz einfach, den in einer Arbeitsblattzelle stehenden Hyperlink als Verknüpfung zu den Favoriten hinzuzufügen.

Der Nachteil ist, dass die neue Verknüpfung im Basis-Ordner der Favoriten angelegt wird. Es ist nicht möglich, die Verknüpfung in einem Unterordner des Favoriten-Ordners zu erstellen.

Internetverknüpfung (Dateinamenerweiterung "url")

Hyperlink mit Exceldatei: Als Linkname wird nur der Dateiname verwendet, auch wenn der Hyperlink einen Dateipfad enthält. Der Link wird mit der Zieladresse "file:///" gefolgt vom vollständigen Dateinamen (Laufwerk/Verzeichnisse/Datei) aufgenommen. Das Symbol ist dasjenige einer Exceldatei.

Hyperlink mit URL: Als Linkname wird der gesamte Hyperlinkname verwendet, wobei er automatisch in runde Klammern eingefasst wird. Die Zieladresse entspricht dem Hyperlinknamen. Das Symbol ist dasjenige einer Webseite.

Wenn in den Favoriten bereits ein gleichnamiger Link vorhanden ist, so wird dieser automatisch überschrieben - auch wenn die Zieladresse unterschiedlich ist.

 

.VBA-Code
Public Sub AddHyperlinkToFavorites()
  ActiveCell.Hyperlinks(1).AddToFavorites
End Sub

Verwandte Codebeispiele

Verknüpfung mit Arbeitsmappendatei zu Favoriten hinzufügen

Datei-Verknüpfung im Favoriten-Ordner erstellen

To Top


Verknüpfung mit einer Arbeitsmappe zur Links-Symbolleiste des Internet Explorers hinzufügen

.Beschreibung
Beschreibung folgt.

Die Steuerelement-ID 1022 repräsentiert der Menübefehl "Zu Favoriten hinzufügen" der Symbolleiste "Web", über den der "Zu Favoriten hinzufügen"-Dialog geöffnet wird.

Es wird die gerade aktive Arbeitsmappe verwendet.

Da der "Links"-Ordner auch einen anderen, frei wählbaren Namen besitzen darf, muss der Ordnername aus der Windows Registry geholt. Er ist im Eintrag "LinksFolderName" des Schlüssels "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\LinksFolderName" abgelegt.

 

.VBA-Code
Public Sub AddWorkbookToLinksToolbar()
  Dim strLinksFolder As String
  Dim strFavoritesFolder As String
  Dim objWSHShell As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  strFavoritesFolder = objWSHShell.SpecialFolders("favorites")
  strLinksFolder = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\LinksFolderName")
  Set objWSHShell = Nothing
  If strLinksFolder = "" Then
    strLinksFolder = "Links"
  End If
  If Dir(strFavoritesFolder & "\" & strLinksFolder, vbDirectory) <> "" Then
    If Dir(strFavoritesFolder & "\" & strLinksFolder & "\" & ActiveWorkbook.Name & ".url") = "" Then
      SendKeys strLinksFolder & "\" & ActiveWorkbook.Name & ".url{enter}"
      Application.CommandBars.FindControl(Id:=1022).Execute
    Else
      MsgBox "Das Verzeichnis '" & strFavoritesFolder & "\" & strLinksFolder & "' enthält bereits einen Link " & ActiveWorkbook.Name & "!", vbExclamation
    End If
  Else
    MsgBox "Das Verzeichnis '" & strFavoritesFolder & "\" & strLinksFolder & "' konnte nicht gefunden werden!", vbExclamation
  End If
End Sub

Verwandte Codebeispiele

Verknüpfung mit Arbeitsmappendatei zu Favoriten hinzufügen

Datei-Verknüpfung im Favoriten-Ordner erstellen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Verknüpfung auf der Links-Symbolleiste des Internet Explorers löschen

.Beschreibung
Beschreibung folgt.

 

.VBA-Code
Public Sub DeleteLinkOfIELinksToolbar()
  Const strLinkToDelete As String = "WSH_Runtime-Test.xls"
  Dim strLinksFolder As String
  Dim strFavoritesFolder As String
  Dim objWSHShell As Object
  Set objWSHShell = CreateObject("WScript.Shell")
  strFavoritesFolder = objWSHShell.SpecialFolders("favorites")
  strLinksFolder = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\LinksFolderName")
  Set objWSHShell = Nothing
  If strLinksFolder = "" Then
    strLinksFolder = "Links"
  End If
  If Dir(strFavoritesFolder & "\" & strLinksFolder, vbDirectory) <> "" Then
    If Dir(strFavoritesFolder & "\" & strLinksFolder & "\" & strLinkToDelete & ".url") <> "" Then
      Kill strFavoritesFolder & "\" & strLinksFolder & "\" & strLinkToDelete & ".url"
    Else
      MsgBox "Der Link '" & strLinkToDelete & "' konnte nicht gefunden werden!", vbExclamation
    End If
  Else
    MsgBox "Das Verzeichnis '" & strFavoritesFolder & "\" & strLinksFolder & "' konnte nicht gefunden werden!", vbExclamation
  End If
End Sub

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Datei-Hyperlink auf einem Arbeitsblatt erstellen

.Beschreibung
Beschreibung folgt.

Ab Excel 2000 wurde die Add-Methode erweitert.

Hyperlinks-Auflistung des Range- oder des Worksheet-Objektes.

 

.VBA-Code #1
Public Sub AddHyperlinkToSheet1()
  ActiveCell.Hyperlinks.Add Anchor:=ActiveCell, Address:="C:\Daten\AndereMappe.xls"
End Sub

.VBA-Code #2
Public Sub AddHyperlinkToSheet2()
  ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:="C:\Daten\AndereMappe.xls"
End Sub

To Top


Internet-Hyperlink auf einem Arbeitsblatt erstellen

.Beschreibung
Beschreibung folgt.

Ab Excel 2000 wurde die Add-Methode erweitert.

Hyperlinks-Auflistung des Range- oder des Worksheet-Objektes.

TODO: Programmcode

 

.VBA-Code #1
Public Sub AddHyperlinkToSheet1()

End Sub

.VBA-Code #2
Public Sub AddHyperlinkToSheet2()

End Sub

To Top


Hyperlink-Basis-Verzeichnis einer Arbeitsmappe ändern

.Beschreibung
Mit der so genannten Hyperlink-Basis kann man ein Verzeichnis festlegen, welches als Basis für alle relativen Pfade von Hyperlinks in einer Arbeitsmappe verwendet wird. In Microsoft Excel wird die Hyperlink-Basis im Eigenschaften-Dialogfenster der Arbeitsmappe (Menü Datei/Eigenschaften) festgelegt. In einem VBA-Programm erreicht man diese Einstellung über die BuiltInDocumentProperties-Auflistung des Workbook-Objektes anhand des Bezeichners "Hyperlink base".

» Im Codebeispiel #1 wird die Hyperlink-Basis der aktiven Arbeitsmappe auf Verzeichnis "C:\Daten" eingestellt.

» Beim Codebeispiel #2 wird eine Internet-Adresse (URL) als Basis verwendet. Hierbei ist zu beachten, dass man die Adresse immer mit vorangestelltem "http://" einträgt, also zum Beispiel "http://www.xlam.info". Anderenfalls erkennt Excel die Angabe nicht als gültige Internet-Adresse.

» Das Codebeispiel #3 zeigt, wie man die Hyperlink-Basis löscht.

Bitte beachten Sie, dass auch ein nicht existierender Verzeichnispfad verwendet werden darf. Das ist beispielsweise dann nützlich, wenn das gewünschte Verzeichnis zum Zeitpunkt des Festlegens der Hyperlink-Basis nicht verfügbar ist, weil es sich zum Beispiel auf einem gerade nicht verbundenem Netzlaufwerk befindet. Man muss aber unbedingt wissen, wie Microsoft Excel bei einem nicht vorhandenen Hyperlink-Basis-Verzeichnis reagiert. Wird nämlich ein Hyperlink in eine Zelle eingefügt, 'übersieht' Excel den letzten Ordner im Pfad der Hyperlink-Basis. Lautet die Basis zum Beispiel "Z:\Excel\Teams" und gibt als Link-Zieldatei "Statistik.xls" ein, wird der Hyperlink mit "Z:\Excel\Statistik.xls" statt mit "Z:\Excel\Teams\Statistik.xls" erstellt. Dieses Problem kann man umgehen, indem man einen zusätzlichen Backslash ('\') an den Hyperlink-Basis-Pfad anhängt.

.VBA-Code #1
Public Sub SetHyperlinkBase1()
  ActiveWorkbook.BuiltInDocumentProperties("Hyperlink base").Value = "C:\Daten"
End Sub

.VBA-Code #2
Public Sub SetHyperlinkBase2()
  ActiveWorkbook.BuiltInDocumentProperties("Hyperlink base").Value = "http://www.xlam.info"
End Sub

.VBA-Code #3
Public Sub SetHyperlinkBase3()
  ActiveWorkbook.BuiltInDocumentProperties("Hyperlink base").Value = ""
End Sub

Verwandte Codebeispiele

Hyperlink-Basis-Verzeichnis einer Arbeitsmappe ermitteln

Prüfen, ob das Hyperlink-Basis-Verzeichnis einer Arbeitsmappe existiert

To Top


Gedruckt am-Datum einer geöffneten Arbeitsmappe abfragen

.Beschreibung
Die BuiltinDocumentProperties-Auflistung enthält unter anderem die Dokument-Eigenschaft mit dem Gedruckt-Datum. Wenn das Dokument noch nie gedruckt wurde, besitzt die Dokument-Eigenschaft "Last Print Date" keinen (gültigen) Inhalt. Die Abfrage führt daher zum Laufzeitfehler -2147467259 (80004005) "Automatisierungsfehler".

.VBA-Code
Public Sub GetLastPrintDate()
  On Error Resume Next
  MsgBox "Gedruckt am-Datum: " & ActiveWorkbook.BuiltinDocumentProperties("Last Print Date").Value
  If Err.Number = -2147467259 Then
    MsgBox "Das Dokument wurde noch nie gedruckt."
  End If
  On Error GoTo 0
End Sub

Verwandte Codebeispiele

Gedruckt am-Datum einer geschlossenen Arbeitsmappe abfragen

To Top


Gedruckt am-Datum einer geschlossenen Arbeitsmappe abfragen

.Beschreibung
Dieses Codebeispiel zeigt, wie man herausfinden kann, wann eine geschlossene Arbeitsmappe zuletzt gedruckt wurde. Zum Zeitpunkt der Codeausführung darf die Arbeitsmappe nicht in Microsoft Excel geöffnet sein. Anderenfalls tritt der Laufzeitfehler 3 "The file is currently open and cannot be read" auf. Wenn die angegebene Datei nicht vorhanden ist, erscheint der Laufzeitfehler 432 "Datei- oder Klassenname während Automatisierungsoperation nicht gefunden". Wenn das Dokument noch nie gedruckt wurde, ist die im VBA-Code verwendete Eigenschaft DateLastPrinted leer.

.VBA-Code
Public Sub GetLastPrintDate()
  Dim objDSOReader As Object
  Dim objDSODocument As Object
  Set objDSOReader = CreateObject("DSOleFile.PropertyReader")
  Set objDSODocument = objDSOReader.GetDocumentProperties("C:\Daten\EineMappe.xls")
  MsgBox "Gedruckt am-Datum: " & objDSODocument.DateLastPrinted
  Set objDSODocument = Nothing
  Set objDSOReader = Nothing
End Sub

Verwandte Codebeispiele

Gedruckt am-Datum einer geöffneten Arbeitsmappe abfragen

 

Weitere Informationen

VBA-Spezialthema: OLE Document Properties (DSOFile)

To Top


Arbeitsmappe als Add-In speichern

.Beschreibung
Beschreibung folgt.

Zuerst muss die Eigenschaft IsAddIn auf True gesetzt werden.

Beim Speichern nicht ActiveWorkbook verwenden, da durch das Ändern von IsAddIn auf True das Arbeitsmappenfenster ausgeblendet und somit eine andere (oder gar keine) Arbeitsmappe aktiv wird.

Konstante xlAddIn = 18

 

.VBA-Code
Public Sub SaveWorkbookAsAddIn()
  Workbooks("Mappe1").IsAddIn = True
  Workbooks("Mappe1").SaveAs "C:\Daten\EinAddIn.xla", xlAddIn
End Sub

To Top


Datei speichern unter-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub ShowSaveAsDialog1()
  Application.Dialogs(xlDialogSaveAs).Show
End Sub

.VBA-Code #2
Public Sub ShowSaveAsDialog2()
  Application.Dialogs(xlDialogSaveWorkbook).Show
End Sub

Verwandte Codebeispiele

Datei speichern unter-Dialog anzeigen und Pfad/Datei vorblenden

To Top


Datei speichern unter-Dialog anzeigen und Pfad/Datei vorblenden

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub ShowSaveAsDialogWithFile1()
  Application.Dialogs(xlDialogSaveAs).Show "C:\Daten\EineMappe.xls"
End Sub

.VBA-Code #2
Public Sub ShowSaveAsDialogWithFile2()
  Application.Dialogs(xlDialogSaveWorkbook).Show "C:\Daten\EineMappe.xls"
End Sub

Verwandte Codebeispiele

Datei speichern unter-Dialog anzeigen

To Top


Grösse der Speicherauslagerungsdatei von Windows ermitteln

.Beschreibung
Beschreibung folgt.

Grösse Total und Grösse Verfügbar.

.VBA-Code
'Deklarationsbereich
Public Type MEMORYSTATUS
  dwLength As Long
  dwMemoryLoad As Long
  dwTotalPhys As Long
  dwAvailPhys As Long
  dwTotalPageFile As Long
  dwAvailPageFile As Long
  dwTotalVirtual As Long
  dwAvailVirtual As Long
End Type

Public Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

'Codemodul
Public Sub GetPageFileSize()
  Dim MS As MEMORYSTATUS
  MS.dwLength = Len(MS)
  GlobalMemoryStatus MS
  MsgBox "Auslagerungsdatei Total:" & Chr$(9) & Format$(MS.dwTotalPageFile / 1024, "#,##0") & " KB" & _
     vbCrLf & "Auslagerungsdatei Verfügbar:" & Chr$(9) & Format$(MS.dwAvailPageFile / 1024, "#,##0") & " KB"
End Sub

To Top


Grösse des gesamten und verfügbaren physischen Speichers (RAM) ermitteln

.Beschreibung
Beschreibung folgt.

Grösse Total und Grösse Verfügbar.

.VBA-Code
'Deklarationsbereich
Public Type MEMORYSTATUS
  dwLength As Long
  dwMemoryLoad As Long
  dwTotalPhys As Long
  dwAvailPhys As Long
  dwTotalPageFile As Long
  dwAvailPageFile As Long
  dwTotalVirtual As Long
  dwAvailVirtual As Long
End Type

Public Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

'Codemodul
Public Sub GetMemorySize()
  Dim MS As MEMORYSTATUS
  MS.dwLength = Len(MS)
  GlobalMemoryStatus MS
  MsgBox "Physischer Speicher Total:" & Chr$(9) & Format$(MS.dwTotalPhys / 1024, "#,##0") & " KB" & _
     vbCrLf & "Physischer Speicher Verfügbar:" & Chr$(9) & Format$(MS.dwAvailPhys / 1024, "#,##0") & " KB"
End Sub

To Top


Datei neu-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Besitzt keine Argumente (arg).

.VBA-Code
Public Sub ShowNewDialog()
  Application.Dialogs(xlDialogNew).Show
End Sub

To Top


Objekt einfügen/Von Datei erstellen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Mit arg3:=True wird festgelegt, dass das eingefügte Objekt verknüpft wird.

.VBA-Code
Public Sub ShowInsertObjectDialog()
  Application.Dialogs(xlDialogInsertObject).Show arg2:="C:\Daten\EineMappe.xls"
End Sub

To Top


Arbeitsmappe freigeben-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Besitzt keine Argumente (arg)

.VBA-Code
Public Sub ShowShareWorkbookDialog()
  Application.Dialogs(xlDialogFileSharing).Show
End Sub

To Top


Grafikdatei einfügen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

arg1 = Dateiname, arg2 = Filternummer -> Beide Argumente funktionieren nicht!

.VBA-Code
Public Sub ShowInsertPictureDialog()
  Application.Dialogs(xlDialogInsertPicture).Show
End Sub

To Top


Hyperlink einfügen/bearbeiten-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Wenn die aktive Zelle bereits einen Hyperlink besitzt, wird anstelle des "Hyperlink einfügen"- der "Hyperlink bearbeiten"-Dialog angezeigt.

Besitzt keine Argumente (arg).

.VBA-Code
Public Sub ShowHyperlinkDialog()
  Application.Dialogs(xlDialogInsertHyperlink).Show
End Sub

To Top


Add-In-Manager anzeigen

.Beschreibung
Beschreibung folgt.

Besitzt keine funktionierenden Argumente (arg).

.VBA-Code
Public Sub ShowAddInManager()
  Application.Dialogs(xlDialogAddInManager).Show
End Sub

To Top


Datei-Eigenschaften-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub ShowFilePropertiesDialog1()
  Application.Dialogs(xlDialogProperties).Show
End Sub

.VBA-Code #2
Public Sub ShowFilePropertiesDialog2()
  Application.Dialogs(xlDialogProperties).Show arg1:="Titel", arg5:="Kommentar"
End Sub

To Top


Arbeitsblatt-Hintergrundbild hinzufügen/ändern/entfernen

.Beschreibung
Beschreibung folgt.

Grafik-Dateiformate:
- emf
- wmf
- jpg
- jpeg
- png
- bmp
- dib
- rle
- cdr
- cgm
- drw
- dxf
- eps
- gif
- hgl
- plt
- pcd
- pcx
- pct
- tga
- tif
- wpg

.VBA-Code #1
Public Sub AddBackgroundPicture()
  ActiveSheet.SetBackgroundPicture "C:\Daten\Bild.gif"
End Sub

.VBA-Code #2
Public Sub ChangeBackgroundPicture()
  ActiveSheet.SetBackgroundPicture "C:\Daten\AnderesBild.gif"
End Sub

.VBA-Code #3
Public Sub RemoveBackgroundPicture()
  ActiveSheet.SetBackgroundPicture ""
End Sub

To Top


Bildschirm-Auflösung von Windows ermitteln

.Beschreibung
Die Auflösung des Bildschirmes wird gewöhnlich in der Masseinheit Pixel angegeben, wobei man eine horizontale und eine vertikale Abmessung verwendet. Hier wird gezeigt, wie man die aktuell in Windows eingestellte Auflösung herausfinden kann.

» Codebeispiel #1: In diesem Beispiel wird die Windows API-Funktion GetDeviceCaps verwendet. Die beiden anderen API-Funktionen GetDC und ReleaseDC werden zum Anfordern bzw. Freigeben eines Device Context (Gerätekontext-Referenz) benötigt.

» Codebeispiel #2: Dieses Codebeispiel ermittelt die Abmessungen des Windows Desktop, welcher im Grunde genommen nichts anderes ist als ein 'spezielles' Fenster.

» Codebeispiel #3: Hier werden die beiden Eigenschaften HorizontalResolution und VerticalResolution des System-Objektes von Microsoft Word abgefragt. Damit man auf diese Eigenschaften zugreifen kann, muss mittels Automation vorübergehend eine Microsoft Word-Instanz ausgeführt werden. Im Gegensatz zu Microsoft Word besitzt das Objektmodell von Microsoft Excel (wie auch Microsoft PowerPoint) keinerlei Eigenschaften zum Herausfinden der Bildschirm-Auflösung.

» Codebeispiel #4: Diese Lösung verwendet wie Codebeispiel #3 die Eigenschaften HorizontalResolution und VerticalResolution. Dieser Programmcode funktioniert jedoch nur in einem Microsoft Word VBA-Projekt.

.VBA-Code #1
'Deklarationsbereich
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

'Codemodul
Function GetScreenResolution() As String
  Const HORZRES = 8
  Const VERTRES = 10
  Dim lngDC As Long
  Dim lngRC As Long
  Dim lngHSize As Long
  Dim lngVSize As Long
  lngDC = GetDC(0&)
  lngHSize = GetDeviceCaps(lngDC, HORZRES)
  lngVSize = GetDeviceCaps(lngDC, VERTRES)
  lngRC = ReleaseDC(0, lngDC)
  GetScreenResolution = lngHSize & " x " & lngVSize
End Function

'*** Aufruf ***

Sub TestCall()
  MsgBox "Auflösung (horizontal x vertikal): " & GetScreenResolution() & " Pixel"
End Sub

.VBA-Code #2
'Deklarationsbereich
Type RECT_Type
  left As Long
  top As Long
  right As Long
  bottom As Long
End Type

Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Sub GetWindowRect Lib "user32" (ByVal Hwnd As Long, lpRect As RECT_Type)

'Codemodul
Sub GetScreenResolution2()
  Dim rect As RECT_Type
  Call GetWindowRect(GetDesktopWindow(), rect)
  MsgBox "Auflösung (horizontal x vertikal): " & rect.right - rect.left & " x " & rect.bottom - rect.top & " Pixel"
End Sub

.VBA-Code #3
Sub GetScreenResolution3()
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  MsgBox "Auflösung (horizontal x vertikal): " & objWord.System.HorizontalResolution & _
     " x " & objWord.System.VerticalResolution & " Pixel"
  objWord.Quit
  Set objWord = Nothing

End Sub

.VBA-Code #4
Sub GetScreenResolution4()
  MsgBox "Auflösung (horizontal x vertikal): " & Application.System.HorizontalResolution & _
     " x " & Application.System.VerticalResolution & " Pixel"
End Sub

Verwandte Codebeispiele

Bildschirmposition des Mauszeigers ermitteln

To Top


Geändert am-Datum einer Datei abfragen

.Beschreibung
Das Änderungsdatum einer Datei kann man mittels VBA-Funktion FileDateiTime abfragen. Als Alternative kann man auch die DateLastModified-Eigenschaft des File-Objektes aus der File System Object-Objektbibliothek verwenden.

.VBA-Code #1
Public Sub GetFileDateLastModified1()
  MsgBox "Geändert am-Datum: " & FileDateTime("C:\Daten\EineMappe.xls")
End Sub

.VBA-Code #2
Public Sub GetFileDateLastModified2()
  MsgBox "Geändert am-Datum: " & CreateObject("Scripting.FileSystemObject").GetFile("C:\Daten\EineMappe.xls").DateLastModified
End Sub

Verwandte Codebeispiele

Geändert am-Datum eines Ordners abfragen

Datum/Zeit einer Datei ändern

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Geändert am-Datum eines Ordners abfragen

.Beschreibung
Das Änderungsdatum eines Ordners kann man, genau gleich wie bei einer Datei, mittels VBA-Funktion FileDateiTime abfragen. Als Alternative kann man auch die DateLastModified-Eigenschaft des Folder-Objektes aus der File System Object-Objektbibliothek verwenden.

.VBA-Code #1
Public Sub GetFolderDateLastModified1()
  MsgBox "Geändert am-Datum: " & FileDateTime("C:\Daten")
End Sub

.VBA-Code #2
Public Sub GetFolderDateLastModified2()
  MsgBox "Geändert am-Datum: " & CreateObject("Scripting.FileSystemObject").GetFolder("C:\Daten").DateLastModified
End Sub

Verwandte Codebeispiele

Geändert am-Datum einer Datei abfragen

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Datum/Zeit einer Datei ändern

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub ModifyFileDateTime()

End Sub

Verwandte Codebeispiele

Geändert am-Datum einer Datei abfragen

To Top


Zwischenablage von Windows leeren

.Beschreibung
Beschreibung folgt.

» Codebeispiel #1: Funktioniert nur in Microsoft Excel.
Wenn das aktive Arbeitsblatt keine einzige benutzte Zelle besitzt, tritt der Laufzeitfehler 91 "Objektvariable oder With-Blockvariable nicht festgelegt" auf.
Wenn das aktive Blatt kein Tabellenblatt ist, erscheint der Laufzeitfehler 1004 "Die Methode Cells für das Objekt _Global ist fehlgeschlagen".
Wenn keine Arbeitsmappe geöffnet ist bzw. keine aktive Arbeitsmappe existiert, tritt der Laufzeitfehler 91 "Objektvariable oder With-Blockvariable nicht festgelegt" auf.

» Codebeispiel #2: Funktioniert in einem Microsoft Office-Programm.

» Codebeispiel #3: Funktioniert in einem beliebigen VBA- oder VB-Programm.

» Codebeispiel #4: Funktioniert in einem beliebigen VBA- oder VB-Programm.

.VBA-Code #1
Public Sub ClearClipboard1()
  Cells.Find("").Copy
  Application.CutCopyMode = False
End Sub

.VBA-Code #2
Public Sub ClearClipboard2()
  Dim myDataObject As DataObject
  Set myDataObject = New DataObject
  myDataObject.SetText ""
  myDataObject.PutInClipboard
  Set myDataObject = Nothing
End Sub

.VBA-Code #3
'Deklarationsbereich
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
   lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function CloseClipboard Lib "user32" () As Long

'Codemodul
Public Sub ClearClipboard3()
  OpenClipboard FindWindow("xlMain", vbNullString)
  EmptyClipboard
  CloseClipboard
End Sub

.VBA-Code #4
'Deklarationsbereich
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function CloseClipboard Lib "user32" () As Long

'Codemodul
Public Sub ClearClipboard4()
  OpenClipboard Application.VBE.MainWindow.hwnd
  EmptyClipboard
  CloseClipboard
End Sub

To Top


Arbeitsmappe schreibgeschützt öffnen

.Beschreibung
Eine Arbeitsmappe wird schreibgeschützt geöffnet, indem man bei der Open-Methode von Workbooks das Argument ReadOnly mit True angibt.

.VBA-Code #1
Public Sub OpenWorkbookReadOnly1()
  Workbooks.Open "C:\Daten\EineMappe.xls", , True
End Sub

.VBA-Code #2
Public Sub OpenWorkbookReadOnly2()
  Workbooks.Open Filename:="C:\Daten\EineMappe.xls", ReadOnly:=True
End Sub

Verwandte Codebeispiele

Neueste Version einer schreibgeschützt geöffneten Arbeitsmappe laden

To Top


Arbeitsmappe schreibgeschützt öffnen und in die Benachrichtigungsliste eintragen

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub OpenWorkbookWithNotify1()
  Workbooks.Open "C:\Daten\EineMappe.xls", , , , , , , , , , True
End Sub

.VBA-Code #2
Public Sub OpenWorkbookWithNotify2()
  Workbooks.Open Filename:="C:\Daten\EineMappe.xls", Notify:=True
End Sub

Verwandte Codebeispiele

Neueste Version einer schreibgeschützt geöffneten Arbeitsmappe laden

To Top


Arbeitsmappe öffnen und in die Liste der zuletzt verwendeten Dateien eintragen

.Beschreibung
Beschreibung folgt.

Liste der zuletzt verwendeten Dateien im Datei-Menü von Microsoft Excel.

.VBA-Code #1
Public Sub OpenWorkbookAndAddToMRU1()
  Workbooks.Open "C:\Daten\EineMappe.xls", , , , , , , , , , , , True
End Sub

.VBA-Code #2
Public Sub OpenWorkbookAndAddToMRU2()
  Workbooks.Open Filename:="C:\Daten\EineMappe.xls", AddToMRU:=True
End Sub

To Top


Arbeitsmappe mit Dateikennwort (Lese-/Schreib-Kennwort) öffnen

.Beschreibung
Beschreibung folgt.

Achten Sie auf die Gross-/Kleinschreibung des Kennwortes.

.VBA-Code #1
Public Sub OpenWorkbookWithPassword1()
  Workbooks.Open "C:\Daten\EineMappe.xls", , , , "Sommer"
End Sub

.VBA-Code #2
Public Sub OpenWorkbookWithPassword2()
  Workbooks.Open Filename:="C:\Daten\EineMappe.xls", Password:="Sommer"
End Sub

To Top


Arbeitsmappe mit Schreibschutzkennwort öffnen

.Beschreibung
Beschreibung folgt.

Achten Sie auf die Gross-/Kleinschreibung des Kennwortes.

 

.VBA-Code #1
Public Sub OpenWorkbookWithWriteResPassword1()
  Workbooks.Open "C:\Daten\EineMappe.xls", , , , , "Sommer"
End Sub

.VBA-Code #2
Public Sub OpenWorkbookWithWriteResPassword2()
  Workbooks.Open Filename:="C:\Daten\EineMappe.xls", WriteResPassword:="Sommer"
End Sub

To Top


Arbeitsmappe öffnen mit Anzeigen der Makrovirus-Warnmeldung

.Beschreibung
Beschreibung folgt.

Die Makrovirus-Warnung wird angezeigt, wenn die Einstellung "Makrovirus-Schutz" aktiviert ist (Microsoft Excel 97). Bei Microsoft Excel ab Version 2000 muss die Sicherheitsstufe Mittel oder Hoch aktiviert sein.

.VBA-Code #1
Public Sub OpenWorkbookAndShowMacroVirusAlert1()
  Application.CommandBars.FindControl(Id:=1740).Text = "file:///C:/Daten/EineMappe.xls"
End Sub

.VBA-Code #2
Public Sub OpenWorkbookAndShowMacroVirusAlert2()
  Application.CommandBars.FindControl(Id:=1740).Text = "C:\Daten\EineMappe.xls"
End Sub

To Top


Arbeitsbereich öffnen

.Beschreibung
Beschreibung folgt.

Arbeitsbereichdatei (.xlw)

 

.VBA-Code
Public Sub OpenWorkgroup()
  Workbooks.Open "C:\Daten\EinArbeitsbereich.xlw"
End Sub

To Top


Datei in die Liste der zuletzt verwendeten Dateien hinzufügen

.Beschreibung
Beschreibung folgt.

Liste der zuletzt verwendeten Dateien im Datei-Menü von Microsoft Excel.

.VBA-Code
Public Sub AddFileToMRUList()
  Application.RecentFiles.Add "C:\Daten\EineMappe.xls"
End Sub

.Hinweis
Es kann auch eine Nicht-Exceldatei hinzugefügt werden. Auch das Hinzufügen einer nicht existierenden Datei oder die Angabe eines nicht vorhandenen Pfades ist möglich. Die bekannte Fehlermeldung "<Datei> wurde nicht gefunden. Überprüfen Sie die Rechtschreibung des Dateinamens und überprüfen Sie, ob der Ort der Datei korrekt ist." erscheint erst, wenn die hinzugefügte Datei geöffnet werden soll, d.h. wenn Sie den Menüpunkt dieser Datei im Datei-Menü anklicken.

To Top


Liste der zuletzt verwendeten Dateien löschen

.Beschreibung
Beschreibung folgt.

Liste der zuletzt verwendeten Dateien im Datei-Menü von Microsoft Excel.

.VBA-Code #1
Public Sub ClearMRUList1()
  Dim intRecentFiles As Integer
  With Application.RecentFiles
    intRecentFiles = .Maximum
    .Maximum = 0
    .Maximum = intRecentFiles
  End With
End Sub

.VBA-Code #2
Public Sub ClearMRUList2()
TODO!

  Application.RecentFiles(x).Delete
End Sub

To Top


Zuletzt bearbeitete Dokumente von Windows auflisten

.Beschreibung
Beschreibung folgt.

Liste auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe.

Drei Spalten: Dokumentname gemäss Menü "Dokumente", Dateiverknüpfung, Hyperlink

Das Pfad des Ordners "Zuletzt bearbeitete Dokumente" wird mittels der SpecialFolders-Auflistung abgefragt.

 

.VBA-Code
Public Sub ListRecentDocuments()
  Dim intCounter As Integer
  Dim strRecentFolder As String
  Dim strFile As String
  Dim objFSO As Object
  Dim wksSheet As Worksheet
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  strRecentFolder = CreateObject("WScript.Shell").SpecialFolders("recent")
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  With wksSheet
    .Range("A1").Value = "Zuletzt bearbeitete Dokumente"
    .Range("A1").Font.Bold = True
    .Range("A3:C3").Value = Array("Dokument", "Verknüpfung", "Hyperlink")
    .Range("A3:C3").Font.Bold = True
  End With
  intCounter = 3
  strFile = Dir(strRecentFolder & "\*.*")
  Do While strFile <> ""
    intCounter = intCounter + 1
    With wksSheet
      .Cells(intCounter, 1).Value = objFSO.GetBaseName(strFile)
      .Cells(intCounter, 2).Value = strFile
      .Cells(intCounter, 3).Value = strRecentFolder & "\" & strFile
      .Cells(intCounter, 3).Hyperlinks.Add .Cells(intCounter, 3), strRecentFolder & "\" & strFile
    End With
    strFile = Dir()
  Loop
  wksSheet.Range("A1:C1").EntireColumn.AutoFit
  Set objFSO = Nothing
  Set wksSheet = Nothing
End Sub

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Zuletzt verwendete Ausführen-Befehlszeilen von Windows auflisten

.Beschreibung
Beschreibung folgt.

Liste auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Registry-Einträge besitzen die Bezeichnungen "a" bis "z"

» Codebeispiel #1: Unsortierte Liste

» Codebeispiel #2: Sortiert die Einträge nach der Reihenfolge, wie sie auch im Ausführen-Dialog aufgelistet sind.

Registry-Eintrag "MRUList" enthält die Reihenfolge der anderen Einträge.

Schleife von 97 bis 122 (ASCII-Codes der Buchstaben a bis z).

 

.VBA-Code #1
Public Sub ListRunMRUs1()
  Dim strValue As String
  Dim intChar As Integer
  Dim objShell As Object
  Dim wksSheet As Worksheet

  On Error Resume Next
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Set objShell = CreateObject("WScript.Shell")
  For intChar = 97 To 122
    strValue = objShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU\" & Chr$(intChar))

    If Err.Number = 0 Then
      wksSheet.Cells(intChar - 96, 1).Value = Left$(strValue, Len(strValue) - 2)

    Else
      'Laufzeitfehler -2147024894 "Registrierungsschlüssel [x] kann nicht zum Lesen geöffnet werden"
      Err.Clear
    End If
  Next intChar
  wksSheet.Range("A1").EntireColumn.AutoFit
  Set objShell = Nothing
  Set wksSheet = Nothing
End Sub

.VBA-Code #2
Public Sub ListRunMRUs2()
  Dim strValue As String
  Dim strMRUList As String
  Dim intIndex As Integer
  Dim intChar As Integer
  Dim objShell As Object
  Dim wksSheet As Worksheet
  On Error Resume Next
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  Set objShell = CreateObject("WScript.Shell")
  strMRUList = objShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU\MRUList")
  For intChar = 97 To 122
    strValue = objShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU\" & Chr$(intChar))
    If Err.Number = 0 Then
      intIndex = InStr(strMRUList, Chr$(intChar))
      wksSheet.Cells(intChar - 96, 1).Value = intIndex
      wksSheet.Cells(intChar - 96, 2).Value = Left$(strValue, Len(strValue) - 2)
    Else
      'Error -2147024894 "Registrierungsschlüssel [x] kann nicht zum Lesen geöffnet werden."
      Err.Clear
    End If
  Next intChar
  wksSheet.Range("A1").Sort Key1:=wksSheet.Range("A1"), Order1:=xlAscending
  wksSheet.Range("A1:B1").EntireColumn.AutoFit
  Set objShell = Nothing
  Set wksSheet = Nothing

End Sub

Verwandte Codebeispiele

Liste der zuletzt verwendeten Ausführung-Befehlszeilen von Windows löschen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Liste der zuletzt verwendeten Ausführen-Befehlszeilen von Windows löschen

.Beschreibung
Beschreibung folgt.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Registry-Einträge besitzen die Bezeichnungen "a" bis "z"

 

.VBA-Code
Public Sub ClearRunMRUList()

End Sub

Verwandte Codebeispiele

Zuletzt verwendete Ausführung-Befehlszeilen von Windows auflisten

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Dateien des Favoriten-Ordners auflisten

.Beschreibung
Dieses Codebeispiel erstellt eine Liste der Dateien (genauer gesagt der Dateiverknüpfungen), die sich im Favoriten-Ordner befinden.

 

.VBA-Code
Public Sub ListFavorites()

End Sub

To Top


Zellwert aus einer geschlossenen Arbeitsmappe auslesen

.Beschreibung
Beschreibung folgt.

Der Funktion GetCellValue werden die vier Argumente Dateipfad, Dateiname, Blattname und Zelladresse übergeben.

.VBA-Code
'Codemodul
Public Function GetCellValue(ByVal strPath As String, ByVal strFile As String, _
    ByVal strSheet As String, ByVal strRef As String) As Variant
  Dim strArgument As String
  If Right(strPath, 1) <> "\" Then
    strPath = strPath & "\"
  End If
  If Dir(strPath & strFile) = "" Then
    GetCellValue = "Fehler aufgetreten! Datei '" & strPath & strFile & "' nicht gefunden."
    Exit Function
  End If
  On Error Resume Next
  strArgument = "'" & strPath & "[" & strFile & "]" & strSheet & "'!" & Range(strRef).Range("A1").address(, , xlR1C1)
  If Err.Number = 1004 Then
    GetCellValue = "Fehler aufgetreten! Wahrscheinlich Zelladresse falsch."
  Else
    GetCellValue = ExecuteExcel4Macro(strArgument)
    If TypeName(GetCellValue) = "Error" Then
      GetCellValue = "Fehler aufgetreten! Wahrscheinlich Fehlerwert in Zelle oder Blattname falsch."
    End If
  End If
  On Error GoTo 0
End Function

'*** Aufruf ***
Sub TestCall()
  Dim varRC As Variant
  varRC = GetCellValue("C:\Daten", "EineMappe.xls", "Tabelle1", "A1")
  MsgBox "Zellwert: " & varRC
End Sub

To Top


Datei schliessen

.Beschreibung
Eine bestimmte, vorgängig mit der Open-Anweisung von VBA geöffnete Datei wird mit der Close-Anweisung geschlossen. Bei Close muss die Dateinummer der zu schliessenden Datei angegeben werden, da sonst alle offenen Dateien geschlossen werden.

.VBA-Code
Public Sub CloseFile()
  Close #1
End Sub

Verwandte Codebeispiele

Mehrere Dateien schliessen

Alle Dateien schliessen

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Mehrere Dateien schliessen

.Beschreibung
Wenn mit der Open-Anweisung mehrere Dateien geöffnet wurden, so kann man beliebige dieser Dateien mit der Close-Anweisung in einem Schritt schliessen. Close erlaubt nämlich die Angabe mehrerer Dateinummern.

.VBA-Code
Public Sub CloseFiles()
  Close #1, #2, #5
End Sub

Verwandte Codebeispiele

Datei schliessen

Alle Dateien schliessen

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Alle Dateien schliessen

.Beschreibung
Es gibt zwei Möglichkeiten zum Schliessen aller geöffneten Dateien:
1. Die Close-Anweisung ohne Angabe einer Dateinummer
2. Die Reset-Anweisung

.VBA-Code #1
Public Sub CloseAllFiles()
  Close
End Sub

.VBA-Code #2
Public Sub CloseAllFiles()
  Reset
End Sub

Verwandte Codebeispiele

Datei schliessen

Mehrere Dateien schliessen

 

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Windows Desktop-Symbole ausblenden

.Beschreibung
Beschreibung folgt.

» Der Programmcode von Beispiel #1 dient zum Ausblenden der Desktop-Symbole.

» Mit dem Programmcode von Beispiel #2 werden die Desktop-Symbole wieder eingeblendet.

.Autor
Peter Monadjemi

.VBA-Code (Allgemein)
'Deklarationsbereich
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwnd As Long, ByVal _
   hWndChild As Long, ByVal lpszClassName As String, ByVal lpszWindow As String) As Long
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Const SW_HIDE = 0
Const SW_SHOW = 5
Const g_cstrShellViewWnd As String = "Progman"

.VBA-Code #1
Sub HideDesktopIcons()
  Dim hwnd As Long
  hwnd = FindWindowEx(0&, 0&, g_cstrShellViewWnd, vbNullString)
  If hwnd <> 0 Then
    ShowWindow hwnd, SW_HIDE
  End If
End Sub

.VBA-Code #2
Sub ShowDesktopIcons()
  Dim hwnd As Long
  hwnd = FindWindowEx(0&, 0&, g_cstrShellViewWnd, vbNullString)
  If hwnd <> 0 Then
    ShowWindow hwnd, SW_SHOW
  End If
End Sub

To Top


Zelle eines anderen Arbeitsblattes einer anderen Arbeitsmappe anzeigen

.Beschreibung
Anhand der Goto-Methode des Application-Objektes kann man eine beliebige Zelle selektieren, die sich auf einem anderen Arbeitsblatt und sogar in einer anderen Arbeitsmappe befindet (die allerdings geöffnet sein muss).

.VBA-Code
Public Sub GotoCell()
  Application.Goto Workbooks("AndereMappe.xls").Worksheets("Tabelle2").Range("C3")
End Sub

To Top


Programmcode einer VBA-Prozedur/-Funktion des VBA-Projektes der aktiven Arbeitsmappe anzeigen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub GotoVBACode()
  Application.Goto "Auto_Open"
End Sub

To Top


Anzahl Dateien eines Ordners abfragen

.Beschreibung
Beschreibung folgt.

Wenn Sie herausfinden möchten, wie viele Dateien sich in einem bestimmten Ordner befinden, verwenden Sie am besten die Möglichkeiten der FileSystemObject-Objektbibliothek.

Ausgegeben wird die Anzahl Dateien, die direkt im angegebenen Ordner liegen. Dateien in allfällig vorhandenen Unterordnern werden nicht mitgerechnet.

Im Beispiel wird der Ordner "C:\Daten" untersucht.

.VBA-Code
Public Sub CountFilesOfFolder()
  MsgBox "Anzahl Dateien: " & CreateObject("Scripting.FileSystemObject").GetFolder("C:\Daten").Files.Count, vbInformation
End Sub

Verwandte Codebeispiele

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

Anzahl Dateien eines gesamten Laufwerkes abfragen

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Anzahl Dateien eines Ordners und allen Unterordnern abfragen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub CountFilesOfFolders()

End Sub

Verwandte Codebeispiele

Anzahl Dateien eines Ordners abfragen

Anzahl Dateien eines gesamten Laufwerkes abfragen

To Top


Anzahl Dateien eines gesamten Laufwerkes abfragen

.Beschreibung
Mit diesem VBA-Code können Sie herausfinden, wie viele Dateien sich auf einem Laufwerk/Datenträger befinden.

.VBA-Code
Public Sub CountFilesOfDrive()

End Sub

Verwandte Codebeispiele

Anzahl Dateien eines Ordners abfragen

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

To Top


Anzahl Dateien und Ordner eines gesamten Laufwerkes abfragen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub CountFilesAndFoldersOfDrive()

End Sub

Verwandte Codebeispiele

Anzahl Dateien eines Ordners abfragen

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

To Top


Anzahl Ordner eines Ordners und allen Unterordnern abfragen

.Beschreibung
Dieses Codebeispiel gibt die Anzahl Ordner aus, die ein bestimmter Ordner enthält. Es werden sämtliche Ordner bzw. Unterordner im angegebenen Ordner berücksichtigt.

Im Beispiel wird der Ordner "C:\Daten" untersucht.

.VBA-Code
'Deklarationsbereich
Private lngFolders As Long

'Codemodul
Public Sub CountFolders(ByVal strFolder As String)
  Dim objSubFolder As Object
  On Error Resume Next
  Set objFolder = objFSO.GetFolder(strFolder)
  lngFolders = lngFolders + 1
  If objFolder.SubFolders.Count > 0 Then
    If Err.Number = 0 Then
      For Each objSubFolder In objFolder.SubFolders
        CountFolders objSubFolder.Path
      Next
    Else
      Err.Clear
    End If
  End If
End Sub

'*** Aufruf ***
Sub TestCall()
  Const strFolder As String = "C:\Daten"
  lngFolders = 0
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  CountFolders strFolder
  lngFolders = lngFolders - 1   'Basis-Ordner abziehen!
  MsgBox "Untersuchter Ordner: " & strFolder & vbCrLf & vbCrLf & "Anzahl Ordner: " & lngFolders, vbInformation
  Set objFSO = Nothing
End Sub

.Hinweis
Das Abfangen von Laufzeitfehlern mittels On Error Resume Next ist notwendig, weil bei einem Ordner, für welchen der Benutzer keine Zugriffsrechte besitzt, der Laufzeitfehler 70 "Zugriff verweigert" auftritt.

Verwandte Codebeispiele

Anzahl Ordner und Unterordner eines gesamten Laufwerkes abfragen

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Anzahl Ordner und Unterordner eines gesamten Laufwerkes abfragen

.Beschreibung
Dieses Beispiel ermittelt die Anzahl Ordner eines gesamten Laufwerkes. Es werden sämtliche Ordner, also auch alle Unterordner, mitgezählt.

.VBA-Code
'Deklarationsbereich
Private lngFolders As Long

'Codemodul
Public Sub CountFolders(ByVal strFolder As String)
  Dim objSubFolder As Object
  On Error Resume Next
  Set objFolder = objFSO.GetFolder(strFolder)
  lngFolders = lngFolders + 1
  If objFolder.SubFolders.Count > 0 Then
    If Err.Number = 0 Then
      For Each objSubFolder In objFolder.SubFolders
        CountFolders objSubFolder.Path
      Next
    Else
      Err.Clear
    End If
  End If
End Sub

'*** Aufruf ***
Sub TestCall()
  Const strDriveLetter As String = "D"
  Dim strRootFolder As String
  lngFolders = 0
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  strRootFolder = objFSO.GetDrive(strDriveLetter)
  strRootFolder = strRootFolder & "\"
  CountFolders strRootFolder
  lngFolders = lngFolders - 1   'Basis-Ordner abziehen!
  MsgBox "Untersuchtes Laufwerk: " & strDriveLetter & ":" & vbCrLf & vbCrLf & "Anzahl Ordner: " & lngFolders, vbInformation
  Set objFSO = Nothing
End Sub

.Hinweis
Das Abfangen von Laufzeitfehlern mittels On Error Resume Next ist notwendig, weil bei einem Ordner, für welchen der Benutzer keine Zugriffsrechte besitzt, der Laufzeitfehler 70 "Zugriff verweigert" auftritt.

Verwandte Codebeispiele

Anzahl Ordner eines Ordners und allen Unterordnern abfragen

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

To Top


Anzahl Dateien und Unterordner eines Ordners abfragen

.Beschreibung
Hier wird die Anzahl Dateien und Unterordner, die sich direkt im angegebenen Ordner befinden, ausgegeben. Unterordner und Dateien, die in einem direkten Unterordner des Ordners liegen, werden nicht berücksichtigt.

Im Beispiel wird der Ordner "C:\Daten" untersucht.

.VBA-Code
Public Sub GetNumberOfFilesAndFolders()
  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")

  MsgBox "Anzahl Ordner: " & objFSO.GetFolder("C:\Daten").SubFolders.Count & vbCrLf & _
     "Anzahl Dateien: " & objFSO.GetFolder("C:\Daten").Files.Count, vbInformation
  Set objFSO = Nothing
End Sub

Verwandte Codebeispiele

Anzahl Ordner und Unterordner eines gesamten Laufwerkes abfragen

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Anzahl Dateien und Unterordner eines Ordners und allen Unterordnern abfragen

.Beschreibung
Anzahl Dateien, die sich im angegebenen Ordner oder in einem seiner Unterordner befinden.

Anzahl Unterordner, die sich im angegebenen Ordner oder in einem seiner Unterordner befinden.

Im Beispiel wird der Ordner "C:\Daten" untersucht.

.VBA-Code
'Deklarationsbereich
Private lngFolders As Long
Private lngFiles As Long

'Codemodul
Private Sub CountFoldersAndFiles(ByVal strFolder As String)
  Dim objSubFolder As Object
  On Error Resume Next
  Set objFolder = objFSO.GetFolder(strFolder)
  lngFolders = lngFolders + 1
  lngFiles = lngFiles + objFolder.Files.Count
  If Err.Number = 0 Then
    If objFolder.SubFolders.Count > 0 Then
      For Each objSubFolder In objFolder.SubFolders
        CountFoldersAndFiles objSubFolder.Path
      Next
    End If
  Else
    Err.Clear
  End If
End Sub

'*** Aufruf ***
Sub TestCall()
  Const strFolder As String = "C:\Daten"
  lngFolders = 0
  lngFiles = 0
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  CountFoldersAndFiles strFolder
  lngFolders = lngFolders - 1   'Basis-Ordner abziehen!
  MsgBox "Untersuchter Ordner: " & strFolder & vbCrLf & vbCrLf & "Anzahl Ordner: " & lngFolders & _

     vbCrLf & "Anzahl Dateien: " & lngFiles, vbInformation
  Set objFSO = Nothing

End Sub

.Hinweis
Das Abfangen von Laufzeitfehlern mittels On Error Resume Next ist notwendig, weil bei einem Ordner, für welchen der Benutzer keine Zugriffsrechte besitzt, der Laufzeitfehler 70 "Zugriff verweigert" auftritt.

Verwandte Codebeispiele

Anzahl Ordner und Unterordner eines gesamten Laufwerkes abfragen

Anzahl Dateien eines gesamten Laufwerkes abfragen

Anzahl Dateien eines Ordners und allen Unterordnern abfragen

Anzahl Dateien eines Ordners abfragen

 

Weitere Informationen

VBA-Spezialthema: FileSystemObject (FSO)

To Top


Symbol eines Anwendungsfensters ändern

.Beschreibung
Beschreibung folgt.

Im Beispiel wird das Standard-Symbol des Windows Editors angewendet. Dieses besitzt den Index 0 in der Datei "Notepad.exe".

 

.VBA-Code
'Deklarationsbereich
Declare Function GetActiveWindow32 Lib "user32" Alias "GetActiveWindow" () As Integer
Declare Function SendMessage32 Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _

   ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ExtractIcon32 Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, _

   ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

'Codemodul
Public Sub ChangeIcon()
  Dim hwndIcon As Long
  Dim hwndApp As Long
  hwndIcon = ExtractIcon32(0, "Notepad.exe", 0)
  hwndApp = GetActiveWindow32()
  SendMessage32 hwndApp, &H80, 1, hwndIcon   'Grosses Symbol
  SendMessage32 hwndApp, &H80, 0, hwndIcon   'Kleines Symbol
End Sub

To Top


Autor einer Arbeitsmappe abfragen

.Beschreibung
Es gibt zwei verschiedene Möglichkeiten zum Herausfinden des Autors einer Arbeitsmappe. Man kann die BuiltinDocumentProperties-Auflistung oder die Author-Eigenschaft des Workbook-Objektes benutzen.

.VBA-Code #1
Public Sub GetWorkbookAuthor1()
  MsgBox "Autor der Arbeitsmappe: " & ActiveWorkbook.BuiltinDocumentProperties("author")
End Sub

.VBA-Code #2
Public Sub GetWorkbookAuthor2()
  MsgBox "Autor der Arbeitsmappe: " & ActiveWorkbook.Author
End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


Autor eines Add-Ins abfragen

.Beschreibung
Beschreibung folgt.

Den Autor eines Add-Ins erhält man anhand der Author-Eigenschaft des AddIn-Objektes. Diese Eigenschaft ist im Objektkatalog ausgeblendet. Das bedeutet, dass es im VBA-Editor bei Eingabe von "Application.AddIns(1)." nicht automatisch nach dem letzten Punkt-Zeichen in der Liste der verfügbaren Eigenschaften/Methoden erscheint.

.VBA-Code #1
Public Sub GetAddInAuthor1()
  MsgBox Application.AddIns(1).Author
End Sub

.VBA-Code #2
Public Sub GetAddInAuthor2()
  MsgBox Application.AddIns("Automatisches Speichern").Author
End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Benutzername des Excel-Benutzers abfragen/ändern

.Beschreibung
Der Benutzername wird über die Arbeitsoberfläche von Microsoft Excel im Optionen-Dialog auf der Registerseite "Allgemein" festgelegt. In einem VBA-Programm wird dazu die UserName-Eigenschaft des Application-Objektes verwendet.

Sie sollten beachten, dass der Benutzername möglichst nicht zu häufig geändert wird, insbesondere wenn Sie mit freigegebenen Arbeitsmappen arbeiten. Der Benutzername wird an verschiedenen Stellen in Microsoft Excel verwendet, unter anderem als Autor (Ersteller) einer Arbeitsmappe, als Bearbeiter einer freigegebenen Arbeitsmappe, als Benutzer, welcher das Schreibschutzkennwort zugewiesen hat und als letzter Bearbeiter einer Arbeitsmappe (Merkmal "Zuletzt gespeichert von").

.VBA-Code #1
Public Sub GetExcelUser()
  MsgBox "Benutzername: " & Application.UserName
End Sub

.VBA-Code #2
Public Sub SetExcelUser()
  Application.UserName = "Peter Muster"
End Sub

.Hinweis
Der Benutzername, genauer gesagt die UserName-Eigenschaft, kann nicht leer sein. Beim Zuweisen einer leeren Zeichenfolge ("") wird automatisch der Default-Benutzername verwendet. Sowohl UserName als auch das Eingabefeld im Optionen-Dialog enthalten daraufhin den Default-Benutzernamen. In der Windows-Registry jedoch ist kein Name eingetragen. Dies hat zur Folge, dass beim nächsten Starten von Microsoft Excel ein Dialogfeld mit dem Titel "Benutzername" erscheint, in welchem Sie Name und Initialen eingeben müssen.

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Dateityp einer Dateinamenerweiterung abfragen

.Beschreibung
Beschreibung folgt.

Zum Beispiel ist der Dateinamenerweiterung ".xls" der Dateityp "Excel.Sheet" zugeordnet.

 

.VBA-Code
Public Sub GetFiletype()
  Dim strFiletype As String
  Const DestFile As String = "C:\Daten\Assoc.txt"
  Const FileExtension As String = ".xls"
  CreateObject("WScript.Shell").Run "CMD /C ASSOC " & FileExtension & " >" & DestFile, 6, True
  If Dir(DestFile) = "" Then
    Exit Sub
  End If
  Open DestFile For Input As #1
    Line Input #1, strFiletype
  Close #1
  MsgBox "Dateityp der Dateinamenerweiterung '" & FileExtension & "': " & Mid$(strFiletype, Len(FileExtension) + 2)
  Kill DestFile
End Sub

To Top


Dateityp/ProgID einer Dokument-Datei abfragen

.Beschreibung
Mit Hilfe der DSOFile-Bibliothek kann man auf eine Vielzahl Eigenschaften einer Dokument-Datei zugreifen und beispielsweise ihren Dateityp bzw. ihre Prog-ID (Prog-ID ist die Abkürzung für "Programatic Identifier") abfragen.

.VBA-Code
Public Sub GetFiletypeProgID()
  Dim objDSOReader As Object
  Dim objDSODocument As Object
  Set objDSOReader = CreateObject("DSOleFile.PropertyReader")
  Set objDSODocument = objDSOReader.GetDocumentProperties("C:\Daten\EineMappe.xls")
  MsgBox "Dateityp/ProgID des Dokumentes: " & objDSODocument.ProgId
  Set objDSODocument = Nothing
  Set objDSOReader = Nothing
End Sub

Weitere Informationen

VBA-Spezialthema: OLE Document Properties (DSOFile)

To Top


Neueste Version einer schreibgeschützt geöffneten Arbeitsmappe laden

.Beschreibung
Wenn eine Arbeitsmappe schreibgeschützt geöffnet wurde, kann man jederzeit die neueste Version

TODO

.VBA-Code
Public Sub LoadLatestVersion()
  ActiveWorkbook.UpdateFromFile
End Sub

Weitere Informationen

Excel-Objektmodell: Methoden des Workbook-Objektes

To Top


Nächste freie Dateinummer ermitteln

.Beschreibung
Beschreibung folgt.

Es wird immer die niedrigste freie Dateinummer zurückgegeben. Wenn beispielsweise die Dateinummern 1, 2, 4 und 7 bereits benutzt werden, gibt FreeFile die Dateinummer 3 zurück.

.VBA-Code
Public Sub GetFreeFileNumber()
  MsgBox "Nächste freie Dateinummer: " & FreeFile()
End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Textdatei nicht-exklusiv für Ausgabe öffnen

.Beschreibung
Beschreibung folgt.

Mit dem Shared-Schlüsselwort wird festgelegt, dass auch andere Prozesse Lese- und Schreiboperationen auf die Datei ausführen können.

.VBA-Code
Public Sub OpenTextFileShared()
  Open "C:\Daten\Textdatei.txt" For Output Shared As #1
    Print #1, "Sommer"
  Close #1
End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Windows-Systemfarben der Fenster-Titelleisten ändern

.Beschreibung
Beschreibung folgt.

In diesem Codebeispiel werden die Farben der Fenstertitelleisten geändert. Die Änderung betrifft alle Fenster von Windows.

.VBA-Code
Public Sub ChangeWindowSystemColors()

End Sub

To Top


Formatierte Textdatei in Excel öffnen

.Beschreibung
Beschreibung folgt.

» Codebeispiel #1: Mit Tabulator getrennte Daten.

» Codebeispiel #2: Mit Semikolon getrennte Daten.

» Codebeispiel #3: Mit Komma getrennte Daten.

» Codebeispiel #4: Mit Leerzeichen getrennte Daten.

.VBA-Code #1
Public Sub OpenFormattedTextfile1()
  Workbooks.OpenText Filename:="C:\Daten\EineTextdatei.txt", Tab:=True
End Sub

.VBA-Code #2
Public Sub OpenFormattedTextfile2()
  Workbooks.OpenText Filename:="C:\Daten\EineTextdatei.txt", Semicolon:=True
End Sub

.VBA-Code #3
Public Sub OpenFormattedTextfile3()
  Workbooks.OpenText Filename:="C:\Daten\EineTextdatei.txt", Comma:=True
End Sub

.VBA-Code #4
Public Sub OpenFormattedTextfile4()
  Workbooks.OpenText Filename:="C:\Daten\EineTextdatei.txt", Space:=True
End Sub

Verwandte Codebeispiele

Textdatei in Excel öffnen

Textdatei in Excel öffnen und als Arbeitsmappe speichern

 

Weitere Informationen

Excel-Objektmodell: Methoden der Workbooks-Auflistung

To Top


Datei mit WinZip packen

.Beschreibung
...

Mit dem Schalter "-a" wird ein neues Archiv (zip-Datei) angelegt bzw. Dateien einem bestehenden Archiv hinzugefügt.

» Codebeispiel #1: WinZip wird mit der Shell-Funktion ausgeführt.

» Codebeispiel #2: WinZip wird mit der Run-Methode des Shell-Objektes aus der "Windows Script Host"-Objektbibliothek ausgeführt. Daher muss der Dateipfad von WinZip32.exe nicht bekannt sein.

.VBA-Code #1
Public Sub ZipFile1()
  Shell "C:\Programme\WinZip\WinZip32.exe -a C:\Daten\EineMappe.zip C:\Daten\EineMappe.xls"
End Sub

.VBA-Code #2
Public Sub ZipFile2()
  CreateObject("WScript.Shell").Run "WinZip32.exe -a C:\Daten\EineMappe.zip C:\Daten\EineMappe.xls"
End Sub

Verwandte Codebeispiele

Mehrere Dateien mit WinZip packen

Dateien eines Ordners mit WinZip packen

Aktive Arbeitsmappe mit WinZip packen

Zip-Datei mit WinZip entpacken

 

Weitere Informationen

VBA-Befehle und -Funktionen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Mehrere Dateien mit WinZip packen

.Beschreibung
...

Mit dem Schalter "-a" wird ein neues Archiv (zip-Datei) angelegt bzw. Dateien einem bestehenden Archiv hinzugefügt.

Es spielt keine Rolle, wo die zu komprimierenden Dateien liegen, da jeweils der vollständige Dateipfad angegeben wird.

» Codebeispiel #1: WinZip wird mit der Shell-Funktion ausgeführt.

» Codebeispiel #2: WinZip wird mit der Run-Methode des Shell-Objektes aus der "Windows Script Host"-Objektbibliothek ausgeführt. Daher muss der Dateipfad von WinZip32.exe nicht bekannt sein.

» Codebeispiel #3: Dieses Beispiel zeigt, wie ein Dateipfad übergeben werden muss, wenn er Leerzeichen enthält.

» Codebeispiel #4: Dieses Beispiel zeigt, wie ein Dateipfad übergeben werden muss, wenn er Leerzeichen enthält und anschliessend ein weiterer Dateipfad folgt.

» Codebeispiel #5: Dieses Beispiel zeigt, wie die Dateipfade zu einer Zeichenfolge zusammengefügt werden. Jeder Dateipfad wird in Anführungszeichen eingefasst, also auch dann, wenn er kein Leerzeichen enthält. Übrigens muss in diesem Fall zwischen den einzelnen Pfaden kein Leerzeichen angegeben werden.

.VBA-Code #1
Public Sub ZipFile1()
  Shell "C:\Programme\WinZip\WinZip32.exe -a C:\Daten\Mappen.zip C:\Daten\Mappe1.xls C:\Save\Mappe2.xls"
End Sub

.VBA-Code #2
Public Sub ZipFile2()
  CreateObject("WScript.Shell").Run "WinZip32.exe -a C:\Daten\Mappen.zip C:\Daten\Mappe1.xls C:\Save\Mappe2.xls"
End Sub

.VBA-Code #3
Public Sub ZipFile3()
  CreateObject("WScript.Shell").Run "WinZip32.exe -a C:\Daten\Mappen.zip C:\Daten\Mappe1.xls ""C:\Excel\Mappe 3.xls""
End Sub

.VBA-Code #4
Public Sub ZipFile4()
  CreateObject("WScript.Shell").Run "WinZip32.exe -a C:\Daten\Mappen.zip C:\Daten\Mappe1.xls ""C:\Excel\Mappe 3.xls"" C:\Save\Mappe2.xls"
End Sub

.VBA-Code #5
Public Sub ZipFile5()
  Dim intCounter As Integer
  Dim strFiles As String

  Dim astrFiles(1 To 3) As String
  astrFiles(1) = "C:\Daten\Mappe1.xls"
  astrFiles(2) = "C:\Save\Mappe2.xls"
  astrFiles(3) = "C:\Excel\Mappe 3.xls"

  For intCounter = 1 To 3
    strFiles = strFiles & Chr$(34) & astrFiles(intCounter) & Chr$(34)
  Next intCounter
  CreateObject("WScript.Shell").Run "WinZip32.exe -a C:\Daten\Mappen.zip " & strFiles
End Sub

Verwandte Codebeispiele

Datei mit WinZip packen

Dateien eines Ordners mit WinZip packen

Aktive Arbeitsmappe mit WinZip packen

Zip-Datei mit WinZip entpacken

 

Weitere Informationen

VBA-Befehle und -Funktionen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Dateien eines Ordners mit WinZip packen

.Beschreibung
...

Mit dem Schalter "-a" wird ein neues Archiv (zip-Datei) angelegt bzw. Dateien einem bestehenden Archiv hinzugefügt.

» Codebeispiel #1: WinZip wird mit der Shell-Funktion ausgeführt.

» Codebeispiel #2: WinZip wird mit der Run-Methode des Shell-Objektes aus der "Windows Script Host"-Objektbibliothek ausgeführt. Daher muss der Dateipfad von WinZip32.exe nicht bekannt sein.

In den Beispielen werden alle Dateien des Ordners "C:\Daten\Statistik" als Datei "C:\Daten\Dateien.zip" gepackt.

.VBA-Code #1
Public Sub ZipFile1()
  Shell "C:\Programme\WinZip\WinZip32.exe -a C:\Daten\Dateien.zip C:\Daten\Statistik"
End Sub

.VBA-Code #2
Public Sub ZipFile2()
  CreateObject("WScript.Shell").Run "WinZip32.exe -a C:\Daten\Dateien.zip C:\Daten\Statistik"
End Sub

Verwandte Codebeispiele

Datei mit WinZip packen

Mehrere Dateien mit WinZip packen

Aktive Arbeitsmappe mit WinZip packen

Zip-Datei mit WinZip entpacken

 

Weitere Informationen

VBA-Befehle und -Funktionen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Aktive Arbeitsmappe mit WinZip packen

.Beschreibung
Diese beiden Codebeispiele zeigen, wie man eine momentan geöffnete Arbeitsmappe packen kann. Es wird mittels WinZip eine zip-Datei erstellt, in der sich die Arbeitsmappendatei (xls-Datei) befindet.

» Codebeispiel #1: Bei diesem Beispiel muss der Pfad von WinZip32.exe bekannt sein, weil er bei der Shell-Funktion angegeben werden muss. Da Shell ein Programm asynchron startet, kann der Zugriffsmodus der Arbeitsmappe am Schluss des Makros nicht auf Lesen/Schreiben zurückgestellt werden (d.h. Schreibgeschützt aufheben). Dies, weil man nicht weiss, ob die Erstellung der zip-Datei bereits vollendet ist. Der Name der zip-Datei ist in diesem Beispiel fix eingetragen.

» Codebeispiel #2: Da dieses Beispiel die Run-Methode aus der "Windows Script Host Object Model"-Bibliothek verwendet, muss der Pfad von WinZip32.exe nicht bekannt sein. Zudem wird die VBA-Codeausführung so lange angehalten, bis die Erstellung der zip-Datei abgeschlossen und WinZip beendet ist. Aus diesem Grund kann die Arbeitsmappe am Schluss des Makros wieder auf den Lesen/Schreiben-Zugriffsmodus umgestellt werden. Der Pfad und Dateiname der zip-Datei wird hier automatisch gebildet.

.VBA-Code #1
Public Sub ZipWorkbook1()
  ActiveWorkbook.Save
  ActiveWorkbook.ChangeFileAccess xlReadOnly
  Shell "C:\Programme\WinZip\WinZip32.exe -a C:\Daten\EineMappe.zip " & ActiveWorkbook.FullName
End Sub

.VBA-Code #2
Public Sub ZipWorkbook2()
  With ActiveWorkbook
    .Save
    .ChangeFileAccess xlReadOnly
    CreateObject("WScript.Shell").Run "WinZip32.exe -a " & .Path & "\" _

       & CreateObject("Scripting.FileSystemObject").GetBaseName(.FullName) _
       & ".zip " & .FullName, 2, True
   .ChangeFileAccess xlReadWrite
  End With
End Sub

Verwandte Codebeispiele

Datei mit WinZip packen

Mehrere Dateien mit WinZip packen

Dateien eines Ordners mit WinZip packen

Zip-Datei mit WinZip entpacken

 

Weitere Informationen

VBA-Befehle und -Funktionen

VBA-Spezialthema: Windows Script Host (WSH)

VBA-Spezialthema: FileSystemObject (FSO)

Excel-Objektmodell: Methoden des Workbook-Objektes

Excel-Objektmodell: Eigenschaften des Workbook-Objektes


Zip-Datei mit WinZip entpacken

.Beschreibung
...

Mit dem Schalter "-u" wird eine zip-Datei entpackt.

» Codebeispiel #1: WinZip wird mit der Shell-Funktion ausgeführt.

» Codebeispiel #2: WinZip wird mit der Run-Methode des Shell-Objektes aus der "Windows Script Host"-Objektbibliothek ausgeführt. Daher muss der Dateipfad von WinZip32.exe nicht bekannt sein.

.VBA-Code #1
Public Sub UnzipFile1()
  Shell "C:\Programme\WinZip\WinZip32.exe -u C:\Daten\Dateien.zip C:\Daten"
End Sub

.VBA-Code #2
Public Sub UnzipFile2()
  CreateObject("WScript.Shell").Run "WinZip32.exe -u C:\Daten\Dateien.zip C:\Daten"
End Sub

Verwandte Codebeispiele

Datei mit WinZip packen

Mehrere Dateien mit WinZip packen

Dateien eines Ordners mit WinZip packen

Aktive Arbeitsmappe mit WinZip packen

 

Weitere Informationen

VBA-Befehle und -Funktionen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Grösse des belegten Arbeitsspeichers der geöffneten Arbeitsmappen ermitteln

.Beschreibung
Beschreibung folgt.

Beanspruchter Arbeitsspeicher der geöffneten Arbeitsmappen für Daten.

Der Speicher wird gewöhnlich anhand der MemoryUsed-Eigenschaft des Application-Objektes ermittelt. Man kann aber auch die INFO-Tabellenfunktion mit dem Infotyp "memused" oder "benutztspeich" verwenden, die mittels Evaluate-Methode ausgewertet wird.

Die Zahl 1048576 ergibt sich aus 1'024 × 1'024 bzw. 1'024^2.

 

.VBA-Code #1
Public Sub GetUsedMemory1()
  MsgBox "Beanspruchter Arbeitsspeicher: " & Application.MemoryUsed & " Bytes"
End Sub

.VBA-Code #2
Public Sub GetUsedMemory2()
  MsgBox "Beanspruchter Arbeitsspeicher: " & Format$(Application.MemoryUsed, "#,##0.0#") / 1024 & " KB"
End Sub

.VBA-Code #3
Public Sub GetUsedMemory3()
  MsgBox "Beanspruchter Arbeitsspeicher: " & Format$(Application.MemoryUsed, "#,##0.0#") / 1048576 & " MB"
End Sub

.VBA-Code #4
Public Sub GetUsedMemory4()
  MsgBox "Beanspruchter Arbeitsspeicher: " & Application.Evaluate("=INFO(""memused"")") & " Bytes"
End Sub

Verwandte Codebeispiele

Grösse des gesamten und verfügbaren physischen Speichers (RAM) ermitteln

Grösse der Speicherauslagerungsdatei von Windows ermitteln

 

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Ungültige Zeichen in einem Dateinamen entfernen

.Beschreibung
Beschreibung folgt.

Die Zeichen &, :, <, > und " werden entfernt.

Die Zeichen /, \, *, ? und | werden in - umgewandelt.

Aus dem im Beispiel verwendeten Dateinamen "Test: Dateiname mit <*> und <?>.xls" wird "Test Dateiname mit - und -.xls".

.VBA-Code
Public Function RemoveInvalidCharacters(ByVal strName As String) As String
  With Application
    strName = .Substitute(strName, "&", "")
    strName = .Substitute(strName, ":", "")
    strName = .Substitute(strName, "<", "")
    strName = .Substitute(strName, ">", "")
    strName = .Substitute(strName, Chr$(34), "")
    strName = .Substitute(strName, "/", "-")
    strName = .Substitute(strName, "\", "-")
    strName = .Substitute(strName, "*", "-")
    strName = .Substitute(strName, "?", "-")
    strName = .Substitute(strName, "|", "-")
  End With
  RemoveInvalidCharacters = strName
End Function

'*** Aufruf ***
Sub TestCall()
  Const strFilename As String = "Test: Dateiname mit <*> und <?>.xls"
  MsgBox RemoveInvalidCharacters(strFilename)
End Sub

To Top


Hilfedatei eines VBA-Projektes festlegen

.Beschreibung
Beschreibung folgt.

» Codebeispiel #1: ThisWorkbook

» Codebeispiel #2: ActiveWorkbook

» Codebeispiel #3: ActiveVBProject

» Codebeispiel #4: Verzeichnis der Arbeitsmappe. Code am besten in Workbook_Open-Ereignisprozedur einfügen.

» Codebeispiel #5: Aktuelles Verzeichnis (relativer Pfad).

 

.VBA-Code #1
Public Sub SetProjectHelpFile1()
  ThisWorkbook.VBProject.HelpFile = "C:\Daten\Hilfedatei.hlp"
End Sub

.VBA-Code #2
Public Sub SetProjectHelpFile2()
  ActiveWorkbook.VBProject.HelpFile = "C:\Daten\Hilfedatei.hlp"
End Sub

.VBA-Code #3
Public Sub SetProjectHelpFile3()
  Application.VBE.ActiveVBProject.HelpFile = "C:\Daten\Hilfedatei.hlp"
End Sub

.VBA-Code #4
Public Sub SetProjectHelpFile4()
  If Right$(ThisWorkbook.Path, 1) <> "\" Then
    ThisWorkbook.VBProject.HelpFile = ThisWorkbook.Path & "\Hilfedatei.hlp"
  Else
    ThisWorkbook.VBProject.HelpFile = ThisWorkbook.Path & "Hilfedatei.hlp"
  End If
End Sub

.VBA-Code #5
Public Sub SetProjectHelpFile5()
  ThisWorkbook.VBProject.HelpFile = "Hilfedatei.hlp"
End Sub

Verwandte Codebeispiele

Hilfedatei eines VBA-Projektes öffnen

Prüfen, ob die Hilfedatei eines VBA-Projektes existiert

Hilfedatei eines Symbolleisten-Steuerelementes festlegen

To Top


Vorlagen-Ordner von Microsoft Excel abfragen

.Beschreibung
Der Pfad des Vorlagen-Ordners von Microsoft Excel kann über die TemplatesPath-Eigenschaft herausgefunden werden. Die Eigenschaft ist schreibgeschützt, d.h. dass der Pfad nur gelesen aber nicht geändert werden kann.

.VBA-Code
Public Sub GetTemplatesPath()
  MsgBox "Vorlagen-Pfad: " & Application.TemplatesPath
End Sub

.Hinweis
Bitte beachten Sie, dass wegen eines Excel-Bugs der Verzeichnispfad am Ende einen zusätzlichen Backslash besitzt (z.B. "C:\Programme\Microsoft Office\Vorlagen\").

Verwandte Codebeispiele

Vorlagen-Ordner von Microsoft Excel ohne Microsoft Excel abfragen

Gemeinsame Vorlagen-Ordner von Microsoft Excel abfragen

 

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Vorlagen-Ordner von Microsoft Excel ohne Microsoft Excel abfragen

.Beschreibung
Der Vorlagen-Ordner von Microsoft Excel kann auch ermittelt werden, ohne dass dazu die Abfrage in einem Excel VBA-Projekt vorgenommen oder das Excel-Objektmodell benötigt wird. Der Verzeichnispfad ist nämlich in der Windows Registry gespeichert. Er ist als Eintrag "(Standard)" im Schlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\8.0\Common\FileNew\LocalTemplates" abgelegt.

Die nachstehenden Codebeispiele ermitteln beide den Vorlagen-Ordner. Das Codebeispiel #2 ist eine gekürzte Variante (ohne Benutzung von Variablen).

.VBA-Code #1
Public Sub GetTemplatesPath1()
  Dim strPath As String
  Dim objShell As Object
  Set objShell = CreateObject("WScript.Shell")
  strPath = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\8.0\Common\FileNew\LocalTemplates\")
  MsgBox "Vorlagen-Pfad: " & strPath
  Set objShell = Nothing
End Sub

.VBA-Code #2
Public Sub GetTemplatesPath2()
  MsgBox "Vorlagen-Pfad: " & CreateObject("WScript.Shell").RegRead _
      ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\8.0\Common\FileNew\LocalTemplates\")

End Sub

.Hinweis
Beachten Sie bitte, dass der in der Registry abgelegte Pfadname am Ende kein zusätzliches Backslash-Zeichen besitzt. Wenn Sie den Ordner mit Excel-VBA anhand der TemplatesPath-Eigenschaft abfragen, wird ein Backslash zu viel zurückgegeben (z.B. "C:\Programme\Microsoft Office\Vorlagen\").

Verwandte Codebeispiele

Vorlagen-Ordner von Microsoft Excel abfragen

Gemeinsame Vorlagen-Ordner von Microsoft Excel abfragen

 

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Gemeinsame Vorlagen-Ordner von Microsoft Excel abfragen

.Beschreibung
Der Pfad des Ordners für gemeinsame Vorlagen von Microsoft Excel wird anhand der NetworkTemplatesPath-Eigenschaft ermittelt. Die Eigenschaft ist schreibgeschützt, d.h. dass der Pfad nicht geändert werden kann.

Bitte beachten Sie, dass der Verzeichnispfad einen abschliessenden Backslash aufweisen kann (z.B. "Z:\Microsoft Office\Gemeinsame Vorlagen\").

.VBA-Code
Public Sub GetNetworkTemplatesPath()
  MsgBox "Pfad für gemeinsame Vorlagen: " & Application.NetworkTemplatesPath
End Sub

Verwandte Codebeispiele

Vorlagen-Ordner von Microsoft Excel abfragen

Vorlagen-Ordner von Microsoft Excel ohne Microsoft Excel abfragen

 

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Internet Explorer starten

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub RunInternetExplorer1()
  Shell "C:\Programme\Plus!\Microsoft Internet\IExplore.exe", vbNormalFocus
End Sub

.VBA-Code #2
Public Sub RunInternetExplorer2()
  CreateObject("WScript.Shell").Run "IExplore.exe ", vbNormalFocus
End Sub

.VBA-Code #3
Public Sub RunInternetExplorer3()
  Dim objIE As Object
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Visible = True
  Set objIE = Nothing
End Sub

.VBA-Code #4
Public Sub RunInternetExplorer4()
  Dim objIE As InternetExplorer
  Set objIE = New InternetExplorer
  objIE.Visible = True
  Set objIE = Nothing

End Sub

Verwandte Codebeispiele

Internet Explorer starten und Seite anzeigen

Internet Explorer im Vollbildmodus starten und Seite anzeigen

Internet Explorer mit einer bestimmten Fenstergrösse starten

Internet Explorer ohne Menü-, Status- und Symbolleisten starten

 

Weitere Informationen

VBA-Befehle und -Funktionen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Internet Explorer mit einer bestimmten Fenstergrösse starten

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub RunInternetExplorer1()
  Dim objIE As Object
  Set objIE = CreateObject("InternetExplorer.Application")
  With objIE
    .Top = 0
    .Left = 0
    .Height = 400
    .Width = 400
    .Visible = True
  End With
  Set objIE = Nothing
End Sub

.VBA-Code #2
Public Sub RunInternetExplorer2()
  Dim objIE As InternetExplorer
  Set objIE = New InternetExplorer
  With objIE
    .Top = 0
    .Left = 0
    .Height = 400
    .Width = 400
    .Visible = True
  End With
  Set objIE = Nothing

End Sub

To Top


Internet Explorer ohne Menü-, Status- und Symbolleisten starten

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub RunInternetExplorer1()
  Dim objIE As Object
  Set objIE = CreateObject("InternetExplorer.Application")
  With objIE
    .AddressBar = False
    .MenuBar = False
    .StatusBar = False
    .Toolbar = False
    .Visible = True
  End With
  Set objIE = Nothing
End Sub

.VBA-Code #2
Public Sub RunInternetExplorer2()
  Dim objIE As InternetExplorer
  Set objIE = New InternetExplorer
  With objIE
    .AddressBar = False
    .MenuBar = False
    .StatusBar = False
    .Toolbar = False
    .Visible = True
  End With
  Set objIE = Nothing

End Sub

To Top


Arbeitsbereich speichern-Dialog anzeigen

.Beschreibung
» Codebeispiel #1: Dialog anzeigen.

» Codebeispiel #2: Dialog anzeigen und Dateiname vorblenden. Aktuelles Arbeitsverzeichnis.

» Codebeispiel #3: Dialog anzeigen, Dateiname vorblenden und angegebenes Verzeichnis anzeigen.

» Codebeispiel #4: Dialog anzeigen und angegebenen Verzeichnis anzeigen. Kein Dateiname vorblenden.

» Codebeispiel #5: Dialog anzeigen. Wenn der Benutzer die "Speichern"-Schaltfläche klickt, wird Wahr (bzw. True) zurückgegeben. Bei "Abbrechen" wird Falsch (False) zurückgegeben.

.VBA-Code #1
Public Sub ShowSaveWorkspaceDialog1()
  Application.Dialogs(xlDialogSaveWorkspace).Show
End Sub

.VBA-Code #2
Public Sub ShowSaveWorkspaceDialog2()
  Application.Dialogs(xlDialogSaveWorkspace).Show Arg1:="EinArbeitsbereich.xlw"
End Sub

.VBA-Code #3
Public Sub ShowSaveWorkspaceDialog3()
  Application.Dialogs(xlDialogSaveWorkspace).Show Arg1:="C:\Daten\EinArbeitsbereich.xlw"
End Sub

.VBA-Code #4
Public Sub ShowSaveWorkspaceDialog4()
  Application.Dialogs(xlDialogSaveWorkspace).Show Arg1:="C:\Daten\"
End Sub

.VBA-Code #5
Public Sub ShowSaveWorkspaceDialog5()
  MsgBox Application.Dialogs(xlDialogSaveWorkspace).Show(Arg1:="EinArbeitsbereich.xlw")
End Sub

To Top


Arbeitsblatt einfügen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Es können keine Argumente mitgegeben werden.

.VBA-Code
Public Sub ShowInsertSheetDialog()
  Application.Dialogs(xlDialogWorkbookNew).Show
End Sub

To Top


Verknüpfungen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Excel-Dialog mit der Liste der Datenquellen von externen Verknüpfungen.

Es können keine (sinnvollen) Argumente mitgegeben werden.

.VBA-Code
Public Sub ShowLinksDialog()
  Application.Dialogs(xlDialogOpenLinks).Show
End Sub

To Top


Druckereinrichtung-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Zeigt ein kleines Dialogfenster mit einer Liste der verfügbaren Drucker. Der Benutzer kann den zu aktivierenden Drucker auswählen. Über eine "Optionen"-Schaltfläche können die Eigenschaften des markierten Druckers eingestellt werden.

Es können keine (sinnvollen) Argumente mitgegeben werden.

.VBA-Code
Public Sub ShowPrinterSetupDialog()
  Application.Dialogs(xlDialogPrinterSetup).Show
End Sub

To Top


Favoriten öffnen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub ShowOpenFavoritesDialog()
  Application.CommandBars.FindControl(Id:=1021).Execute
End Sub

To Top


Zu Favoriten hinzufügen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Dieser Dialog kann nur angezeigt werden, wenn es eine aktive Arbeitsmappe gibt und diese schon einmal gespeichert wurde (keine neue Mappe).

.VBA-Code
Public Sub ShowAddToFavoritesDialog()
  Application.CommandBars.FindControl(Id:=1022).Execute
End Sub

To Top


Internet-Seite öffnen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub ShowOpenWebPageDialog()
  Application.CommandBars.FindControl(Id:=1015).Execute
End Sub

To Top


Startseite bestimmen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Stellt die Startseite ein, die über die Schaltfläche "Startseite" der Symbolleiste "Web" von Microsoft Excel (bzw. eines anderen Microsoft Office-Programmes) geöffnet wird. Die Startseite des Internet Explorers wird dadurch ebenfalls geändert.

Dieser Dialog kann nur angezeigt werden, wenn es eine aktive Arbeitsmappe gibt und diese schon einmal gespeichert wurde (keine neue Mappe).

.VBA-Code
Public Sub ShowSetStartPageDialog()
  Application.CommandBars.FindControl(Id:=2057).Execute
End Sub

To Top


Suchseite bestimmen-Dialog anzeigen

.Beschreibung
Beschreibung folgt.

Stellt die Suchseite ein, die über die Schaltfläche "Im Web suchen" der Symbolleiste "Web" von Microsoft Excel (bzw. eines anderen Microsoft Office-Programmes) geöffnet wird. Die Suchseite des Internet Explorers wird dadurch nicht geändert.

Dieser Dialog kann nur angezeigt werden, wenn es eine aktive Arbeitsmappe gibt und diese schon einmal gespeichert wurde (keine neue Mappe).

.VBA-Code
Public Sub ShowSetSearchPageDialog()
  Application.CommandBars.FindControl(Id:=2058).Execute
End Sub

To Top


Verknüpfung erstellen-Dialog von Windows anzeigen

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub ShowAddShortcutDialog()
  Const Path As String = "C:\Daten"
  Shell "RunDLL32.exe AppWiz.Cpl,NewLinkHere " & strPath & "\", vbNormalFocus
End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Systemsteuerung-Eigenschaften-Dialoge von Windows anzeigen

.Beschreibung
Beschreibung folgt.

cpl-Dateien, im Windows System-Verzeichnis.

.VBA-Code
Public Sub ShowSystemControlPropertiesDialog()
  Shell "RunDLL32.exe shell32.dll,Control_RunDLL appwiz.cpl", vbNormalFocus    'Software

 

End Sub

Weitere Informationen

VBA-Befehle und -Funktionen

To Top


Kopierte Zelle auf einem Arbeitsblatt als Hyperlink einfügen

.Beschreibung
Beschreibung folgt.

Befehl "Als Hyperlink einfügen" des Bearbeiten-Menüs.

.VBA-Code
Public Sub InsertCellAsHyperlink()
  '1. Zelle in Zwischenablage kopieren
  '2. Zielzelle selektieren

  '3. Diese Codezeile ausführen:
  Application.CommandBars.FindControl(Id:=2787).Execute
End Sub

To Top


Pfad des Favoriten-Ordners ermitteln

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub GetFavoritesFolder()
  MsgBox "Favoriten-Ordner: " & CreateObject("WScript.Shell").SpecialFolders("Favorites")
End Sub

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Pfad des Eigene Dateien-Ordners ermitteln

.Beschreibung
Beschreibung folgt.

.VBA-Code
Public Sub GetPersonalFolder()
  MsgBox "Eigene Dateien-Ordner: " & CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
End Sub

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Pfad des Windows Desktops ermitteln

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub GetUserDesktopFolder()
  MsgBox "Windows Desktop-Ordner des Benutzers: " & CreateObject("WScript.Shell").SpecialFolders("Desktop")
End Sub

.VBA-Code #2
Public Sub GetAllUsersDesktopFolder()
  MsgBox "Windows Desktop-Ordner aller Benutzer: " & CreateObject("WScript.Shell").SpecialFolders("AllUsersDesktop")
End Sub

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Pfad des Autostart-Ordners ermitteln

.Beschreibung
Beschreibung folgt.

.VBA-Code #1
Public Sub GetUserStartupFolder()
  MsgBox "Autostart-Ordner des Benutzers: " & CreateObject("WScript.Shell").SpecialFolders("Startup")
End Sub

.VBA-Code #2
Public Sub GetAllUsersStartupFolder()
  MsgBox "Autostart-Ordner aller Benutzer: " & CreateObject("WScript.Shell").SpecialFolders("AllUsersStartup")
End Sub

Weitere Informationen

VBA-Spezialthema: Windows Script Host (WSH)

To Top


Aktuelles Verzeichnis ermitteln

.Beschreibung
Beschreibung folgt.

Mit der VBA-Funktion CurDir kann man das aktuelle Verzeichnis herausfinden.

Wenn bei CurDir ein Laufwerksbuchstabe angegeben wird, so wird das aktuelle Verzeichnis dieses Laufwerkes angezeigt.

.VBA-Code #1
Public Sub GetCurrentDirectory1()
  MsgBox "Aktuelles Verzeichnis: " & CurDir
End Sub

.VBA-Code #2
Public Sub GetCurrentDirectory2()
  MsgBox "Aktuelles Verzeichnis des C:-Laufwerkes: " & CurDir("C:")
End Sub

Verwandte Codebeispiele

Aktuelles Verzeichnis wechseln

Aktuelles Laufwerk wechseln

 

Weitere Informationen

VBA-Befehle und -Funktionen

Kompatibilität zwischen Excel für Windows und Excel für Macintosh

To Top


Prüfen, ob eine Laufwerk-Angabe gültig ist

.Beschreibung
Insbesondere wenn ein Benutzer die Möglichkeit besitzt, ein zu verwendendes Laufwerk selbst zu bestimmen, so sollte man die von ihm gemachte Laufwerk-Angabe überprüfen. Bei der Überprüfung geht es darum festzustellen, ob der Laufwerksname grundsätzlich gültig ist. Ob das Laufwerk tatsächlich existiert bzw. bereits ist, wird hier nicht kontrolliert.

Normal: Ein oder zwei Zeichen, "x:", zuerst Buchstabe von A bis Z, dann Doppelpunkt

UNC: Mindestens fünf Zeichen, "\\x\y", zuerst zwei Backslash-Zeichen, dann Zeichen, dann Backslash-Zeichen, dann Zeichen

Die Validierung der Laufwerk-Angabe wurde als Funktion IsDriveValid gekapselt. Der Funktion wird der zu überprüfende Laufwerksname übergegeben. Zurückgegeben wird je nach Gültigkeit entweder Wahr (True) oder Falsch (False).

.VBA-Code
'Codemodul
Public Function IsDriveValid(ByVal strDrive As String) As Boolean
  Dim intPos As Integer
  Dim intChar As Integer
  Dim bolInvalid As Boolean
  'Führende und nachfolgende Leerzeichen entfernen
  strDrive = Trim$(strDrive)
  If Len(strDrive) > 1 Then
    'Es wurden zwei oder mehr Zeichen angegeben
    If Len(strDrive) = 2 Then
      If Asc(UCase$(Left$(strDrive, 1))) >= 65 And Asc(UCase$(Left$(strDrive, 1))) <= 90 Then
        'Das erste von zwei Zeichen ist ein Buchstabe
        If Right$(strDrive, 1) = ":" Then
          'Das zweite Zeichen ist ein Doppelpunkt und daher der gesamte Laufwerksname gültig
          IsDriveValid = True
        Else
          'Das zweite Zeichen ist kein Doppelpunkt
          IsDriveValid = False
        End If
      Else
        'Das erste von zwei Zeichen ist kein Buchstabe
        IsDriveValid = False
      End If
    ElseIf Len(strDrive) >= 5 Then
      If Left$(strDrive, 2) = "\\" Then
        'Die ersten zwei von fünf oder mehr Zeichen sind Backslashs
        intPos = InStr(4, strDrive, "\")
        If intPos > 0 Then
          'Ein dritter Backslash ist vorhanden, wobei zwischen diesem und den
          'ersten zwei Zeichen ein oder mehr Zeichen stehen
          For intChar = 3 To intPos - 1
            If InStr("*?\/|<>:""", Mid$(strDrive, intChar, 1)) > 0 Then
               'Ungültiges Zeichen gefunden
              bolInvalid = True
              Exit For
            End If
          Next intChar
          If bolInvalid = False Then
             'Alle Zeichen zwischen den ersten zwei und dem dritten Backslash sind gültig
            If Len(strDrive) > intPos Then
               'Nach dem dritten Backslash folgt mindestens ein Zeichen
              For intChar = intPos + 1 To Len(strDrive)
                 If InStr("*?\/|<>:""", Mid$(strDrive, intChar, 1)) > 0 Then
                   'Ungültiges Zeichen gefunden
                   bolInvalid = True
                   Exit For
                 End If
              Next intChar
              If bolInvalid = False Then
                 'Alle nachfolgenden Zeichen sind gültig
und daher der gesamte Laufwerksname gültig
                 IsDriveValid = True
              Else
                 'Ein nachfolgendes Zeichen ist ungültig
                 IsDriveValid = False
              End If
            Else
               'Nach dem dritten Backslash folgen keine Zeichen
              IsDriveValid = False
            End If
          Else
            'Ein Zeichen zwischen den Backslashs ist ungültig
            IsDriveValid = False
          End If
        Else
          'Es ist kein dritter Backslash vorhanden
          IsDriveValid = False
        End If
      Else
        'Die ersten beiden Zeichen sind keine Backslashs
        IsDriveValid = False
      End If
    Else
      'Es wurden drei oder vier Zeichen angegeben
      IsDriveValid = False
    End If
  Else
    'Es wurden weniger als zwei Zeichen angegeben
    IsDriveValid = False
  End If
End Function

'*** Aufruf ***
Sub TestCall()
  'Beispiele von gültigen Laufwerksnamen:
  MsgBox IsDriveValid("C:")
  MsgBox IsDriveValid("\\Server\Freigabe")
  'Beispiele von ungültigen Laufwerksnamen:
  MsgBox IsDriveValid("C")
  MsgBox IsDriveValid("2:")
  MsgBox IsDriveValid("D:\")
  MsgBox IsDriveValid("\\Server\")
  MsgBox IsDriveValid("\\Server\Freigabe?")
  MsgBox IsDriveValid("\\Server\<Freigabe>")
  MsgBox IsDriveValid("\\Server*\Freigabe")
End Sub

To Top


Prüfen und warten, bis ein Datenträger in Laufwerk A: eingelegt ist

.Beschreibung
Es gibt Situationen, in denen man darauf angewiesen ist, dass sich in einem bestimmten Laufwerk ein Datenträger befindet. Dazu fordert man den Benutzer zum Einlegen des Datenträgers auf und prüft/wartet so lange, bis auf den Datenträger zugegriffen werden kann.

Das folgende Beispiel verwendet das Diskettenlaufwerk "A:". Der Laufzeitfehler 71 "Datenträger nicht bereit" zeigt an, dass keine Diskette eingelegt ist.

.VBA-Code
Public Sub WaitUntilDriveIsReady()
  On Error Resume Next
WaitForDisk:
  Dir "A:"
  If Err.Number = 71 Then
    Err.Clear
    If MsgBox("Bitte Diskette in Laufwerk A: einlegen.", vbRetryCancel Or vbInformation) = vbRetry Then
      'Wiederholen
      GoTo WaitForDisk
    Else
      'Abbrechen

      Exit Sub
    End If
  End If
  On Error GoTo 0
  'Laufwerk A: ist jetzt bereit
End Sub

.Hinweis
Beachten Sie bitte, dass je nach Gerätetyp ein anderer Laufzeitfehler auftreten kann. Wird zum Beispiel auf ein CD ROM-Laufwerk "E:" zugegriffen und es ist keine CD eingelegt, erscheint der Laufzeitfehler 76 "Pfad nicht gefunden".

Verwandte Codebeispiele

Prüfen, ob ein Laufwerk verfügbar und bereit ist

Prüfen, ob das Laufwerk A: bereit ist

To Top


Prüfen, ob der Schreibschutz einer Diskette eingeschaltet ist

.Beschreibung
Dieses Beispiel zeigt, wie man feststellen kann, ob der Schreibschutz einer Diskette eingeschaltet ist.

.VBA-Code
Public Sub CheckWriteProtection()

End Sub

To Top


Prüfen, ob beim Speichern einer Arbeitsmappe eine Sicherungsdatei erstellt wird

.Beschreibung
Mit der CreateBackup-Eigenschaft des Workbook-Objektes kann man abfragen, ob beim Speichern der Arbeitsmappe eine Sicherungsdatei erstellt wird. Die Eigenschaft ist schreibgeschützt, d.h. dass man ihren Wert nicht verändern kann.

Einstellen anhand SaveAs.

.VBA-Code
Public Sub CheckCreateBackup()
  MsgBox "Erstellung einer Sicherungsdatei beim Speichern: " & ActiveWorkbook.CreateBackup
End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


VBA-Programmausführung für x Sekunden anhalten

.Beschreibung
...

Wait-Methode des Application-Objektes.

API-Prozedur Sleep

 

.VBA-Code #1
Public Sub WaitForTime1()
  Application.Wait Now + TimeValue("0:00:01")

End Sub

.VBA-Code #2
Public Sub WaitForTime2()
  If Application.Wait(Now + TimeValue("0:00:01")) Then

    MsgBox "Eine Sekunde ist abgelaufen"
  End If
End Sub

.VBA-Code #3
'Deklarationsbereich
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'Codemodul
Public Sub WaitForTime3()
  Sleep 1000

End Sub

To Top


Benutzerdefinierte Dokument-Eigenschaften einer geöffneten Arbeitsmappe auflisten

.Beschreibung
Dieser VBA-Code listet die benutzerdefinierten Dokument-Eigenschaften einer Arbeitsmappe auf.

Im Beispiel wird die aktive Arbeitsmappe verwendet.

Die Liste wird auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe erstellt.

.VBA-Code
Public Sub ListCustomDocumentProperties()
  Dim intCounter As Integer
  Dim objCustomProperties As Office.DocumentProperties
  Dim wksSheet As Worksheet
  Set objCustomProperties = ActiveWorkbook.CustomDocumentProperties
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  With wksSheet
    .Range("A1:F1").Value = Array("Nr.", "Name", "Wert", "Typ", "Verknüpfung", "Quelle")
    .Range("A1:F1").Font.Bold = True
    For intCounter = 1 To objCustomProperties.Count
      .Cells(intCounter + 1, 1).Value = intCounter
      .Cells(intCounter + 1, 2).Value = objCustomProperties(intCounter).Name
      .Cells(intCounter + 1, 3).Value = objCustomProperties(intCounter).Value
      Select Case objCustomProperties(intCounter).Type
        Case 1
          .Cells(intCounter + 1, 4).Value = "Number (Ganzzahl)"
        Case 2
          .Cells(intCounter + 1, 4).Value = "Boolean (Wahrheitswert)"
        Case 3
          .Cells(intCounter + 1, 4).Value = "Date (Datum)"
        Case 4
          .Cells(intCounter + 1, 4).Value = "String (Text)"
        Case 5
          .Cells(intCounter + 1, 4).Value = "Float (Dezimalzahl)"
        Case Else
          .Cells(intCounter + 1, 4).Value = "Unknown (Unbekannt)"
      End Select
      .Cells(intCounter + 1, 5).Value = objCustomProperties(intCounter).LinkToContent
      If objCustomProperties(intCounter).LinkToContent = True Then
        .Cells(intCounter + 1, 6).Value = objCustomProperties(intCounter).LinkSource
      End If
    Next intCounter
    .Columns("A:F").AutoFit
  End With
  Set wksSheet = Nothing
  Set objCustomProperties = Nothing
End Sub

To Top


Benutzerdefinierte Dokument-Eigenschaften einer Datei auflisten

.Beschreibung
Der hier vorgestellte Programmcode erstellt eine Liste aller benutzerdefinierten Dokument-Eigenschaften einer beliebigen Datei. Es können nur Dokument-Dateien verwendet werden, da nur diese überhaupt Dokument-Eigenschaften besitzen. Es kann sein, dass eine Dokument-Datei keine benutzerdefinierten Dokument-Eigenschaften enthält.

Bitte beachten Sie, dass sich die angegebene Datei nicht in Bearbeitung befinden darf.

.VBA-Code
Public Sub ListCustomDocumentProperties()
  Dim intCounter As Integer
  Dim objDSOReader As Object
  Dim objDSODocument As Object
  Dim objDSOCustomProps As Object
  Dim wksSheet As Worksheet
  Dim strType As String
  Set objDSOReader = CreateObject("DSOleFile.PropertyReader")
  On Error Resume Next
  Set objDSODocument = objDSOReader.GetDocumentProperties("C:\Daten\EineMappe.xls")
  If Err.Number = 3 Then
    MsgBox "Die Datei wird gerade bearbeitet.", vbInformation
    Exit Sub
  ElseIf Err.Number = 2 Then
    MsgBox "Die Datei besitzt keine Dokument-Eigenschaften.", vbInformation
    Exit Sub
  ElseIf Err.Number <> 0 Then
    MsgBox "Beim Zugriff auf die Datei ist ein Fehler aufgetreten!", vbExclamation
    Exit Sub
  End If
  On Error GoTo 0
  Set wksSheet = ActiveWorkbook.Worksheets.Add
  With wksSheet
    .Range("A1:D1").Value = Array("Nr.", "Name", "Wert", "Typ")
    .Range("A1:D1").Font.Bold = True
    For Each objDSOCustomProps In objDSODocument.CustomProperties
      intCounter = intCounter + 1
      .Cells(intCounter + 1, 1).Value = intCounter
      .Cells(intCounter + 1, 2).Value = objDSOCustomProps.Name
      .Cells(intCounter + 1, 3).Value = objDSOCustomProps.Value
      Select Case objDSOCustomProps.Type
        Case 1
          strType = "String (Text)"
        Case 2
          strType = "Long (Ganzzahl)"
        Case 3
          strType = "Double (Dezimalzahl)"
        Case 4
          strType = "Boolean (Wahrheitswert)"
        Case 5
          strType = "Date (Datum)"
        Case Else
          strType = "Unknown (Unbekannt)"
      End Select
      .Cells(intCounter + 1, 4).Value = strType
    Next
    .Columns("A:D").AutoFit
  End With
  Set wksSheet = Nothing
  Set objDSODocument = Nothing
  Set objDSOReader = Nothing
End Sub

.Hinweis
Dokumente enthalten häufig benutzerdefinierte Dokument-Eigenschaften, die nicht vom Benutzer sondern von der (Office-)Anwendung hinzugefügt wurden und für interne Zwecke dienen. Diese besitzen gewöhnlich eine Bezeichnung, die mit "_PID_" beginnt (z.B. "_PID_GUID" oder "_PID_HLINKS"). Sie können diese Eigenschaften einfach ignorieren.

Weitere Informationen

VBA-Spezialthema: OLE Document Properties (DSOFile)

To Top


Prüfen, ob eine geöffnete Arbeitsmappe ein duales Dateiformat verwendet

.Beschreibung
Es ist ganz einfach herauszufinden, ob eine in Microsoft Excel geöffnete Arbeitsmappe ein duales Dateiformat besitzt. Man muss lediglich die Eigenschaft FileFormat des Workbook-Objektes abfragen, ob sie den Wert der Konstante xlExcel9795 (diese besitzt den Wert 43) enthält. Dies ist das einzige existierende duale Dateiformat.

.VBA-Code
Public Sub CheckDualFileFormat()
  If ActiveWorkbook.FileFormat = xlExcel9795 Then
    MsgBox "Die Arbeitsmappe besitzt ein duales Dateiformat.", vbInformation
  Else
    MsgBox "Die Arbeitsmappe besitzt kein duales Dateiformat.", vbInformation
  End If
End Sub

Verwandte Codebeispiele

Prüfen, ob eine geschlossene Arbeitsmappe ein duales Dateiformat verwendet

 

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


Prüfen, ob eine geschlossene Arbeitsmappe ein duales Dateiformat verwendet

.Beschreibung
Auch das Herausfinden, ob eine geschlossene Arbeitsmappe ein duales Dateiformat besitzt, ist nicht sonderlich schwierig. Anhand den beiden Eigenschaften ProgId und Version aus der DSOFile-Bibliothek geht das ganz leicht. Immer wenn die ProgID der Dokumentdatei "Excel.Sheet.5" und die Version ungleich "5.0/95" ist, verwendet die Exceldatei ein duales Dateiformat.

Dieses Codebeispiel zeigt, wie die beiden Eigenschaften ausgewertet werden. Der Dateiname der Arbeitsmappe ist in der Konstante strFile abgelegt.

.VBA-Code
Public Sub CheckDualFileFormat()
  Const strFile As String = "C:\Daten\EineMappe.xls"
  Dim objDSOReader As Object
  Dim objDSODocument As Object
  Set objDSOReader = CreateObject("DSOleFile.PropertyReader")
  Set objDSODocument = objDSOReader.GetDocumentProperties(strFile)
  If objDSODocument.ProgId = "Excel.Sheet.5" And objDSODocument.Version <> "5.0/95" Then
    If objDSODocument.Version = "97/2000" Then
      MsgBox "Die Arbeitsmappe besitzt das duale Dateiformat 'Microsoft Excel 97 & 5.0/95-Arbeitsmappe'" & _
          " oder 'Microsoft Excel 97-2000 & 5.0/95-Arbeitsmappe'.", vbInformation
    Else
      MsgBox "Die Arbeitsmappe besitzt das duale Dateiformat 'Microsoft Excel 97-2002 & 5.0/95-Arbeitsmappe'" & _
          " oder 'Microsoft Excel 97-2003 & 5.0/95-Arbeitsmappe'.", vbInformation
    End If
  Else
    MsgBox "Die Arbeitsmappe besitzt kein duales Dateiformat.", vbInformation
  End If
  Set objDSODocument = Nothing
  Set objDSOReader = Nothing
End Sub

.Hinweis
Wenn die zu überprüfende Datei nicht existiert oder nicht verfügbar ist (z.B. weil sie in Microsoft Excel geöffnet ist), tritt ein Laufzeitfehler auf.

Verwandte Codebeispiele

Prüfen, ob eine geöffnete Arbeitsmappe ein duales Dateiformat verwendet

 

Weitere Informationen

VBA-Spezialthema: OLE Document Properties (DSOFile)

To Top


Prüfen, ob eine Arbeitsmappe direkt oder mit Microsoft Excel bearbeitet wird

.Beschreibung
Ein Office-Dokument wird gewöhnlich mit seiner jeweiligen Anwendung geöffnet und bearbeitet (z.B. eine Arbeitsmappe mit Microsoft Excel). Viele Office-Dokumente - dazu gehören auch Arbeitsmappen - können jedoch auch in andere Dokumente eingebettet und dann innerhalb der Anwendung des anderen Dokumentes direkt bearbeitet werden. Dieses Verfahren wird als 'Inplace Editing' bezeichnet.

Anhand der IsInplace-Eigenschaft kann man herausfinden, ob eine Arbeitsmappe direkt bearbeitet wird. Wenn IsInplace False enthält, findet die Bearbeitung in Microsoft Excel statt.

Das Codebeispiel #2 führt die Abfrage von IsInplace im Workbook_Open-Ereignis der Arbeitsmappe durch. Nur wenn die Mappe nicht direkt, sondern in Microsoft Excel bearbeitet wird, wird eine Willkommen-Meldung eingeblendet.

.VBA-Code #1
Public Sub CheckInplaceEditing1()
  MsgBox "Direkte Bearbeitung der Arbeitsmappe: " & ActiveWorkbook.IsInplace
End Sub

.VBA-Code #2
'Modul "DieseArbeitsmappe"
Private Sub Workbook_Open()
  If ThisWorkbook.IsInplace = False Then
    MsgBox "Willkommen zur Arbeitsmappe " & ThisWorkbook.Name & "!", vbInformation
  End If
End Sub

.Hinweis
Wenn die zu überprüfende Datei nicht existiert oder nicht verfügbar ist (z.B. weil sie in Microsoft Excel geöffnet ist), tritt ein Laufzeitfehler auf.

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


Prüfen, ob die persönliche Makro-Arbeitsmappe Personl.xls geöffnet ist

.Beschreibung
Dieses Codebeispiel überprüft, ob die persönliche Makro-Arbeitsmappe Personl.xls in der aktuellen Excel-Sitzung geöffnet ist.

Der Programmcode funktioniert übrigens nur in Microsoft Excel für Windows. Bei Microsoft Excel für Macintosh heisst die Arbeitsmappe "Personal Macro Workbook".

.VBA-Code
Public Sub IsPersonalMacroWorkbookOpen()
  Dim wkbWorkbook As Workbook
  Dim bolFound As Boolean
  For Each wkbWorkbook In Application.Workbooks
    If LCase$(wkbWorkbook.Name) = "personl.xls" Then
      bolFound = True
      Exit For
    End If
  Next
  If bolFound = True Then
    MsgBox "Die persönliche Makro-Arbeitsmappe ist geöffnet."
  Else
    MsgBox "Die persönliche Makro-Arbeitsmappe ist nicht geöffnet."
  End If
End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


Prüfen, ob in einer Arbeitsmappe externe Verknüpfungswerte gespeichert werden

.Beschreibung
Anhand der SaveLinkValues-Eigenschaft kann man herausfinden, ob externe Verknüpfungswerte in der Arbeitsmappe gespeichert werden. Wenn man eine neue Arbeitsmappe erstellt, steht diese Eigenschaft standardmässig auf True.

.VBA-Code
Public Sub CheckExternalLinkValuesSave()
  MsgBox "Speichern von externen Verknüpfungswerten: " & ActiveWorkbook.SaveLinkValues
End Sub

Tipp! Tipp!
Wenn Ihre Arbeitsmappe viele externe Zellbezüge enthält und dadurch viele Daten aus Zellen anderer Arbeitsmappen holt, sollten Sie die obige Eigenschaft auf False stellen. Dadurch können Sie zum Teil eine erheblich kleinere Arbeitsmappendatei erhalten.

Weitere Informationen

XLimits: Dateigrösse von Arbeitsmappen reduzieren
Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


Prüfen, ob eine Arbeitsmappe externe Verknüpfungen enthält

.Beschreibung
Die LinkSources-Methode des Workbook-Objektes gibt ein Datenfeld mit den in einer Arbeitsmappe enthaltenen externen Verknüpfungen zurück. Wenn ein Datenfeld leer ist (genauer gesagt eine Variant-Variable nicht initialisiert ist), enthält es den 'Pseudo'-Wert Empty (genau genommen ist Empty ein Variablen-Untertyp). Dieser Wert kann mit der IsEmpty- oder der TypeName-Funktion von VBA geprüft werden.

.VBA-Code #1
Public Sub CheckExternalLinks1()
  If IsEmpty(ActiveWorkbook.LinkSources) = True Then
    MsgBox "Die Arbeitsmappe enthält keine externen Verknüpfungen."
  Else
    MsgBox "Die Arbeitsmappe enthält externe Verknüpfungen."
  End If
End Sub

.VBA-Code #2
Public Sub CheckExternalLinks2()
  If TypeName(ActiveWorkbook.LinkSources) = "Empty" Then
    MsgBox "Die Arbeitsmappe enthält keine externen Verknüpfungen."
  Else
    MsgBox "Die Arbeitsmappe enthält externe Verknüpfungen."
  End If
End Sub

Verwandte Codebeispiele

Anzahl externe Verknüpfungen in einer Arbeitsmappe abfragen

 

Weitere Informationen

Excel-Objektmodell: Methoden des Workbook-Objektes

To Top


Anzahl externe Verknüpfungen in einer Arbeitsmappe abfragen

.Beschreibung
Die LinkSources-Methode des Workbook-Objektes gibt ein Datenfeld mit den externen Verknüpfungen in einer Arbeitsmappe zurück. Wie bei Datenfeldern üblich, kann man anhand UBound die Grösse bzw. Obergrenze abfragen, was in unserem Fall der Anzahl externer Verknüpfungen entspricht.

.VBA-Code
Public Sub CountExternalLinks()
  MsgBox "Die Arbeitsmappe enthält " & UBound(ActiveWorkbook.LinkSources) & " externe Verknüpfungen."
End Sub

.Hinweis
Wenn keine externen Verknüpfungen existieren, führt die Abfrage von UBound zum Laufzeitfehler 13 "Typen unverträglich", weil LinkSources kein Datenfeld sondern den Wert/Variablenuntertyp Empty zurückgibt.

Verwandte Codebeispiele

Prüfen, ob eine Arbeitsmappe externe Verknüpfungen enthält

 

Weitere Informationen

Excel-Objektmodell: Methoden des Workbook-Objektes

To Top


Prüfen, ob die aktuelle Excel-Sitzung im abgesicherten Modus (Safe Mode) ausgeführt wird

.Beschreibung
...

Titel des Anwendungsfensters überprüfen:
- Je nach landesspezifischer Version von Microsoft Excel (Sprache) muss eine andere Zeichenfolge überprüft werden (z.B. "Safe Mode" bei der englischen Version).
- Man kann eine beliebige Excel-Sitzung überprüfen, da man auf die Fenstertitel aller laufenden Anwendungen zugreifen kann (Word/Tasks-Auflistung).

Befehlszeile des Excel-Starts überprüfen:
- Parameter "/s", "/safe" bzw. "/safemode" in der Befehlszeile überprüfen.
- Funktioniert unabhängig der Excel-Sprache.
- Man kann nur die eigene Excel-Sitzung überprüfen, da man nicht auf die Befehlszeile einer anderen Anwendung zugreifen kann.

» Codebeispiel #1: Überprüfen des Anwendungsfenster-Titels von Microsoft Excel.

» Codebeispiel #2: Analysieren der Befehlszeile des Excel-Starts.

.VBA-Code #1
Public Sub CheckSafeMode1()
  If Right$(Application.Caption, 21) = "- Abgesicherter Modus" Then
    MsgBox "Microsoft Excel läuft im abgesicherten Modus."
  End If
End Sub

.VBA-Code #2
Public Sub CheckSafeMode2()

End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Application-Objektes

To Top


Prüfen, ob eine Microsoft Excel-Anwendung im abgesicherten Modus (Safe Mode) ausgeführt wird

.Beschreibung
Wenn Sie die Information benötigen, ob eine Microsoft Excel-Anwendung im abgesicherten Modus (Safe Mode) gestartet wurde, müssen Sie den Titel des Excel-Anwendungsfensters auswerten.

Titel des Anwendungsfensters überprüfen:
- Je nach landesspezifischer Version von Microsoft Excel (Sprache) muss eine andere Zeichenfolge überprüft werden (z.B. "Safe Mode" bei der englischen Version).
- Man kann eine beliebige Excel-Sitzung überprüfen, da man auf die Fenstertitel aller laufenden Anwendungen zugreifen kann (Word/Tasks-Auflistung).

» Codebeispiel #1: Überprüft alle laufenden Excel-Anwendungen, ob mindestens eine davon im abgesicherten Modus läuft.

» Codebeispiel #2: Überprüft diejenige Excel-Anwendung, die in der Task-Reihenfolge der Excel-Anwendungen zuerst gestartet wurde. Wenn nur eine Excel-Anwendung läuft, ist dies die beste Lösung.

.VBA-Code #1
Public Sub CheckSafeMode1()
  Dim intCounter As Integer
  Dim bolExcelFound As Boolean
  Dim bolSafeModeFound As Boolean
  Dim objWord As Object
  Set objWord = CreateObject("Word.Application")
  For intCounter = 1 To objWord.Tasks.Count
    If Left$(objWord.Tasks(intCounter).Name, 15) = "Microsoft Excel" Then
      bolExcelFound = True
      If Right$(objWord.Tasks(intCounter).Name, 21) = "- Abgesicherter Modus" Then
        bolSafeModeFound = True
        Exit For
      End If
    End If
  Next intCounter
  objWord.Quit
  Set objWord = Nothing
  If bolExcelFound = True And bolSafeModeFound = True Then
    MsgBox "Microsoft Excel läuft im abgesicherten Modus."
  ElseIf bolExcelFound = True And bolSafeModeFound = False Then
    MsgBox "Microsoft Excel läuft nicht im abgesicherten Modus."
  ElseIf bolExcelFound = False Then
    MsgBox "Microsoft Excel läuft nicht."
  End If
End Sub

.VBA-Code #2
Public Sub CheckSafeMode2()
  Dim objExcel As Object
  Set objExcel = GetObject(Class:="Excel.Application")
  If Right$(objExcel.Caption, 21) = "- Abgesicherter Modus" Then
    MsgBox "Microsoft Excel läuft im abgesicherten Modus."

  Else
    MsgBox "Microsoft Excel läuft nicht im abgesicherten Modus."
  End If
  Set objExcel = Nothing
End Sub

To Top


Befehlszeile des Microsoft Excel-Starts ermitteln

.Beschreibung
Hier wird vorgestellt, wie man die Befehlszeile, die zum Starten von Microsoft Excel benutzt wurde, abfragen kann.

.VBA-Code
Public Sub GetExcelCommandLine()

End Sub

To Top


Prüfen, ob Microsoft Excel mit einem Startparameter gestartet wurde

.Beschreibung
...

.VBA-Code
Public Sub CheckExcelStartParameter()

End Sub

To Top


Aktueller Bearbeiter einer geöffneten Arbeitsmappe ermitteln

.Beschreibung
Anhand der UserStatus-Eigenschaft des Workbook-Objektes lässt sich feststellen, wie der aktuelle Bearbeiter einer geöffneten Arbeitsmappe heisst. Es wird derjenige Name ausgegeben, der vom Benutzer im Optionen-Dialog als Benutzername eingetragen wurde. Wenn die Arbeitsmappe freigegeben ist, wird nur der Name eines einzigen Benutzers angezeigt.

Da UserStatus ein zweidimensionales Datenfeld zurückgibt, muss man in Klammern "1, 1" schreiben.

.VBA-Code
Public Sub GetCurrentWorkbookUser()
  MsgBox "Aktueller Bearbeiter: " & ActiveWorkbook.UserStatus(1, 1)
End Sub

Weitere Informationen

Excel-Objektmodell: Eigenschaften des Workbook-Objektes

To Top


Aktueller Benutzer einer geöffneten Arbeitsmappe ohne Microsoft Excel ermitteln

.Beschreibung
Hier wird gezeigt, wie Sie den aktuellen Benutzer einer Arbeitsmappe herausfinden können, ohne dass Microsoft Excel auf dem Computer vorhanden sein muss. Dies lässt sich bewerkstelligen, indem die xls-Datei der Arbeitsmappe wie eine sequentielle Datei direkt mit VBA geöffnet wird, und zwar anhand der Open-Anweisung. Da eine Arbeitsmappendatei auch dann geöffnet und gelesen werden können, während sie bereits in Microsoft Excel bearbeitet wird, ist dies problemlos machbar.

Der Name des aktuellen Benutzers einer Arbeitsmappe ist immer in der xls-Datei eingetragen. Die Eintragung findet automatisch beim Öffnen der Mappe statt.

Wenn die Exceldatei ein Lese-/Schreibkennwort (Dateikennwort) besitzt, kann der Name des aktuellen Benutzers nicht ermittelt werden, weil der Dateiinhalt verschlüsselt ist.

.VBA-Code
Public Sub GetCurrentWorkbookUser()

End Sub

To Top


Letzter Benutzer einer geschlossenen Arbeitsmappe ohne Microsoft Excel ermitteln

.Beschreibung
Der letzte Benutzer einer geschlossenen Arbeitsmappe wird genau gleich wie der aktuelle Benutzer einer geöffneten Arbeitsmappe ermittelt.

.VBA-Code
Public Sub GetLastWorkbookUser()

End Sub

To Top


Letzter Bearbeiter einer geöffneten Arbeitsmappe ermitteln

.Beschreibung
Der letzte Bearbeiter einer geöffneten Arbeitsmappe wird ganz einfach ermittelt, indem man die Dokument-Eigenschaft "Last Author" abfragt. Der Name des letzten Bearbeiters wird immer dann aktualisiert, wenn die Arbeitsmappe gespeichert wird.

Wenn kein Name zurückgegeben wird, bedeutet dies, dass die Mappe noch nie gespeichert wurde.

.VBA-Code
Public Sub GetLastWorkbookUser()
  MsgBox "Letzter Bearbeiter/Zuletzt gespeichert von: " & ActiveWorkbook.BuiltinDocumentProperties("Last Author").Value
End Sub

To Top


Letzter Bearbeiter einer geschlossenen Arbeitsmappe ermitteln

.Beschreibung
Der letzte Bearbeiter einer geschlossenen Arbeitsmappe ist im Gegensatz zum letzten Benutzer sehr einfach feststellbar. Da ein Bearbeiter - wie der Name schon sagt - die Arbeitsmappe bearbeitet hat, wird er beim Speichern der Mappe als 'Letzter Bearbeiter' vermerkt. Sein Name wird in der Dokument-Eigenschaft "Last Author" eingetragen. Diese Eigenschaft ist als Bezeichnung "Zuletzt gespeichert von" bekannt.

Da die abzufragende Arbeitsmappe geschlossen ist, muss die DSOFile-Bibliothek benutzt werden, damit man auf die Dokument-Eigenschaften der Datei zugreifen kann. Die oben erwähnte Eigenschaft "Last Author" heisst in dieser Bibliothek LastEditedBy. Damit man den Namen des letzten Bearbeiters der Arbeitsmappe erhält, muss man somit lediglich die LastEditedBy-Eigenschaft der Datei abfragen.

.VBA-Code
Public Sub GetLastWorkbookUser()
  MsgBox "Letzter Bearbeiter: " & CreateObject("DSOleFile.PropertyReader").GetDocumentProperties("C:\Daten\EineMappe.xls").LastEditedBy
End Sub

Weitere Informationen

VBA-Spezialthema: OLE Document Properties (DSOFile)

To Top


Letzter Bearbeiter einer geschlossenen Arbeitsmappe ändern

.Beschreibung
Es ist problemlos möglich, den letzten Bearbeiter einer geschlossenen Arbeitsmappe zu ändern. In jeder Arbeitsmappendatei ist der Name desjenigen Benutzers eingetragen, der die Mappe zuletzt gespeichert hat.

Anhand der DSOFile-Bibliothek kann man auf die LastEditedBy-Eigenschaft zugreifen, welche den Namen des letzten Bearbeiters enthält. Der Inhalt der Eigenschaft kann ganz einfach geändert werden.

.VBA-Code
Public Sub SetLastWorkbookUser()
  CreateObject("DSOleFile.PropertyReader").GetDocumentProperties("C:\Daten\EineMappe.xls").LastEditedBy = "Peter Muster"
End Sub

Verwandte Codebeispiele

Letzter Bearbeiter einer geöffneten Arbeitsmappe ändern

Letzter Bearbeiter einer geschlossenen Arbeitsmappe ermitteln

Letzter Bearbeiter einer geöffneten Arbeitsmappe ermitteln

Aktueller Bearbeiter einer geöffneten Arbeitsmappe ermitteln

 

Weitere Informationen

VBA-Spezialthema: OLE Document Properties (DSOFile)

To Top


Letzter Bearbeiter einer geöffneten Arbeitsmappe ändern

.Beschreibung
Das Ändern des Namens des letzten Bearbeiters bringt nicht viel, wenn der Programmcode in Microsoft Excel ausgeführt und die betroffene Arbeitsmappe geöffnet ist.

» Codebeispiel #1: Dieses Beispiel ändert den Namen des letzten Bearbeiters der aktiven Arbeitsmappe auf "Peter Muster". Beachten Sie bitte, dass beim nächsten Speichern der aktiven Arbeitsmappe automatisch der Name des aktuellen Excel-Benutzers als letzter Arbeitsmappen-Bearbeiter vermerkt wird.

» Codebeispiel #2: Dieses Codebeispiel ändert vorübergehend den Namen des aktuellen Excel-Benutzers. Dadurch kann die angegebene Arbeitsmappe "EineMappe.xls" mit dem Benutzernamen "Peter Muster" gespeichert werden. Bitte beachten Sie, dass sich dieser Programmcode nicht in der zu speichernden Arbeitsmappe befinden darf, da diese im Programmcode geschlossen wird und somit der Code nicht vollständig ausgeführt würde. Man darf also die Referenz ThisWorkbook nicht verwenden.

.VBA-Code #1
Public Sub SetLastWorkbookUser1()
  ActiveWorkbook.BuiltinDocumentProperties("Last Author").Value = "Peter Muster"
End Sub

.VBA-Code #2
Public Sub SetLastWorkbookUser2()
  Dim strUserName As String
  strUserName = Application.UserName
  Application.UserName = "Peter Muster"
  Workbooks("EineMappe.xls").Save
  Workbooks("EineMappe.xls").Close
  Application.UserName = strUserName
End Sub

Verwandte Codebeispiele

Letzter Bearbeiter einer geschlossenen Arbeitsmappe ändern

Letzter Bearbeiter einer geschlossenen Arbeitsmappe ermitteln

Letzter Bearbeiter einer geöffneten Arbeitsmappe ermitteln

Aktueller Bearbeiter einer geöffneten Arbeitsmappe ermitteln

To Top

Haben Sie Fragen, Anregungen oder Hinweise?
Mail senden an: philipp_von_wartburg@yahoo.de

Zuletzt aktualisiert am 10.03.2006 / 22:30 Uhr
© 2002-2006 by Philipp von Wartburg, CH-8916 Jonen

Alle Rechte vorbehalten