12.12.2019, 12:22
Hallo liebe Community,
ich bin in der Arbeit auf eine neue Challenge getroffen.
Ich soll für meinen Chef ein Excel-Makro schreiben, was anhand eine Liste mit all den Daten, die man manuell eingibt, erstellt.
Ich veranschauliche es an einem Beispiel.
Ich habe ca. 2000 Excel-Files im selben Ordner.
All diese Excel-Files haben fast das selbe Schema. Tabelle 1 heißt "Informationsblatt". In C2 befindet sich der Gerätename, in C3 die Seriennummer und in C4 die Softwareversion.
Was möchte ich?
Ein Makro, mit dem ich eingebe "C2 = PA" und "C3 = 0D49" und z.B. "C4 = <4.9". Das heißt, er soll alle Excel-Files, inklusive der Zellen schön in eine Liste packen, die als Gerätename PA, als Seriennummer 0D49 und als Softwareversion kleiner als 4.9 haben.
Das ist bis jetzt mein Code:
Er liest aber alle Excel-Files aus und schreibt diese auch schön in eine Liste, aber ich möchte sie gleich manuell filtern können. Am besten wäre es, wenn man die gesuchten Daten einfach in eine Zelle oder in ein Textfeld schreibt.
Wisst ihr, was ich meine? Ich bin leider (noch) kein Profi in VBA. :D
Danke an euch!!
Liebe Grüße
Instant
ich bin in der Arbeit auf eine neue Challenge getroffen.
Ich soll für meinen Chef ein Excel-Makro schreiben, was anhand eine Liste mit all den Daten, die man manuell eingibt, erstellt.
Ich veranschauliche es an einem Beispiel.
Ich habe ca. 2000 Excel-Files im selben Ordner.
All diese Excel-Files haben fast das selbe Schema. Tabelle 1 heißt "Informationsblatt". In C2 befindet sich der Gerätename, in C3 die Seriennummer und in C4 die Softwareversion.
Was möchte ich?
Ein Makro, mit dem ich eingebe "C2 = PA" und "C3 = 0D49" und z.B. "C4 = <4.9". Das heißt, er soll alle Excel-Files, inklusive der Zellen schön in eine Liste packen, die als Gerätename PA, als Seriennummer 0D49 und als Softwareversion kleiner als 4.9 haben.
Das ist bis jetzt mein Code:
Code:
Option Explicit
Public Sub Files_Read()
Const strSheetQ As String = "Informationsblatt" ' Die Tabelle wird ausgelesen
Const strSheetZ As String = "Tabelle1" ' Die Tabelle in dieser Datei
Const strCellQ1 As String = "C3" ' Die Zelle wird ausgelesen
Const strCellQ2 As String = "C4"
Const strCellQ3 As String = "C5"
Dim stCalc As Integer
Dim strDir As String
Dim objFSO As Object
Dim objDir As Object
On Error GoTo Fin
With Application
.ScreenUpdating = False
.AskToUpdateLinks = False
.EnableEvents = False
stCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDir = ThisWorkbook.Path ' Datei im gleichen Ordner wie Auswertungsdateien
Set objDir = objFSO.GetFolder(strDir)
'dirInfo objDir, "*.xls", True ' Mit Unterordner
dirInfo objDir, "*.xls"
Fin:
With Application
.ScreenUpdating = True
.AskToUpdateLinks = True
.EnableEvents = True
.Calculation = stCalc
.DisplayAlerts = True
End With
Set objDir = Nothing
Set objFSO = Nothing
End Sub
Public Sub dirInfo(ByVal objCurrentDir As Object, ByVal strName As String, _
Optional ByVal blnTMP As Boolean = False)
Dim objWorkbook As Workbook
Dim strFormula As String
Dim lngLastRow As Long
Dim varTMP As Variant
Const strSheetQ As String = "Informationsblatt" ' Die Tabelle wird ausgelesen
Const strSheetZ As String = "Tabelle1" ' Die Tabelle in dieser Datei
Const strCellQ1 As String = "C3" ' Die Zelle wird ausgelesen
Const strCellQ2 As String = "C4"
Const strCellQ3 As String = "C5"
For Each varTMP In objCurrentDir.Files
If varTMP.Name Like strName And varTMP.Name <> ThisWorkbook.Name Then
With ThisWorkbook.Worksheets(strSheetZ)
lngLastRow = IIf(Len(.Cells(.Rows.Count, 2)), _
.Rows.Count, .Cells(.Rows.Count, 2).End(xlUp).Row) + 1
With .Cells(lngLastRow, 2)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ1
.Offset(0, -1).Value = varTMP.Name
End With
With .Cells(lngLastRow, 3)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ2
End With
With .Cells(lngLastRow, 4)
.Formula = "='" & Mid(varTMP.Path, 1, _
InStrRev(varTMP.Path, "\")) & "[" & _
Mid(varTMP.Path, InStrRev(varTMP.Path, "\") + 1) & "]" & _
strSheetQ & "'!" & strCellQ3
End With
.UsedRange.Value = .UsedRange.Value
End With
End If
Next varTMP
If blnTMP = True Then
For Each varTMP In objCurrentDir.SubFolders
dirInfo varTMP, strName
Next varTMP
End If
Set objWorkbook = Nothing
End Sub
Er liest aber alle Excel-Files aus und schreibt diese auch schön in eine Liste, aber ich möchte sie gleich manuell filtern können. Am besten wäre es, wenn man die gesuchten Daten einfach in eine Zelle oder in ein Textfeld schreibt.
Wisst ihr, was ich meine? Ich bin leider (noch) kein Profi in VBA. :D
Danke an euch!!
Liebe Grüße
Instant