Re(3): Kniffliges Problem betreffend Suchfunktion?
Geizhals » Forum » Programmierung » Kniffliges Problem betreffend Suchfunktion? (15 Beiträge, 296 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
...
Re(3): Kniffliges Problem betreffend Suchfunktion?
05.10.2006, 23:46:04
Okay, war vielleicht doch etwas zu quick&dirty. Ich nehme an, Ihr habt in den Excel-Dateien irgendwelche Start-Makros, die die Sheets zumindest so verändern, dass beim Schliessen der Dateien Abfragen ("Wollen Sie speichern?") kommen. Wenn man diese nicht bestätigt, dann bleiben die Excel-Dateien geladen und die Kollegen bekommen diese Meldungen ("Datei schon geöffnet"). Beim Abmelden fragt Excel dann natürlich noch einmal nach, was mit den geöffneten Dateien nun passieren soll.

Ist natürlich nicht optimal. Daher werden in untenstehender Version die Dateien nun grundsätzlich im ReadOnly-Modus geöffnet und beim Schliessen der Dateien wird explizit auf das Speichern verzichtet (dann sollten auch diese Sicherheitsabfragen nicht mehr kommen).

Die Zeile mit dem obj.Visible habe ich nun etwas vorgezogen, damit man besser sieht was so abläuft. Wenn alles ordnungsgemäss und stabil läuft, kannst Du sie aber wieder runterschieben.

Es wird übrigens nun auch die Anzahl der Treffer pro Datei angezeigt (ich hab das vorher anders verstanden).

'Parameter zum anpassen
ExcelDateienPfad = "C:\Test"
SuchBlatt  = "Tabelle1"
SuchSpalten = "A:CP"

SuchBegriff = InputBox("Suchbegriff","Eingabe")

Set Fso = CreateObject("Scripting.FileSystemObject")
Set OXl = CreateObject("Excel.Application")
Set Wb = OXl.Workbooks.Add
Set ShSuchErg = Wb.Sheets(1)

OXl.Visible = True 'macht Excel sichtbar

AnzahlFundStellen = 0
ZeSuchErg = 2
For Each F In Fso.GetFolder(ExcelDateienPfad).Files
  If Right(UCase(F.Name),4) = ".XLS" Then
    Set WbHelp = OXl.Workbooks.Open(F.Path,,True) 'Öffen im ReadOnly-Modus
    With WbHelp.Sheets(SuchBlatt).Range(SuchSpalten)
      Set Ce = .Find(SuchBegriff)
      If Not Ce Is Nothing Then
        FirstAddress = Ce.Address
        FundstellenInDatei = 0
        Do
          FundstellenInDatei = FundstellenInDatei + 1
          Set Ce = .FindNext(Ce)
        Loop While Not Ce Is Nothing And Ce.Address <> FirstAddress
        ZeSuchErg = ZeSuchErg + 1
        ShSuchErg.Cells(ZeSuchErg,1) = F.Path
        ShSuchErg.Cells(ZeSuchErg,2) = FundstellenInDatei
        AnzahlFundStellen = AnzahlFundStellen + FundstellenInDatei
      End If
    End With
    ShSuchErg.Range("A1") = "Es gibt insgesamt " & AnzahlFundStellen & " Fundstellen des Suchbegriffes <" & SuchBegriff & ">"
    WbHelp.Close False 'Schliessen ohne Speichern
  End If
Next
ShSuchErg.Columns("A").AutoFit 'Spaltenbreite optimieren

Noch ein Tip: Testen würde ich generell nicht "am lebenden Objekt". Am besten erst einmal irgendwo ein Testverzeichnis anlegen und ausprobieren. Wenn es funkt, dann Pfad umstellen auf Echtbetrieb.


Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung