Nützliche Funktionen und Prozeduren zu

Last update: 07.05.2002


Bugs und Probleme

Installation von Visual Basic Programmen funktioniert nicht. Weitere Informationen hier.

Visual Basic für Applikationen (Excel)

Symbolleisten ausblenden
Folgender Code blendet alle sichtbaren Symbolleisten aus. Die globalen Variablen (definiert im allgemeinen Deklarationsabschnitt) werden benötigt um später die Symbolleisten wieder einzublenden.
' Globale Variablen
Public symstatus() As Boolean
Public symstatus_pos() As Integer

' Alle Symbolleisten ausblenden z.B. in auto_open Prozedur
Dim x, anzleisten
anzleisten = Application.Toolbars.Count
ReDim symstatus(anzleisten + 2)
ReDim symstatus_pos(anzleisten + 2)
For x = 1 To anzleisten
 symstatus(x) = Application.Toolbars(x).Visible
 symstatus_pos(x) = Application.Toolbars(x).Position
 Application.Toolbars(x).Visible = False
Next x

Und nun der Code um die Symbolleisten wieder einzublenden:
' Symbolleisten wieder einblenden z.B. in auto_close Prozedur
Dim x, anzleisten
anzleisten = Application.Toolbars.Count
For x = 1 To anzleisten
 Application.Toolbars(x).Visible = symstatus(x)
 Application.Toolbars(x).Position = symstatus_pos(x)
Next x

Neue Symbolleiste erstellen
Mit folgendem Code wird eine neue Symbolleiste mit Schaltknöpfen und kleinen Icons erstellt.
' Symbolleiste erstellen
Application.CommandBars.Add(Name:="Meine Symbolleiste").Visible = True
' Elemente der Symbolleiste hinzufügen
Set my = Application.CommandBars("Meine Symbolleiste")
Application.CommandBars("Meine Symbolleiste").Position = msoBarTop
' Zwei neue Buttons hinzufügen
my.Controls.Add Type:=msoControlButton, Id:=1851
my.Controls.Add Type:=msoControlButton, Id:=1851
' Zuordnungen
Set graf = my.Controls(1)
' Icon das angezeigt werden soll
graf.FaceId = 64
graf.Style = msoButtonIconAndCaption
' Was auf dem Button steht. &1 bedeutet Aufruf mit ALT+1 möglich.
graf.Caption = "&1 - Button 1"
graf.TooltipText = "Dies ist Button 1"
' Welche Prozedur soll ausgeführt werden ?
graf.OnAction = "daten_eingabe"
' Zuordnung Button 2
Set graf = my.Controls(2)
graf.FaceId = 276
graf.Style = msoButtonIconAndCaption
graf.Caption = "&2 - Button 2"
graf.TooltipText = "Dies ist Button 2"
graf.OnAction = "daten_ausgabe"

Die neu erstellte Symbolleiste wieder ausblenden und löschen.
' Symbolleiste löschen
Application.CommandBars("Meine Symbolleiste").Delete

   
Einträge aus einem Menü entfernen
Mit nachfolgendem Code werden aus dem Datei-Menü von Excel Einträge entfernt. Dabei wird immer vom ersten Eintrag ausgegangen. Wird dieser entfernt, so ist der nachfolgende Eintrag der Erste usw.
Mit Reset wird zuerst sichergestellt, daß das Standardmenü eingestellt ist.
' Im Menü Datei Einträge ausblenden
Application.CommandBars("File").Reset
Application.CommandBars("File").Controls(1).Delete
Application.CommandBars("File").Controls(1).Delete
Application.CommandBars("File").Controls(2).Delete
Application.CommandBars("File").Controls(2).Delete
Application.CommandBars("File").Controls(2).Delete
Application.CommandBars("File").Controls(2).Delete
Dadurch werden die Einträge "Neu", "Öffnen...", "Speichern", "Speichern unter...", "Als HTML speichern...", "Seite einrichten..." aus dem Datei Menü entfernt.

Man kann es sich aber auch einfacher machen und die Menüeinträge direkt mit Namen ansprechen:
Application.CommandBars("File").Controls("Speichern unter...").Delete
' die CommandBars-Indizies sind leider in englisch und lauten: File, Edit, View, Insert, Format, Tools, Data, Window, Help
' benutzerdefinierte Menüs sind natürlich nicht berücksichtigt.

Soll ein ganzer Menübaum (hier Datei) gelöscht werden, dann muß es heißen:
Application.CommandBars("Worksheet Menu Bar").Controls("Datei").Delete
' ihr findet, das ist verwirrend ? Stimmt, ein dauernder Wechsel zwischen deutsch und englisch.

Der folgende Code stellt das Standardmenü "File" wieder her.
Application.CommandBars("File").Reset

Sollen alle Menüs zurückgesetzt werden:
Application.CommandBars("Worksheet Menu Bar").Reset

Einträge einem Menü hinzufügen
Dem "Bearbeiten"-Menü soll ein Menüeintrag am Ende der Liste hinzugefügt werden und bei Aufruf soll die Sub-Prozedur "Test" aufgerufen werden.
' Eintrag erzeugen
Sub erstellen()
 Dim NeuerEintrag As Object
 Set NeuerEintrag = CommandBars("Edit").Controls.Add
 With NeuerEintrag
  .Caption = "Eintrag"
  .OnAction = "Test"
  
' FaceId fügt ein integrietes Excel-Icon ein.
  .FaceId = 23
 End With
End Sub

Nun das gleiche wie oben, aber den Eintrag an der 3. Position einfügen und eine zweite und dritte Ebene hinzufügen.
Sub erstellen()
 Dim NeuerEintrag, Ebene2, Ebene3 As Object
 Set NeuerEintrag = CommandBars("Edit").Controls.Add(Type:=msoControlPopup, Before:=3)
 With NeuerEintrag
  .Caption = "Eintrag"
 End With
 Set Ebene2 = NeuerEintrag.Controls.Add(Type:=msoControlPopup)
 With Ebene2
  .Caption = "Zweite Ebene"
 End With
 Set Ebene3 = Ebene2.Controls.Add
 With Ebene3
  .Caption = "Dritte Ebene"
  .FaceId = 99
  .OnAction = "Test"
 End With
 Set Ebene3 = Ebene2.Controls.Add
 With Ebene3
  .Caption = "Noch ein Test"
  .FaceId = 123
 End With
End Sub

Wie bereits links beschrieben stellt man mit folgendem Code den Ursprungszustand wieder her:
Application.CommandBars("Edit").Reset
' oder
Application.CommandBars("Worksheet Menu Bar").Reset

   
Integrierte Excel-Icons sichtbar machen
Es befinden sich Hunderte von Icons in Excel, die man über die FaceId-Eigenschaft seinen Menüs hinzufügen kann.
Sub ZeigeFaceIds()
 Dim NeueSymbolleiste As CommandBar
 Dim NeuerButton As CommandBarButton
 Dim x, IconStart, IconStop As Integer
 
' Zuerst eine bereits vorhande Symbolleiste löschen
 On Error Resume Next
 Application.CommandBars("FaceIds").Delete
 On Error GoTo 0
 
' Neue Symbolleiste erstellen
 Set NeueSymbolleiste = Application.CommandBars.Add(Name:="FaceIds", temporary:=True)
 NeueSymbolleiste.Visible = True
 
' Folgende Variablen ändern um unterschiedliche Icons zu sehen
 ' Eine Differenz größer 500 dauert zu lange !

 IconStart = 1
 IconStop = 500

 For x = IconStart To IconStop
 Set NeuerButton = NeueSymbolleiste.Controls.Add(Type:=msoControlButton, Id:=2950)
  With NeuerButton
   .FaceId = x
   .Caption = "FaceId = " & x
  End With
 Next x
 NeueSymbolleiste.Width = 600
End Sub
 
Integrierte Excel-Dialoge aufrufen
Mit nachfolgendem Code wird der "Öffnen"-Dialog angezeigt.
dialogAntw = Application.Dialogs(xlDialogOpen).Show
' dialogAntw enthält danach den Pfad- und Dateiangabe der geöffneten Datei.
' Weitere Konstanten zum öffnen von Dialogen findet man in der VBA-Hilfe, wenn man nach "Dialogs-Objekt (Auflistung)" sucht.
 
OnAction mit Parametern
In den zuvor vorgestellten Prozeduren wurde die OnAction-Funktion zum starten von Sub-Prozeduren verwendet. Wenn man nun aber noch Parameter an die Sub-Prozedur senden will, muß man zwischen den Anführungszeichen noch Apostrophe setzen.

' Übergabestrings müssen zwischen Doppel-Anführungszeichen gesetzt werden !
.OnAction = " ' Prozedurname " "String" ", 10, 100 ' "
' Die Leerzeichen dienen nur der Übersichtlichkeit und müssen weggelassen werden.

Sub Prozedurname(Textb As String, Zahl1 As Integer, Zahl2 As Integer)
 Dim Ausgabe As String
 Ausgabe = Textb + vbCrLf + CStr(Zahl1) + vbCrLf + CStr(Zahl2)
 MsgBox Ausgabe
End Sub

Kontextmenü erstellen
Kontextmenüs erscheinen, wenn man die rechte Maustaste drückt. Folgender Code erstellt ein Kontextmenü für Arbeitsblätter. Es enthält zwei Menüebenen (Hauptmenü mit Untermenüs)
Sub Kontext()
Dim Ebene1, Ebene2 As CommandBarControl
 With CommandBars("Cell")
  ' zuerst sicherstellen, daß das Kontextmenü leer ist.
  While .Controls.Count > 0
    On Error Resume Next
   .Controls(1).Delete
  Wend
   
' 1. Ebene Nr.1 erstellen
   Set Ebene1 = .Controls.Add(Type:=msoControlPopup, temporary:=True)
   Ebene1.Caption = "Freischichten"
   
' 2. Ebene - Freischichten
   Set Ebene2 = Ebene1.Controls.Add(temporary:=True)
   With Ebene2
   .Caption = "Freischicht"
    .FaceId = 52
    .OnAction = "a_fs"
   End With
   Set Ebene2 = Ebene1.Controls.Add(temporary:=True)
   With Ebene2
    .Caption = "½ Freischicht 1. Hälfte frei"
    .FaceId = 330
   End With
   
' 1. Ebene Nr.2 erstellen
   Set Ebene1 = .Controls.Add(Type:=msoControlPopup, temporary:=True)
   Ebene1.Caption = "Urlaub"
  
 ' 2. Ebene - Urlaub
   Set Ebene2 = Ebene1.Controls.Add(temporary:=True)
   With Ebene2
    .Caption = "Jahresurlaub"
    .FaceId = 52
   End With
  
 '1. Ebene Nr.3 erstellen
   Set Ebene1 = .Controls.Add(Type:=msoControlPopup, temporary:=True)
   Ebene1.Caption = "Krankheit/Kuren"
  
 'usw.
   Set Ebene1 = .Controls.Add(Type:=msoControlPopup, temporary:=True)
   Ebene1.Caption = "Seminare"
   Set Ebene1 = .Controls.Add(Type:=msoControlPopup, temporary:=True)
   Ebene1.Caption = "Ausbildung"
   Set Ebene1 = .Controls.Add(temporary:=True)
   With Ebene1
    .Caption = "Auswahl löschen"
    .FaceId = 47
    .OnAction = "erase"
    
' nächste Eigenschaft zeigt an, daß eine neue Gruppe beginnt,
    ' somit wird eine Trennlinie eingefügt.

    .BeginGroup = True
   End With
  End With
End Sub

Das Kontextmenü wieder zurücksetzen.
Sub Kontexterase()
 Application.CommandBars("Cell").Reset
End Sub

Visual Basic Script (WSH)

Launch.vbs
Kleines Programm um Dateien zu kopieren. Für meine Zwecke reicht es. Ist allerdings ausbaufähig.
  • z.B. Dateien nur kopieren, wenn ArchivBit gesetzt
  • oder Dateiauswahlboxen hinzufügen usw.

Das bleibt jedem selbst überlassen.

Es wird eine Textdatei mit Namen LAUNCH.TXT benötigt, in der alle Kopieraktionen vermerkt sind. Es sind auch weitere Infos in Ihr zu finden.

Download launch.zip

 

Einige Funktionen von mir
programmiert mit VB5 + VB6

Scanner in VB ansprechen (scanner.zip)
November 2001
Neue Informationen.
Bitte zuerst lesen !

Es muß im Windows-Setup die Komponente Wang-Image installiert sein, damit dieses Projekt funktioniert (Gruß an Robert).

Ich hatte das Problem, wenn ich den Strom zum Computer und der Peripherie einschaltete, daß die Leuchtstoffröhre des Scanners anblieb. Sie ging erst aus, wenn man den Scandialog aufrief und gleich wieder schloß. Da der Scanner keinen Ein/Ausschalter besitzt, war es meistens so, daß die Röhre während der gesamten Computerarbeit immer anblieb.
Das kostet 1. Strom und 2. verkürzt es die Lebensdauer der Röhre. Also habe ich mich ein bißchen in meinem System umgeschaut und den Treiber IMGSCAN.OCX im Systemverzeichnis und in der Komponentenliste (Steuerung für Wang Bildscan) von VB5 gefunden.
Das Programm SCANNER.EXE tut nichts anderes als mit OpenScanner den Scanner anzusprechen und mit CloseScanner die Röhre auszuschalten. Am besten erstellt man eine Verknüpfung zur SCANNER.EXE im Autostartordner und hat dann Ruhe.

Da ich keine weitere Dokumentation zu dem Thema gefunden habe (außer den Methoden und Eigenschaften), weiß ich auch sonst nichts mit der Library anzufangen. Genauso ist es mit den Libraries IMGEDIT.OCX, IMGTHUMB.OCX und IMGADMIN.OCX die sich ebenfalls im Systemverzeichnis befinden. Zwar gibt es im Windowsverzeichnis einen Ordner mit dem Namen WANGSAMP mit einem Beispielprogramm in VB, aber dieses behandelt den Scanner nicht.

Gibt es auf Eurem Computer auch diese Libaries und den Ordner ? - Schreibt mir.

Link ins Internet in Dialogboxen einfügen
Eigenen Mauszeiger einfügen
Musik abspielen
Programmicon in der SystemTray anzeigen und auswerten (
multi.zip)
Damit der Link ausgeführt werden kann, muß unter Windows ein Standardbrowser installiert sein (IE oder NC). Beim überfahren des Links ändert sich der Mauszeiger. Um die Musik abspielen zu können gibt es zwei Möglichkeiten, bitte die Dateiverweise im Programm Deinen Gegebenheiten anpassen. Und zuletzt wird noch ein Icon in der SystemTray angezeigt. Das Icon steht in der Picture1.DragIcon Eigenschaft. Klicke einmal mit linker Maustaste doppelt darauf.

Hinweis: Der Ressourcen-Editor muß unter VB6 mit "Add-Ins / Add-In Manager" und Klick auf "VB6 Ressourcen-Editor" und Ladeverhalten "Beim Start laden" und "Laden/Entladen" aktiviert werden (siehe dann Extras-Menü), bevor man die Datei CURSOR.RES bearbeiten kann.

   
Space Cadet Manipulator (space.zip)
Willst Du Deinen Kollegen einen Streich spielen ? Oder wolltest Du beim Pinballspiel Space Cadet schon immer mal der Beste sein ? Dann verwende den Space Cadet Manipulator. Mit ihm kannst Du die Highscoreliste so verändern, wie Du das willst.
Inklusive Source-Code.

Neue Version Jetzt mit Registry-Load der Spielstände. (space1.zip)

CD-ROM (cd.zip)
Funktion zur Bestimmung des CD-ROM Laufwerkbuchstabens. Außerdem öffnen und schließen der Schublade mittels mciSendString.
   
Immer im Vordergrund (stwinpos.zip)
Mit dieser Funktion kann man Fenster oder Dialogboxen immer im Vordergrund darstellen. In der VB-Hilfe wird nur gesagt, das man die x, y, Höhe und Breite für SetWindowPos anzugeben braucht. Der Trick dabei ist aber, daß man die Twips, welche von VB geliefert werden, in Pixel umrechnet, welche die Winapi-Funktion braucht.
Wenn man versucht die ScaleMode-Eigenschaft der Form in Pixel zu ändern, funktioniert das nicht, weil ???
Verschlüsselungsfunktion (crypt.zip)
Einfache Funktion um Texte zu verschlüsseln. Dabei wird mit XOR ver- und entschlüsselt.
   
MinMax (minmax.zip)
Angenommen man hat einen A/D-Wandler an den Parallelport angeschlossen um z.B. die Temperatur zu messen. Der A/D-Wandler liefert 8 bit Auflösung. Der Zahlenbereich am Parallelport geht also von 0 bis 255. Bei 0 beträgt die Temperatur 100°C und bei 255 eine Temperatur von -100°C. Demnach muß bei einem Eingang von 128 eine Temperatur von 0°C herrschen.
Die Funktion hilft hier mit einer Formel beim berechnen (nur für lineare Vorgänge).
Windows beenden (exitwin.zip)
Eine Funktion um Windows entweder zu beenden (und den Computer auszuschalten, wenn vorhanden), neu zu starten oder eine Neuanmeldung vorzunehmen. Für das neustarten wird ein kleines 16 bit Programm benötigt (restart.exe), weil diese Option in der 32 bit Funktion von ExitWindows nicht mehr vorhanden ist.
   
Bildvorschau über Shell-Funktion aufrufen
(
imageview.zip) VB6 !
Vorraussetzung: Windows ME
Mit der Funktion "RunDll32.exe shimgvw.dll,ImageView_Fullscreen C:\Bild.bmp" kann man eine Bildvorschau mittels Shell-Funktion in VB aufrufen. Groß- / Kleinschreibung beachten.
Weiterführender Artikel:
A Description of the Image Preview Feature in Windows Millennium Edition (Q272969)
Bildvorschau ohne Windows ME (imageview2.zip) VB6 !
Ich brauchte dringend eine Bildvorschau, nicht nur unter WinMe sondern auch unter WinNT. Also selber programmieren. Die Bildvorschau ist nicht so umfangreich wie die von Me und hat ein paar kleinere Macken, aber sie funktioniert.

Hinweis: Der Ressourcen-Editor muß unter VB6 mit "Add-Ins / Add-In Manager" und Klick auf "VB6 Ressourcen-Editor" und Ladeverhalten "Beim Start laden" und "Laden/Entladen" aktiviert werden (siehe dann Extras-Menü), bevor man die Datei CURSOR.RES bearbeiten kann.

   

 

Links zu Visual Basic

Links zu deutschsprachigen Seiten
Deutsche Anleitung zu Visual Basic Script
URL1 - URL2 - URL3
Visual Basic Tips & Tricks der Götz GmbH
Basic World
About VB - das Visual Basic Webmagazin
Links zu englischsprachigen Seiten
VB Helper
Zarr's VB Web Site
vbAccelerator
visual basic resource - A comprehensive set of tutorials, links, downloadable samples plus a chat room and message board for developers at all levels of experience.

Email to: Holger Heinemann
© Copyright 2002 Holger Heinemann