Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1360to1364
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmten Inhaltz der Datei auslesen

Bestimmten Inhaltz der Datei auslesen
30.05.2014 08:37:01
Selma
Hallo Leute,
in dem Verzeichnis „D:\Einstellungen\users“ befinden sich viele Unterordner.
In jedem dieser Unterordner liegt in der Regel eine Datei, die genauso heißt wie der Ordnername und als Dateiendung .ini (Beispiel: D:\Einstellungen\users\MuellerS\muellers.ini)
Ich möchte in einem MsgBox aus diesen ini-Dateien nach „_SYST_PROJECTNAME = “ suchen und den Text der danach kommt auslesen.
Ausschnitt aus einer Datei (D:\Einstellungen\users\MuellerS\muellers.ini):
_SYST_PROJECTNAME = BMW Welt
Die Ergebnisse im MsgBox nach Möglichkeit alphabetisch nach Ordnername ausgeben:
MuellerS = BMW Welt
Mustermann = Flughafen Berlin

usw.
Wie mache ich das Bitte per VBA?
Besten Dank im Vorraus!
Viele Grüße,
Selma

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmten Inhaltz der Datei auslesen
31.05.2014 20:31:34
fcs
Hallo Selma,
nach folgend ein Makro, dass dir die Liste der Eintrage als Exceltabelle ausgibt.
Das mit der MsgBox ist doch mühselig zu lesen, speziell wenn die Liste etwas länger ist.
Gruß
Franz
'Code in einem allgemeinen Modul
Option Explicit
'Quelle: http://www. _
herber.de/forum/archiv/1064to1068/t1064122.htm#1064890
'Modifiziert: fcs 2010-08-07
Public lCount As Long, arrFiles() As String
Sub ListFilesInFolder(ByVal SourceFolderName As String, _
Optional DateiFormat As String = "*.*", _
Optional IncludeSubfolders As Boolean = False)
'1.Parameter Ordner, wo soll gesucht werden?
'2.Parameter Datei,* als Platzhalter verwenden,Optional leer ist alle
'3.Parameter mit Unterordner = True, Optional False ist ohne
'Erstellt gemäß Suchkriterien ein Array mit den Dateinamen und Pfad\Dateiname
Dim FSO As Object, SourceFolder As Object, SubFolder As Object
Dim FileItem
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.GetFolder(SourceFolderName)
On Error GoTo Err_Zugriff: 'sollte Ordner geschützt sein
For Each FileItem In SourceFolder.Files
If LCase(FileItem.Name) Like LCase(DateiFormat) Then
lCount = lCount + 1
ReDim Preserve arrFiles(1 To 2, 1 To lCount)
arrFiles(1, lCount) = FileItem
arrFiles(2, lCount) = FileItem.Name
End If
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, DateiFormat, IncludeSubfolders, FolderName
Next SubFolder
End If
Err_Zugriff:
Set FileItem = Nothing: Set SourceFolder = Nothing: Set FSO = Nothing
End Sub
Sub SearchINI_Dateien()
Dim Zeile As Long
Dim strVerzeichnis As String, strText As String, arrSplit As Variant
Dim wksListe As Worksheet
Dim FF As Integer
Dim bolGefunden As Boolean
Erase arrFiles
lCount = 0
strVerzeichnis = "D:\Einstellungen\users"
'    strVerzeichnis = "C:\Users\Public\Test\Users"
Call ListFilesInFolder(SourceFolderName:=strVerzeichnis, _
DateiFormat:="*.INI", _
IncludeSubfolders:=True)
If lCount > 0 Then
'Neue Datei mit einem Blatt anlegen
Application.Workbooks.Add Template:=xlWBATWorksheet
Set wksListe = ActiveSheet
ActiveSheet.Range("A2").Select
ActiveWindow.FreezePanes = True
With wksListe
Zeile = 1
.Cells(Zeile, 1) = "Ordnername"
.Cells(Zeile, 2) = "Dateiname"
.Cells(Zeile, 3) = "_SYST_PROJECTNAME ="
For lCount = 1 To UBound(arrFiles, 2)
bolGefunden = False
arrSplit = Split(arrFiles(1, lCount), "\")
FF = FreeFile()
Open arrFiles(1, lCount) For Input As #FF
Do Until EOF(FF)
Line Input #FF, strText
If InStr(1, strText, "_SYST_PROJECTNAME =") > 0 Then
bolGefunden = True
Zeile = Zeile + 1
.Cells(Zeile, 1) = arrSplit(UBound(arrSplit) - 1)
.Cells(Zeile, 2) = arrFiles(2, lCount)
.Cells(Zeile, 3) = Trim(Mid(strText, InStr(1, strText, "=") + 1))
End If
Loop
If bolGefunden = False Then
Zeile = Zeile + 1
.Cells(Zeile, 1) = arrSplit(UBound(arrSplit) - 1)
.Cells(Zeile, 2) = arrFiles(2, lCount)
.Cells(Zeile, 3) = "#kein Eintrag vorhanden#"
End If
Erase arrSplit
Close FF
Next
Erase arrFiles
lCount = 0
With .Range(.Cells(2, 1), .Cells(Zeile, 3))
.Sort key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo
.EntireColumn.AutoFit
End With
End With
Else
MsgBox "keine Dateien gefunden"
End If
End Sub

Anzeige
AW: Bestimmten Inhaltz der Datei auslesen
02.06.2014 09:46:45
Selma
Hallo Franz,
ich bekomme die Meldung bei FolderName: Fehler beim Kompilieren - Variable nicht definiert.
Sub ListFilesInFolder(ByVal SourceFolderName As String, _
Optional DateiFormat As String = "*.*", _
Optional IncludeSubfolders As Boolean = False)
Viele Grüße,
Selma

AW: Bestimmten Inhaltz der Datei auslesen
02.06.2014 15:10:00
fcs
Hallo Selma,
Ändere die Zeile
            ListFilesInFolder SubFolder.Path, DateiFormat, IncludeSubfolders, FolderName

in
            ListFilesInFolder SubFolder.Path, DateiFormat, IncludeSubfolders
Da hatte zum Schluss eine Anpassung nicht mehr getestet und diese Zeile übersehen, die den Parameter "Foldername" noch mit verarbeitet.
Gruß
Franz

Anzeige
AW: Bestimmten Inhaltz der Datei auslesen
03.06.2014 09:56:06
Selma
Hallo Franz,
jetzt funktioniert es perfekt. Vielen Dank!
Die Ausgabe in einem MsgBox wäre mir lieber, weil ich dieses Makro in eine andere Anwendung benutzen möchte. Geht das auch? Falls ja, was muss ich bitte ändern. Danke!
Grüße,
Selma

AW: Bestimmten Inhaltz der Datei auslesen
03.06.2014 14:31:19
fcs
Hallo Selma,
mit der folgenden Verson des Haupmakros wird die Info zu den gefundenen INI in einer MsgBox angezeigt.
Die Textmenge der Textbox ist allerdings begrenzt ( ca 20 bis 25 Einträge). Ggf. musst du umstellen, so dass jeder Users einzeln angezeigt wird.
Gruß
Franz
Sub SearchINI_MsgBox()
Dim strVerzeichnis As String, strText As String, arrSplit As Variant
Dim FF As Integer
Dim bolGefunden As Boolean, bolEinzeln As Boolean, strMsgTxt As String
bolEinzeln = False 'Wert auf True ändern, wenn die MsgBox für jeden User _
einzeln angezeigt werden soll
Erase arrFiles
lCount = 0
strVerzeichnis = "D:\Einstellungen\users"
strVerzeichnis = "D:\Test\Users"
Call ListFilesInFolder(SourceFolderName:=strVerzeichnis, _
DateiFormat:="*.INI", _
IncludeSubfolders:=True)
If lCount > 0 Then
For lCount = 1 To UBound(arrFiles, 2)
bolGefunden = False
arrSplit = Split(arrFiles(1, lCount), "\")
FF = FreeFile()
Open arrFiles(1, lCount) For Input As #FF
Do Until EOF(FF)
Line Input #FF, strText
If InStr(1, strText, "_SYST_PROJECTNAME =") > 0 Then
bolGefunden = True
If bolEinzeln = True Then strMsgTxt = ""
strMsgTxt = strMsgTxt & arrSplit(UBound(arrSplit) - 1) _
& " | " & arrFiles(2, lCount) _
& " | " & Trim(Mid(strText, InStr(1, strText, "=") + 1)) & vbLf
If bolEinzeln = True Then
Select Case MsgBox(strMsgTxt, vbRetryCancel, _
"User-INI " & lCount & " von " & UBound(arrFiles, 2) _
& " - Text nach ""_SYST_PROJECTNAME =""")
Case vbRetry
'Sucht nach der nächsten Datei
'hier ggf. weitere Aktionen einfügen/starten
Case vbCancel
'bricht die weitere Suche ab
GoTo Beenden
End Select
End If
End If
Loop
If bolGefunden = False Then
If bolEinzeln = True Then strMsgTxt = ""
strMsgTxt = strMsgTxt & arrSplit(UBound(arrSplit) - 1) _
& " | " & arrFiles(2, lCount) _
& " | " & "#kein Eintrag vorhanden#" & vbLf
If bolEinzeln = True Then
Select Case MsgBox(strMsgTxt, vbRetryCancel, _
"User-INI - Text nach ""_SYST_PROJECTNAME =""")
Case vbRetry
'Sucht nach der nächsten Datei
'hier ggf. weitere Aktionen einfügen/starten
Case vbCancel
'bricht die weitere Suche ab
GoTo Beenden
End Select
End If
End If
Erase arrSplit
Close FF
Next
Erase arrFiles
lCount = 0
If bolEinzeln = False Then
If MsgBox(strMsgTxt, vbOKCancel, "User-INI - Daten") = vbOK Then
'hier Aktion starten
Else
'Beenden
End If
End If
Else
MsgBox "keine Dateien gefunden"
End If
Beenden:
Close 'schließ evtl. noch geöffnete Datenkanäle
If IsArray(arrSplit) Then Erase arrSplit
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige