« Nur der HSV | Main | Islam-Versteher »
Der Ärger mit mündlichen Spezifikationen ist, das sie zwar immer frisch sind, aber leider auch seeehr mißverständlich.
Ich: "Fertig, keine Dupletten gefunden!"
MB: "Wie, ich hab
doch noch keine Mediennummer eingegeben? Ähh!?"
Ich:
"Wieso, stehen die nicht gerade doppelt in den Dateien?"
MB:
"Nein, da sind keine doppelt. Ich will nur nach einer Nummer suchen, die
ich eingebe." - Arrgh )
Gut, dann eben nocheinmal, und so: (endlich kann ich mal den Syntaxhighligter einbauen :-))
<< <Public fso As New FileSystemObject
Sub Einlesen()
Dim mediennummer As String
Dim kundendateien As Collection
Dim Worksheet As Worksheet
'Simplest handler - continue on error
On Error Resume Next
Dim Path, mediennummerSearch, msgText As String
Dim result As Collection
Dim baseFolder As folder
mediennummerSearch = InputBox("Bitte gesuchte Mediennummer eingeben: ")
If mediennummerSearch = "" Then Exit Sub
Dim RefreshYesNo
If Not map Is Nothing Then
RefreshYesNo = MsgBox("Haben Sie neue Verbuchungen vorgenommen oder hat sich das Verzeichnis geändert?: ", vbYesNo)
If RefreshYesNo = vbNo Then GoTo search
End If
Set map = New Dictionary
ReadInWorkBooks
search:
If map.Exists(mediennummerSearch) Then
msgText = "Mediennummer '" & mediennummerSearch & "' vorhanden in: " & ToString(map.Item(mediennummerSearch))
Else
msgText = "Mediennummer '" & mediennummerSearch & "' nicht gefunden!"
End If
Response = MsgBox(msgText, vbOKOnly)
End Sub
Sub ReadInWorkBooks()
Application.DisplayStatusBar = True
Path = Application.GetOpenFilename("Excel-Dateien,*.xls")
Path = Left(Path, InStrRev(Path, "\"))
Set baseFolder = fso.GetFolder(Path)
Dim workBookCount, totalCount As Integer
totalCount = baseFolder.Files.Count
For Each wbkName In baseFolder.Files
'exclude macro file, result file and non-excel files
If wbkName.Name = "Ergebnis.xls" Then GoTo continue
If wbkName.Name = ThisWorkbook.Name Then GoTo continue
If UCase(Right(wbkName.Name, 4)) <> ".XLS" Then GoTo continue
workBookCount = workBookCount + 1
Application.StatusBar = "Verarbeite " & workBookCount & "/" & totalCount
Workbooks.Open wbkName.Path
For Each Worksheet In Workbooks(wbkName.Name).Worksheets
Dim intCounter As Integer
For i = 1 To Worksheet.UsedRange.Rows.Count
For j = 1 To Worksheet.UsedRange.Columns.Count
If IsRelevant(Cells(i, j)) Then
mediennummer = Cells(i, j).Value
Kundendatei = wbkName.Name
If map.Exists(mediennummer) Then
Set kundendateien = map(mediennummer)
kundendateien.Add Kundendatei
Else
Set kundendateien = New Collection
kundendateien.Add Kundendatei
map.Add mediennummer, kundendateien
End If
End If
Next j
Next i
Next
Workbooks(wbkName.Name).Close
continue:
Next
Application.StatusBar = False
End Sub