© Klaus-Martin Buss   www.kmbuss.de
Diese Seite ist Teil eines Framesets. Sollte links kein Navigationsmenü angezeigt werden, bitte hier klicken ...

Projekte

An dieser Stelle möchte ich Euch ein paar meiner Projekte vorstellen, die 'ne ganze "Hightech" und vor allem vorausschauende Planungen beinhalten. Vielleicht kann sich die / der Eine oder Andere von Euch hier ein paar Anregungen / Tipps / Tricks zur Realisierung von ähnlichen Projekten / Aufgaben / Spielereien holen. Zudem möchte ich ein wenig "Reklame" dafür machen, bei Problemen / Fragen / Codeabwürfen nicht gleich die Foren zu kontaktieren, sondern zunächst mal selbst zu googlen und im Netz zu suchen. Ihr glaubt ja nicht, wie gross der Spass sein kann, selbst eine Lösung zusammenzuschrauben, statt sich "vorgekaute" Codes schreiben zu lassen.



Beginnen möchte ich mit meinem
Medi@rchiv.

Im Laufe der Jahre habe ich meine alten Vinyl-LP's mit Hilfe des (lizensierten !!!) Proggies "WavePurity DeLuxe" digitalisiert und meine CD's / DVD's gerippt. Danach suchte ich nach einem Programm, um die daraus entstandenen MP3- und Video-Dateien übersichtlich anzeigen zu lassen, nach meinen Wünschen zu filtern und mit Mausklick auch abspielen zu können.
Alles, was ich hierzu im Netz gefunden habe, entsprach jedoch nicht meinen anspruchsvollen Wünschen.
Also kam ich auf die Idee, mir so ein "Programm" selbst zu stricken. Herausgekommen ist eine EXCEL-Arbeitsmappe, mit der ich aus festgelegten Ordnern die Namen von Mediadateien auslese, anschliessend mit Hilfe von Formeln "zerlege" und untereinander in einzelne Spalten schreibe. Die "Oberfläche" dieser Anwendung sieht so aus:


 

Durch die Verwendung der Funktion =HYPERLINK() entstehen im Tabellenblatt Links auf die Audiodateien, die mit dem Freeware-Player "WinAmp" geöffnet werden. Zu WinAmp später noch ein paar Worte.

 

 

Nachdem die Mappe soweit fertiggestellt war, wollte ich ein paar Feinheiten einbauen:
Bequemes Autofiltern / Suchen nach Interpreten / Titeln und / oder Genre's. Also habe ich den Makrorecorder angeschmissen, um an die Codegrundgerüste zu gelangen und zudem im Netz nach passenden Codefragmenten gestöbert. Rausgekommen ist eine Userform-Textbox-Lösung, da der "normale" Autofilter  bei mehr als 1.000 verschiedenen Einträgen (allein die legal erworbenen Harry-Potter-Hörbucher umfassen 1.630 MP3-Dateien) in die Knie geht ...

 

 

Darüberhinaus wollte ich einige Informationen zur Arbeitsmappe auslesen / anzeigen (Wieviele Audiodatein sind eingelesen - Wieviele davon sind durch den AutoFilter ausgeblendet - Wie gross ist die Mappe inzwischen geworden - Wann war die letzte Datensicherung - ...). Zudem haben mich die sichbare(n) Titel-, Menü- und Symbolleiste(n) von EXCEL gestört. Da ich aber überhaupt kein Freund davon bin, diese "per Code abzuschiessen", kam mir die Idee einer "überlagernden" UserForm. Also vergingen Stunden der Recherche im Netz, wie man eine UserForm positionieren kann. Klar, von Hand verschieben geht (fast) immer, aber die UserForm soll ja beim Mappenstart automatisch positioniert werden. Sisto Salera, das Schweizer VBA-Urgestein, hatte im clever-forum einen nahezu passenden Code gepostet, den ich mit wenigen Handgriffen umbauen und auf meine Bedürfnisse anpassen konnte.
Befriedigend war das Ergebnis aber noch nicht: Die Titelleiste der UserForm nahm viel wertvollen Platz ein, also wollte ich sie loswerden. Marcus Schmitt ("schmittis-page") stellt den passenden Code zur Verfügung, der wurde flugs um- und eingebaut und siehe da: Die UserForm (ShowModal-Eigenschaft auf "False" gesetzt, um in der Tabelle Hyperlinks anstossen zu können) hatte genug Platz. Wie es im Leben so ist: Oft stört einen die Fliege an der Wand, in meinen Fall war die Fliege die Umrandung der UserForm. Auch die wurde erfolgreich ins Nirvana geschickt:

 

 

Mit der "Application.OnTime"-Methode habe ich dann noch eine "Echtzeituhr" hingekriegt, nachdem ich ein wenig - wirklich, Peter, wirklich nur ein wenig - bei Peter Haserodt's Hinweisen zu OnTime "abgeguckt" habe.
Dann kam die nächste Herausforderung: Wie bei professionellen "Playern" sollte der aktuell gespielte Titel irgendwie / irgendwo / irgendwann angezeigt werden. Meine erste laienhafte Idee war, die Inhalte der aktiven Zeile (das ist ja die, in der ich den Hyperlink zum Abspielen mit WinAmp angeklickt habe) auszulesen und in irgendeiner Art und Weise (MsgBox, UserForm, Zellinhalt) zurückzugeben. ABER: Was ist, wenn WinAmp Song Nr. 3 spielt und ich die Zeile mit Song Nr. 5 aktiviere, aber den Hyperlink nicht betätige (Abbruch der Frage, ob die Datei geöffnet werden soll). Dann ist Songzeile 5 aktiv, obwohl Songzeile 3 mit WinAmp gespielt wird. Also: Die Idee war ein Griff ins Klo.
Somit war das Teilprojekt "Anzeige des aktuell gespielten Titels" vorerst auf Eis gelegt. Durch Zufall bin ich auf der Suche nach einer Lösung für ein anderes Projekt dann auf den Hinweis gestossen, dass man die sog. "ID-Tags" einer *.mp3-Datei (das sind Informationen zur *.mp3-Datei zu Titel, Länge, Interpret; Album usw., die mit der *.mp3-Datei gespeichert sind) aus WinAmp auslesen kann.
Hey, da war wieder ein Hoffnungsschimmer, die Titelanzeige doch noch zusammenschrauben zu können.
Die folgenden Abende waren gerettet: Google, Google und nochmals Google, bis ich die passenden Codes und *.dll's zusammenhatte. Flink die Verweise gesetzt ...

 

 

... 'ne UserForm zusammengeschraubt und das Ding lief:

 

 

Der Code hinter der UserForm:

...
...
...

Dim owincom As Object
Set owincom = CreateObject("WinampCOM.Application")
On Error Resume Next
Label1 = "Aktuell wird gespielt:"
Label4 = "Länge:"
Label5 = "Genre:"
Label2 = Left(owincom.CurrentSongTitle, Len(owincom.CurrentSongTitle) - 3)
Label3 = Left(CDate(owincom.CurrentSongLength / 24 / 60 / 60), 2) _
& ":" & Mid(CDate(owincom.CurrentSongLength / 24 / 60 / 60), 4, 2) _
& ":" & Right(CDate(owincom.CurrentSongLength / 24 / 60 / 60), 2) & ""
Label6 = Mid(owincom.CurrentSongTitle, Len(owincom.CurrentSongTitle) - 1, 2)
Set raZelle = Worksheets("Kategorien").Range("C3:C66").Find(Right(owincom.CurrentSongTitle, 2), _
LookIn:=xlValues, lookat:=xlWhole)

...
...
...

 

Dummerweise sorgt jedoch die fett / gross / rot dargestellte Codezeile dafür, dass - wenn Winamp noch nicht gestartet ist und somit auch keine "ID-Tags" liefern kann - der Code "abwirft" bzw. WinAmp ohne Abspielfunktion startet. Nun, dass wäre ja kein Problen, denn ich muss die UserForm ja erst aufrufen, wenn ich sicher bin, dass WinAmp läuft. Gestört hat's mich trotzdem.
Also: Start zum nächsten Flug durch die www (
WunderbarWissensintensivenWebseiten) und überall und nirgends nachgeforscht:
"VBA-Abfrage, ob Anwendung geöffnet gestartet aktiviert" (oder so ähnlich)
Und da es (fast) nix gibt, was man im Netz nicht findet, habe ich auch eine Lösung gefunden: Es gibt die Möglichkeit, die aktiven Systemprozesse (das sind die, die im Taskmanager unter "Prozesse" angezeigt werden) auszulesen. Von da an war die (vorerst ???) letzte Baustelle am Projekt Medi@archiv kein Problem mehr: Auslesen, on WinAmp einer der aktiven Prozesse ist - wenn ja, starte UserForm / wenn nein, lass es sein.
Klicke ich nun auf meinen Button ...



wird die UserForm nur geöffnet, wenn WinAmp läuft, ansonsten kommt der Hinweis ...

 



Ganz zum Schluss habe ich dann noch - auch weil die Frage seeeeehr oft in den Foren gestellt wird und ich wissen wollte, wie das geht - einen Fortschrittsbalken ("ProgressBar") in die UserForms eingebaut, die beim "Öffnen" / "Sichern" / "Neu Einlesen der Daten" eingeblendet werden:

 


Vielleicht hat die / der Eine / Andere von Euch bis hierher durchgehalten und mitgelesen, vielleicht hat die / der Eine / Andere von Euch auch ein paar Tipps "mitnehmen" können. Das würde mich freuen und mich für die Mühe der Tastaturquälerei entschädigen (warum müssen einige wichtige Tasten nur soooo weit auseinander stehen und warum haben wir eigentlich noch die Grossschreibung (Grosschreibung ? Großschreibung ?) ???
Einhandbedienung der Tastatur wäre toll !!!


Ein weiteres Projekt ist der PicMan (PictureManager)

 

Mir hat's irgendwann gewaltig gestunken, dass meine Digitalkameras für die aufgenommenen Bilder und Videos "kryptische" Dateinamen ("DSC10034" oder "MOV123") vergeben haben. Also habe ich die Dateien mit Bild- bzw. Videobearbeitungsprogrammen geöffnet, angeschaut und dann im Windows Explorer (früher nannte sich das Ding "Dateimanager") mühevoll umbenannt und "sprechende" Namen vergeben.
Auf Dauer hat aber auch diese Vorgehensweise genervt und viel Zeit gekostet.
Also musste 'ne andere Lösung her. Heute lese ich die Bilddateien über einen "Ordner suchen"-Dialog

 

ins Tabellenblatt ein und erzeuge in Spalte D kleine "Vorschaubilder".

 

 

Mit einem Klick auf das jeweilige Vorschaubild wird es grösser angezeigt,

 

 

ein weiterer Klick auf die Vergrösserung verkleinert es wieder. In Spalte E kann nun der neue Dateiname eingegeben und in den Ordner zurückgeschrieben werden (der ursprüngliche Name wird dabei überschrieben).
Das funktioniert natürlich - mit Ausnahme der Bildvorschau - mit jedem beliebigen Ordner (z.B. MP3-Dateien, die umbenannt werden sollen).
Dann kam ich auf die Idee, die Bilddateien mit Klick auf den Namen in Spalte A zusätzlich in eine UserForm einzubinden, um sie aus Excel heraus wie in einer Art "Diashow" nacheinander anzeigen zu lassen (mit "Vorwärts"- und "Rückwärts"-Button)

 

 

Zum guten Schluss habe ich - weil ich die Arbeitsmappe an gute Freunde weitergegeben habe - noch eine Art "Bedienungsanleitung" erstellt

 

 

Damit hat das zeitaufwändige Bearbeiten meiner Digitalbilder und -videos endlich ein Ende, zudem hat die Entwicklung des Tools wirklich Spass gemacht :-)

 


... wird fortgesetzt (Stand: 02.02.2010)