Microsoft Excel

Herbers Excel/VBA-Archiv

geschenkt

Betrifft: geschenkt von: Tino
Geschrieben am: 10.08.2008 01:21:42

Hallo Forum,
da ich etwas lange weile hatte, habe ich mal eine *.dll unter VB6 erstellt.
Diese dll soll vor allem die fehlende in Application.FileSearch in Office 2007 ersetzen,
weil es diese wie bekannt nicht mehr gibt, diese kann aber auch in anderen Versionen verwendet werden.
Damit kann man sich einiges an Codezeilen in seinem Projekt sparen.

Beispiele zur Deklarierung und Verwendung siehe Beispiele unten.
Um diese in Deinem Projekt einzubinden, gehe im VBA-Editor unter
Extras- Verweise… und füge diese über Durchsuchen… ein.
überprüfe nochmals die Aktivierung der FindMeFile.dll.
Ganz unten findest Du noch wie dies mit VBA erledigt werden kann,
dazu muss der Zugriff auf VBA Projekte vertraut werden.

Die Rückgabe aus der *.dll ist eine mehrdimensionale Area

Hier ein bar Beispiele zur Verwendung

Sub DemoVersion1()
'die Deklarierung
Dim objMeFile As New FindMeFile.SuchFils
'für die Rückgabe
Dim ArFile()
'sonstige Deklarierung
Dim A As Long

Application.ScreenUpdating = False
Cells.Clear

'hier erfolgt die Abfrage aus der FindMeFile.dll
'optionale Parameter müssen nicht angegeben werden.
'1. Parameter- Suchordner (String)
'2. Parameter- Suchfile (String) * als Platzhalter
'3. Parameter- Suche in Unterordner (Optional Boolean)
'4. Parameter- Sortieren nach Erstelldatum (Optional Boolean)
'   dieser Parameter benögigt mehr Zeit
ArFile = objMeFile.MeExcelSuche("C:\Anwendungsdaten", "*", True, False)

'Beipiel zur Verwendung der Area
'in diesem Beispiel
'A ist die Position in der Matrix
'Die Werte 0=Pfad; 1=Dateiname; 2=Erstelldatum
If Not IsEmpty(ArFile(0, 0)) Then 'was gefunden?
 For A = LBound(ArFile) To UBound(ArFile)
  Cells(A + 1, 1) = ArFile(A, 0) 'Pfad
  Cells(A + 1, 2) = ArFile(A, 1) 'Datei
  Cells(A + 1, 3) = ArFile(A, 2) 'Datum Erstellt
 Next A
End If


Application.ScreenUpdating = True
End Sub



Sub DemoVersion2() 'Beschreibung siehe Version1
Dim objMeFile As Object
Dim ArFile()
Dim A As Long
Set objMeFile = CreateObject("FindMeFile.SuchFils")
Application.ScreenUpdating = False
Cells.Clear
ArFile = objMeFile.MeExcelSuche("C:\Anwendungsdaten\", "*", True, True)

If Not IsEmpty(ArFile(0, 0)) Then
 For A = LBound(ArFile) To UBound(ArFile)
  Cells(A + 1, 1) = ArFile(A, 0) 'Pfad
  Cells(A + 1, 2) = ArFile(A, 1) 'Datei
  Cells(A + 1, 3) = ArFile(A, 2) 'Datum Erstellt
 Next A
End If
Application.ScreenUpdating = True
Set objMeFile = Nothing
End Sub



'Registrierung der FindFile.dll mit VBA,
'Zugriff auf VBA Projekte muss vertraut werden

Sub regestrieren()
Dim DllPath As String
    DllPath = _
    IIf(Right$(ThisWorkbook.Path, 1) = "\", _
    ThisWorkbook.Path & "FindFile.dll", _
    ThisWorkbook.Path & "\FindFile.dll")
Shell "regsvr32 /s " & Chr(34) & DllPath & Chr(34)
ThisWorkbook.VBProject.references.AddFromFile (DllPath)
End Sub



Sub deregistrieren()
Dim DllPath As String
    DllPath = _
    IIf(Right$(ThisWorkbook.Path, 1) = "\", _
    ThisWorkbook.Path & "FindFile.dll", _
    ThisWorkbook.Path & "\FindFile.dll")

On Error Resume Next
ThisWorkbook.VBProject.references.Remove _
ThisWorkbook.VBProject.references("FindMeFile")
Shell "regsvr32 /s /u " & Chr(34) & DllPath & Chr(34)
End Sub



Hier die FindFile.dll als *.zip
https://www.herber.de/bbs/user/54476.zip

Viel Spaß damit.
PS: über eine Rückmeldung würde ich mich freuen.

Gruß Tino

www.VBA-Excel.de


  

Betrifft: AW: geschenkt von: Nepumuk
Geschrieben am: 10.08.2008 08:42:09

Hallo Tino,

interessanter wäre natürlich der Code. Kaum jemand darf in seiner Firma eine DLL ohne Zertifikat installieren. Aber die Klassen in ein Addin zu verfrachten und darin zu benutzen kann jeder.

Gruß
Nepumuk


  

Betrifft: AW: geschenkt von: Tino
Geschrieben am: 10.08.2008 09:55:25

Hallo Nepumuk,
vor deinen VBA Künsten ziehe ich meinen Hut, aber aus diesem Grund habe ich eine solche Rückmeldung von Dir auch erwartet. ;-)
Der Code der zum Einsatz kommt, kann man mit etwas stöbern im Archiv sich selbst zusammenbasteln und sich ein entsprechendes Addin erstellen.
Mein Hintergedanke war eher, weil nicht jeder ein entsprechendes Programm zum erstellen solcher dll Dateien besitzt, eine fertige dll zu erstellen.
Nicht viele habe die rechte solch eine dll einzubinden, aber ich gehe mal davon aus dass es genau so viele gibt die diese rechte besitzen.
Hat man die nötigen rechte, braucht man nur diese dll einbinden und man kann mit einem Einzeiler
(von der Deklarierung abgesehen) eine Ordnerabfrage starten.
Jeder weis wahrscheinlich wie viel Codezeilen nötig sind (in 2007), um einen Ordner mit Unterordner nach Dateien zu durchsuchen.

Schlussfolge.
Derjenige der dies für sich als nützlich betrachtet und auch einbinden kann, kann diese frei verwenden und soll spaß damit haben.


Gruß Tino


  

Betrifft: OT: ;-)) von: {Boris}
Geschrieben am: 10.08.2008 11:35:56

Hi Tino,

Nicht viele habe die rechte solch eine dll einzubinden, aber ich gehe mal davon aus dass es genau so viele gibt die diese rechte besitzen.

Fällt´s Dir auf? ;-))

Grüße Boris


  

Betrifft: AW: OT: ;-)) von: Tino
Geschrieben am: 10.08.2008 11:52:46

Hallo,
mir fällt es auf, unglücklich ausgedrückt, Schulnote 6 setzen.
Bestimmt weist du aber wie es gemeint ist.

Es gibt viele die diese Rechte nicht haben und es gibt genau so viele die diese Rechte besitzen ;-)

Gruß Tino


  

Betrifft: AW: geschenkt von: Luschi
Geschrieben am: 10.08.2008 09:33:35

Hallo Tino,

was sagt denn Vista zu der VB6-dll, das FileSearch-Objekt wird ja nicht aus purer Laune von M$ vergessen worden sein.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: geschenkt von: Tino
Geschrieben am: 10.08.2008 10:00:41

Hallo Luschi,
habe dies unter Vista mit Office 2007 und XP mit Office 2003 erfolgreich getestet.
Application.FileSearch kommt hier nicht zum Einsatz.

Gruß Tino


  

Betrifft: Ersatz für Application.FileSearch von: Tino
Geschrieben am: 10.08.2008 13:58:51

Hallo,
bevor dieser Beitrag in den unendlichen Weiten des Archivs verschwindet, wollte ich diesen auf offen stellen.
Vielleicht findet einer dies doch interessant und gibt Rückmeldung über Erfolg oder Misserfolg.
Eventuell gibt es auch Rückmeldungen zwecks Erweiterungen die unbedingt eingebaut werden sollten.


Gruß Tino

www.VBA-Excel.de