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 |
|
Weitere Informationen |
|
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 |
|
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 |
|
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.
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
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
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
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
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
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
Weitere Informationen |
|
.Beschreibung
Noch keine Lösung gefunden!
.VBA-Code
Public Sub EmptyPaperBin()
End Sub
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.
.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 |
|
Weitere Informationen |
|
.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
.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
.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
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
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Priorität eines laufenden Prozesses ändern
.Beschreibung
Noch keine Lösung gefunden!
.VBA-Code
Public Sub SetProcessPriority()
End Sub
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
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 |
|
|
Weitere Informationen |
|
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 |
|
Weitere Informationen |
|
Textdatei öffnen und sequentiell lesen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub ReadTextfile()
End Sub
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 |
|
Arbeitsmappe basierend auf einer anderen Arbeitsmappe erstellen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub AddWorkbook()
Workbooks.Add "C:\Daten\EineMappe.xls"
End Sub
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
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
Arbeitsmappe anlegen und Mappenfenster sofort ausblenden
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub AddAndHideWorkbook()
Workbooks.Add.Windows(1).Visible = False
End Sub
Arbeitsmappe mit einem Diagramm-, Makro- oder Dialogblatt anlegen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub AddWorkbook()
Workbooks.Add xlWBATChart
End Sub
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 |
|
|
|
.Beschreibung
Beschreibung folgt.
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 |
|
Weitere Informationen |
|
Aktuelles Verzeichnis wechseln
.Beschreibung
Beschreibung folgt.
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 |
|
Weitere Informationen |
|
|
|
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
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.
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
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
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!
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.
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
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
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
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
Ö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 |
|
|
Weitere Informationen |
|
Ö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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
Weitere Informationen |
|
.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 |
|
Weitere Informationen |
|
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
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
Arbeitblatt als Textdatei speichern
.Autor
Philipp von Wartburg, www.xlam.info
.VBA-Code
Public Sub SaveWorksheetAsText()
End Sub
.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 |
|
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 |
|
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 |
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
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
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
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
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 |
|
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 |
|
|
.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 |
|
Weitere Informationen |
|
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 |
|
Weitere Informationen |
|
Daten in eine Datei schreiben ohne die Datei zu schliessen
.Beschreibung
...
Trick: LOF() abfragen.
.VBA-Code
Public Sub WriteToFile()
End Sub
Weitere Informationen |
|
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
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
.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 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 |
|
|
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 |
|
|
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!
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) 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) 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 VBA-Editors ermitteln
.Beschreibung
...
.VBA-Code
Public Sub GetVBEWindowHandle()
MsgBox Application.VBE.MainWindow.hWnd
End Sub
Verwandte Codebeispiele |
|
Fenster-Handle (hwnd) eines Benutzerformulares ermitteln
.Beschreibung
...
.VBA-Code
Public Sub GetUserFormWindowHandle()
End Sub
Verwandte Codebeispiele |
|
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 |
|
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
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
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
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
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
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.
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
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
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
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 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 |
|
Weitere Informationen |
|
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 |
|
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
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
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 |
|
|
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
.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 |
|
Weitere Informationen |
|
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
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
.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 |
|
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
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
.Beschreibung
Beschreibung folgt.
Besitzt keine Argumente (arg).
.VBA-Code
Public Sub ShowNewDialog()
Application.Dialogs(xlDialogNew).Show
End Sub
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
Arbeitsmappe freigeben-Dialog anzeigen
.Beschreibung
Beschreibung folgt.
Besitzt keine Argumente (arg)
.VBA-Code
Public Sub ShowShareWorkbookDialog()
Application.Dialogs(xlDialogFileSharing).Show
End Sub
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
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
.Beschreibung
Beschreibung folgt.
Besitzt keine funktionierenden Argumente (arg).
.VBA-Code
Public Sub ShowAddInManager()
Application.Dialogs(xlDialogAddInManager).Show
End Sub
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
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
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 |
|
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 |
|
Weitere Informationen |
|
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 |
|
Weitere Informationen |
|
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub ModifyFileDateTime()
End Sub
Verwandte Codebeispiele |
|
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
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 |
|
|
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 |
|
|
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
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
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
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
.Beschreibung
Beschreibung folgt.
Arbeitsbereichdatei (.xlw)
.VBA-Code
Public Sub OpenWorkgroup()
Workbooks.Open "C:\Daten\EinArbeitsbereich.xlw"
End Sub
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.
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
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 |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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
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
.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 |
|
Weitere Informationen |
|
.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 |
|
Weitere Informationen |
|
.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 |
|
Weitere Informationen |
|
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
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
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
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 |
|
|
Weitere Informationen |
|
Anzahl Dateien eines Ordners und allen Unterordnern abfragen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub CountFilesOfFolders()
End Sub
Verwandte Codebeispiele |
|
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 und Ordner eines gesamten Laufwerkes abfragen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub CountFilesAndFoldersOfDrive()
End Sub
Verwandte Codebeispiele |
|
|
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 |
|
|
Weitere Informationen |
|
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 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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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
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 |
|
.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 |
|
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 |
|
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
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 |
|
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 |
|
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 |
|
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 |
|
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
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 |
|
Weitere Informationen |
|
.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 |
|
|
Weitere Informationen |
|
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 |
|
|
|
Weitere Informationen |
|
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 |
|
|
|
Weitere Informationen |
|
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 |
|
|
|
Weitere Informationen |
|
|
|
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 |
|
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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
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 |
|
|
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 |
|
|
Weitere Informationen |
|
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 |
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
.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
Weitere Informationen |
|
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
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
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
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
.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
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
Favoriten öffnen-Dialog anzeigen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub ShowOpenFavoritesDialog()
Application.CommandBars.FindControl(Id:=1021).Execute
End Sub
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
Internet-Seite öffnen-Dialog anzeigen
.Beschreibung
Beschreibung folgt.
.VBA-Code
Public Sub ShowOpenWebPageDialog()
Application.CommandBars.FindControl(Id:=1015).Execute
End Sub
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
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
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 |
|
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 |
|
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
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
Weitere Informationen |
|
|
|
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
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 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
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 |
|
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
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
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 |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
|
Weitere Informationen |
|
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 |
|
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 |
|
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!
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 |
|
|
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 |
|
Weitere Informationen |
|
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 |
|
Weitere Informationen |
|
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 |
|
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
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
Prüfen, ob Microsoft Excel mit einem Startparameter gestartet wurde
.Beschreibung
...
.VBA-Code
Public Sub CheckExcelStartParameter()
End Sub
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 |
|
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
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
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
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 |
|
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
Weitere Informationen |
|
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
Zuletzt aktualisiert
am 4.03.2006 / 21:00 Uhr
© 2002-2006 by Philipp von Wartburg, CH-8916 Jonen
Alle Rechte vorbehalten