Hallo Experten!
Muss das Thema nochmals ins Spiel bringen!
Der Code, so wie es am anfang beschrieben habe funktioniert.
Nun möchte ich gerne, nicht mehr alle Ordner vom Laufwerk einlesen sondern nur bestimmte die ich im Code vorgebe.
Diese werden bei der UserForm_Initializer in den ListBox3 geschrieben
Code:
Private Sub UserForm_Initialize()
Dim varText As Variant
With Me.LListBox3
.AddItem "Arburg"
.AddItem "Boy"
.AddItem "Demag"
.AddItem "Engel"
.AddItem "Ferromatik"
.AddItem "KraussMaffei"
.AddItem "Windsor"
.ListIndex = -1 'Vorbelegung "" bei Formularstart
End With
TextBox6 = Lauf
strOrdnerEbene1() = fncOrdner(Lauf)
For lngCounter = 0 To UBound(strOrdnerEbene1)
varText = Split(strOrdnerEbene1(lngCounter), "\")
cbDokument.AddItem varText(UBound(varText))
LBOrdner.AddItem varText(UBound(varText))
Next lngCounter
lngCounter = 0
With Me.cbQar
.AddItem "Kontrollkarte 1. Quartal"
.AddItem "Kontrollkarte 2. Quartal"
.AddItem "Kontrollkarte 3. Quartal"
.AddItem "Kontrollkarte 4. Quartal"
.ListIndex = -1 'Vorbelegung "" bei Formularstart
End With
Cbjahr.List = [row(2014:2030)]
Me.CommandButton3.BackColor = vbGreen
Me.CommandButton3.Caption = "Alle Ordner auswählen"
Zähler1 = 0
Me.CommandButton4.BackColor = vbGreen
Me.CommandButton4.Caption = "Alle Unterordner auswählen"
Zähler2 = 0
Me.CommandButton5.BackColor = vbGreen
Me.CommandButton5.Caption = "Alle Dateien auswählen"
Zähler3 = 0
End Sub
Was muss beim folgenden Code umgeschrieben werden damit auch nur die in ListBox3 angewählten Ordner in den anderen ListBoxen angezeigt und weiter verarbeitet können
Code:
Option Explicit
Const Lauf = "D:\Wartungspläne\"
Private lngCounter As Long
Private strOrdnerEbene1() As String
Private strOrdnerEbene2() As String
Private strOrdnerEbene3() As String
Private lngCounter1 As Long
Public varTextQar As Variant
Public varTextjahr As Variant
Public count As Long
Public aktiv As Boolean
Public Zähler1
Public Zähler2
Public Zähler3
Private Sub Cbjahr_Change()
varTextjahr = Cbjahr.Value 'Box um Jahr auszuwählen
End Sub
Private Sub cbQar_Change()
varTextQar = cbQar.Value
End Sub
Private Sub CommandButton3_Click()
Dim i As Integer
Dim lngZ As Long
Dim NLBOrdner As Long
With Me.CommandButton3
If .BackColor = vbGreen Then
.BackColor = &H80FF& 'orange
.Caption = "Alles abwählen"
Zähler1 = 1
Else
Me.CommandButton3.BackColor = vbGreen
Me.CommandButton3.Caption = "Alle auswählen"
Zähler1 = 0
End If
End With
If Zähler1 = 1 Then
ListBox2.Clear
MsgBox "Alle ausgewählt"
For i = 0 To Start.LBOrdner.ListCount - 1 'für jede Zeile der Listbox1
Start.LBOrdner.Selected(i) = True
Next i
Else
For i = 0 To Start.LBOrdner.ListCount - 1 'für jede Zeile der Listbox1
Start.LBOrdner.Selected(i) = False
Next i
ListBox1.Clear
End If
With LBOrdner
If .ListCount Then
For lngZ = 0 To LBOrdner.ListCount - 1
If LBOrdner.Selected(lngZ) Then
Dim strText As String
Dim varText As Variant
strText = strOrdnerEbene1(LBOrdner.ListIndex)
Erase strOrdnerEbene2
strOrdnerEbene2() = fncOrdner(strText)
For lngCounter = 0 To UBound(strOrdnerEbene2)
varText = Split(strOrdnerEbene2(lngCounter), "\")
If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
Next lngCounter
End If
NLBOrdner = .ListIndex + 1
If NLBOrdner > .ListCount - 1 Then
.ListIndex = 0
Else
.ListIndex = NLBOrdner
End If
Next lngZ
End If
End With
End Sub
Private Sub CommandButton4_Click()
Dim i As Integer
Dim lngC As Long
Dim lngZ As Long
Dim NLBOrdner2 As Long
With Me.CommandButton4
If .BackColor = vbGreen Then
.BackColor = &H80FF& 'orange
.Caption = "Alle Ordner abwählen"
Zähler2 = 1
Else
Me.CommandButton4.BackColor = vbGreen
Me.CommandButton4.Caption = "Alle Ordner auswählen"
Zähler2 = 0
End If
End With
If Zähler2 = 1 Then
ListBox2.Clear
MsgBox "Alle ausgewählt"
For i = 0 To Start.ListBox1.ListCount - 1 'für jede Zeile der Listbox1
Start.ListBox1.Selected(i) = True
Next i
Else
For i = 0 To Start.ListBox1.ListCount - 1 'für jede Zeile der Listbox1
Start.ListBox1.Selected(i) = False
Next i
ListBox2.Clear
End If
With LBOrdner
If .ListCount Then
For lngZ = 0 To LBOrdner.ListCount - 1
If LBOrdner.Selected(lngZ) Then
Dim strText As String
Dim varText As Variant
strText = strOrdnerEbene1(LBOrdner.ListIndex)
Erase strOrdnerEbene2
strOrdnerEbene2() = fncOrdner(strText)
For lngCounter = 0 To UBound(strOrdnerEbene2)
varText = Split(strOrdnerEbene2(lngCounter), "\")
If UBound(varText) > -1 Then ListBox2.AddItem varText(UBound(varText))
Next lngCounter
End If
NLBOrdner2 = .ListIndex + 1
If NLBOrdner2 > .ListCount - 1 Then
.ListIndex = 0
Else
.ListIndex = NLBOrdner2
End If
Next lngZ
End If
End With
For lngC = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngC) Then prcDateien strOrdnerEbene1(LBOrdner.ListIndex) & "\" & ListBox1.List(lngC) & "\"
Next lngC
End Sub
Private Sub CommandButton5_Click()
Dim i As Integer
Dim lngC As Long
With Me.CommandButton5
If .BackColor = vbGreen Then
.BackColor = &H80FF& 'orange
.Caption = "Alle Dateien abwählen"
Zähler3 = 1
Else
Me.CommandButton5.BackColor = vbGreen
Me.CommandButton5.Caption = "Alle Dateien auswählen"
Zähler3 = 0
End If
End With
If Zähler3 = 1 Then
MsgBox "Alle ausgewählt"
For i = 0 To Start.ListBox2.ListCount - 1 'für jede Zeile der Listbox1
Start.ListBox2.Selected(i) = True
Next i
Else
For i = 0 To Start.ListBox2.ListCount - 1 'für jede Zeile der Listbox1
Start.ListBox2.Selected(i) = False
Next i
For i = 0 To Start.ListBox1.ListCount - 1 'für jede Zeile der Listbox1
Start.ListBox1.Selected(i) = False
Next i
ListBox2.Clear
Me.CommandButton4.BackColor = vbGreen
Me.CommandButton4.Caption = "Alle Ordner auswählen"
Zähler2 = 0
End If
End Sub
Private Sub CoBuDrucken_Click()
Dim lngC As Long
'Dim lListBox2 As Long
Dim i As Integer
Dim blnAuswahl As Boolean
' Ist etwas ausgewäht?
With ListBox2
For i = 0 To .ListCount - 1
If .Selected(i) Then
blnAuswahl = True
Exit For
End If
Next i
End With
If blnAuswahl = False Then
MsgBox "Nichts ausgwählt!"
Exit Sub
'
ElseIf varTextQar = "" Then ' Wenn Nichts angwählt
MsgBox "Kein Quartal ausgewählt"
ElseIf varTextjahr = "" Then ' Wenn Nichts angwählt
MsgBox "Kein Jahr ausgewählt"
Else
Stop 'Wenn alles i.O. dann Code für Drucken
For lngC = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(lngC) Then prcDateien2 Lauf & LBOrdner.Value & "\" & ListBox1.List(lngC) & "\"
Next lngC
End If
End Sub
Sub prcDateien2(strPath As String)
Dim objFSO As Object, objFolder As Object, objDatei As Object
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.getfolder(strPath)
Application.ScreenUpdating = False
For Each objDatei In objFolder.Files
If InStr(objDatei.name, ".xls") Then
Application.StatusBar = "Öffne " & objDatei & "...."
Workbooks.Open Filename:=objDatei
Dim name As String
' Tabellenblatt auswählen
ActiveWorkbook.Sheets(varTextQar).Select
' Jahr einfügen
Range("H1").FormulaR1C1 = Cbjahr.Value
Application.StatusBar = "Speichere " & objDatei & "...."
ActiveWindow.SelectedSheets.PrintOut Copies:=1
With ActiveWorkbook
.Save
.Close
End With
Application.StatusBar = False
Application.ScreenUpdating = True
Else
End If
Next objDatei
Set objFolder = Nothing
Set objFSO = Nothing
End Sub
Private Sub Image1_Click()
Unload Start
End Sub
Private Sub LBOrdner_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim strText As String
Dim varText As Variant
If Zähler1 = 1 Then Exit Sub
strText = strOrdnerEbene1(LBOrdner.ListIndex)
Erase strOrdnerEbene2
ListBox1.Clear 'Fenster löschen
ListBox2.Clear 'Fenster löschen
strOrdnerEbene2() = fncOrdner(strText)
For lngCounter = 0 To UBound(strOrdnerEbene2)
varText = Split(strOrdnerEbene2(lngCounter), "\")
If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
Next lngCounter
End Sub
Private Sub UserForm_Initialize()
Dim varText As Variant
TextBox6 = Lauf
With Me.LListBox3
.AddItem "Arburg"
.AddItem "Boy"
.AddItem "Demag"
.AddItem "Engel"
.AddItem "Ferromatik"
.AddItem "KraussMaffei"
.AddItem "Windsor"
.ListIndex = -1 'Vorbelegung "" bei Formularstart
End With
strOrdnerEbene1() = fncOrdner(Lauf)
For lngCounter = 0 To UBound(strOrdnerEbene1)
varText = Split(strOrdnerEbene1(lngCounter), "\")
cbDokument.AddItem varText(UBound(varText))
LBOrdner.AddItem varText(UBound(varText))
Next lngCounter
lngCounter = 0
With Me.cbQar
.AddItem "Kontrollkarte 1. Quartal"
.AddItem "Kontrollkarte 2. Quartal"
.AddItem "Kontrollkarte 3. Quartal"
.AddItem "Kontrollkarte 4. Quartal"
.ListIndex = -1 'Vorbelegung "" bei Formularstart
End With
Cbjahr.List = [row(2014:2030)]
Me.CommandButton3.BackColor = vbGreen
Me.CommandButton3.Caption = "Alle Ordner auswählen"
Zähler1 = 0
Me.CommandButton4.BackColor = vbGreen
Me.CommandButton4.Caption = "Alle Unterordner auswählen"
Zähler2 = 0
Me.CommandButton5.BackColor = vbGreen
Me.CommandButton5.Caption = "Alle Dateien auswählen"
Zähler3 = 0
End Sub
Function fncOrdner(strPath As String) As String()
Dim objFSO As Object, objFolder As Object, objOrdner As Object
Dim strOrdner() As String
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.getfolder(strPath)
For Each objOrdner In objFolder.subfolders
ReDim Preserve strOrdner(0 To lngCounter)
strOrdner(lngCounter) = objOrdner.Path
lngCounter = lngCounter + 1
Next objOrdner
fncOrdner = strOrdner
Set objFolder = Nothing
Set objFSO = Nothing
End Function
Private Sub cbDokument_Click()
Dim strText As String
Dim varText As Variant
strText = strOrdnerEbene1(cbDokument.ListIndex)
Erase strOrdnerEbene2
ListBox1.Clear 'Fenster löschen
ListBox2.Clear 'Fenster löschen
strOrdnerEbene2() = fncOrdner(strText)
For lngCounter = 0 To UBound(strOrdnerEbene2)
varText = Split(strOrdnerEbene2(lngCounter), "\")
If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
Next lngCounter
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngC As Long
Dim i As Integer
ListBox2.Clear
For lngC = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngC) Then prcDateien strOrdnerEbene1(LBOrdner.ListIndex) & "\" & ListBox1.List(lngC) & "\"
Next lngC
End Sub
Sub prcDateien(strPath As String)
Dim objFSO As Object, objFolder As Object, objDatei As Object
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.getfolder(strPath)
For Each objDatei In objFolder.Files
If InStr(objDatei.name, ".xls") Then ListBox2.AddItem objDatei.name
Next objDatei
Set objFolder = Nothing
Set objFSO = Nothing
End Sub
Bei diesen Code werden über ListIndex, 9 Ordner eingelesen habe aber nur noch 7
Habe das mit den jetzigen Code versucht doch wenn ich dann in der ListBox3 "Windsor" anwähle ( ListIndex7) nimmt er mir eine anderen Ordner.
Die Idee den ListIndex zu erhöhen und vergleichen was hinter dem steht sind bis jetzt bei mir gescheitert.
Wenn eine Datei erforderlich ist schreibt eine PN und ich sende sie zu!