[VBA/Excel] Dmv Win32 API zoeken in bestanden *

Pagina: 1
Acties:
  • 156 views sinds 30-01-2008
  • Reageer

  • 456
  • Registratie: April 2000
  • Niet online

456

Onze excuses voor het ongemak

Topicstarter
Ik zou graag de onderstaande functie van windows willen gebruiken, om het aantal bestanden te tellen die aan een voorwaarde voldoen:
(CLickable)
Afbeeldingslocatie: http://stuwww.uvt.nl/~s990868/untitled1k.jpg


Is het mogelijk om middels VBA in excel de invoer te bepalen welke bij pijl 1 staat?
Is het mogelijk om bij de output (pijl2) het aantal bestandjes te tellen wat de zoekfunctie als resultaat terug geeft.

Nu zou ik al geholpen zijn, als iemand me op weg helpt OF het uberhaupt mogelijk is of de zoekfunctie aan te roepen is.

[ Voor 7% gewijzigd door 456 op 30-09-2003 16:16 . Reden: plaatje ]

Een dag geen vertraging, is een dag niet gereisd


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je plaatje doet het hier niet echt. Heb je nog andere hosting?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Wellicht kan je hier even kijken. Als het goed is kan je hiervoor gewoon gebruik van maken. Dan met name van de volgende API Declaraties:
Visual Basic:
1
2
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

[ Voor 49% gewijzigd door Woudloper op 30-09-2003 16:13 ]


  • 456
  • Registratie: April 2000
  • Niet online

456

Onze excuses voor het ongemak

Topicstarter
Dank, daar kan ik denk ik wel iets mee. Kga er even mee aan de slag. Ik hoop dat mijn plaatje het inmiddels 'weer' doet?(ik kon hem gewoon zien, wellicht cache, of heeft provider er even uitgelegen)
Zie ondertitel ;)

[ Voor 4% gewijzigd door 456 op 30-09-2003 17:16 ]

Een dag geen vertraging, is een dag niet gereisd


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Woudloper: daar heeft de TS weinig aan, daarmee kan hij alleen maar files vinden die aan een bepaalde naam voldoen, en niet zoeken naar een bepaalde tekst in files

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • 456
  • Registratie: April 2000
  • Niet online

456

Onze excuses voor het ongemak

Topicstarter
Klopt, was ik ook al achter. Maar de gegeven link heeft me enorm veel meer informatie (aan vnl.links) opgeleverd, welke ik nu aant doorspitten ben. Als ik een oplossing heb, meld ik me weer, of als iemand iets weet, spui het.

Een dag geen vertraging, is een dag niet gereisd


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

.oisyn :: helemaal gelijk, maar dit was alleen een handreiking hoe je de bestanden kon vinden en op de link (staat bij geaccepteerde antwoorden) hetgeen de topicstarter (TP) wilde weten als je het mij vraagt.

Overigens kan de TP'er ook nog op deze link klikken want daar staat het gebruik van de gegeven functie helemaal uitgelegd.

  • 456
  • Registratie: April 2000
  • Niet online

456

Onze excuses voor het ongemak

Topicstarter
Dan nu zelf maar het antwoord geven. Ik heb het gevonden op een ander vba forum. Die kerel kwam gewoon met een excel bestandje zelf aan, werkend op *.txt. Deze kun je echter makkelijk in *.doc veranderen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Option Explicit

Sub z()

    Dim lngIndex As Long
    Dim strSearchFor As String
    Dim strLocation As String
    Dim rngFiles As Range
    
    strLocation = Range("D2").Text
    If Range("D5") <> "" Then
        strSearchFor = Range("D5").Text
        If Range("D7") <> "" Then
            If Range("D6") = "And" Then
                strSearchFor = strSearchFor & " and " & Range("D7").Text
            Else
                strSearchFor = strSearchFor & " or " & Range("D7").Text
            End If
            If Range("D9") <> "" Then
                If Range("D8") = "And" Then
                    strSearchFor = strSearchFor & " and " & Range("D9").Text
                Else
                    strSearchFor = strSearchFor & " or " & Range("D9").Text
                End If
            End If
        End If
    End If
    
    If strSearchFor = "" Then
        MsgBox "Nothing to search for", vbExclamation
        Exit Sub
    End If
    
    With Application.FileSearch
        .NewSearch
        .LookIn = strLocation
        .SearchSubFolders = False
        .TextOrProperty = strSearchFor
        .Filename = "*.txt"
        .Execute
        
        Range("B:B").Clear
        Set rngFiles = Range("B15")
        rngFiles.Offset(0, 0) = "Found " & .FoundFiles.Count & " containing " & .TextOrProperty
        For lngIndex = 1 To .FoundFiles.Count
            ActiveSheet.Hyperlinks.Add Anchor:=rngFiles.Offset(lngIndex, 0), Address:=.FoundFiles.Item(lngIndex)
        Next
    End With


End Sub

Bron: http://ozgrid.com/forum/viewthread.php?tid=6532
Bestand: http://ozgrid.com/forum/v...chment&tid=6532&pid=30911

Ik weet niet of je je een voorstelling kan maken van de sheet zelf, anders moet het bestandje even gedownload worden (ik host niet zelf, is van dat betreffende forum, als ie offline is, jammer maar helaas. Daarom wel even de code hier gepost, voor later)

edit:
Ik heb even, voor de duidelijkheid, dit erbij/onder gezet:
code:
1
2
3
4
5
6
7
    With Application.FileSearch
        .NewSearch
        .LookIn = strLocation
        .SearchSubFolders = False
        .TextOrProperty = strSearchFor
        .Filename = "*.txt"
        .Execute

Laatst genoemde code is dus de daadwerkelijke zoekfunctie. O o o o o o wat simpel he ;)
De opties spreken voor zich, enkele licht ik er even uit:
.Lookin = de directory waar in gezocht moet worden
.TextOrProperty = de waarde die gezocht moet worden
.Filename = welke bestanden moeten er in bovengenoemde directory worden bekeken of ze de bovengenoemde string bevatten.
Er is ook een beperkte Help in VBA zelf te vinden over FileSearch
C'est tout!

[ Voor 32% gewijzigd door 456 op 01-10-2003 14:05 ]

Een dag geen vertraging, is een dag niet gereisd

Pagina: 1