Comboboxen in abhängikeit
#21
Hallo Stefan!

Danke für die Antwort.
Hab das jetzt mal getestet. So wollte ich es im Aufbau haben.
Gibt halt leider noch einen Haken.
cbDokument2 habe ich durch eine ListBox ersetzt, wird auch alles angezeigt was soll.
Nur wenn ich in cbDokument eine neue Auswahl treffe dann aktualisiert sich die Listbox nicht, war bei der cbDokument2 auch so.
Ich hab schon einiges ausprobiert, komme leider nicht weiter (liegt auch daran das ich an der Arbeit bin  :22: ).

Code:
Option Explicit
Private lngCounter As Long
Private strOrdner() As String

Private Sub Image1_Click()
 
 Unload UserForm1

End Sub

Private Sub UserForm_Initialize()
  Dim varText As Variant
   
  fncOrdner "N:\Wartungspläne\", strOrdner()
  For lngCounter = 0 To UBound(strOrdner)
     varText = Split(strOrdner(lngCounter), "\")
     cbDokument.AddItem varText(UBound(varText))
  Next lngCounter
  lngCounter = 0
 
 ListBox1.MultiSelect = fmMultiSelectMulti
 ListBox1.ListStyle = fmListStyleOption
End Sub
Function fncOrdner(strPath As String, strOrdner() As String)
  Dim objFSO As Object, objFolder As Object, objOrdner As Object
 
  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
 
  Set objFolder = Nothing
  Set objFSO = Nothing
End Function

Private Sub cbDokument_Click()
  Dim strText As String
  Dim varText As Variant
 
  strText = strOrdner(cbDokument.ListIndex)
  Erase strOrdner
  fncOrdner strText, strOrdner()
 
 
  For lngCounter = 0 To UBound(strOrdner)
     varText = Split(strOrdner(lngCounter), "\")
     If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
  Next lngCounter
     
End Sub
Ab und zu bekomme ich auch noch einen Laufzeitfehler "9" bei der Auswahl in der coDokument
mfg
Michael
:98:

WIN 10  Office 2019
Top
#22
Hallo Michael,

zur Listboxaktualisierung
Code:
Private Sub cbDokument_Click()
  Dim strText As String
  Dim varText As Variant

  strText = strOrdner(cbDokument.ListIndex)
  Erase strOrdner
  ListBox1.Clear
  fncOrdner strText, strOrdner()


  For lngCounter = 0 To UBound(strOrdner)
     varText = Split(strOrdner(lngCounter), "\")
     If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
  Next lngCounter
    
End Sub

zum Laufzeitfehler kann ich nichts sagen.
Gruß Stefan
Win 10 / Office 2016
Top
#23
Hallo Stefan!

Das war es leider nicht! Hatte diesen Ansatz auch schon.
Die ListBox wird schon gelöscht, dann erscheint ganz was andres.
Irgendwie liest er den Ordner nicht mehr richtig ein, nach der dritten Auswahl ist die ListBox dann ganz Leer.
mfg
Michael
:98:

WIN 10  Office 2019
Top
#24
Hallo Michael,

(12.07.2016, 07:43)michel34497 schrieb: Die ListBox wird schon gelöscht, dann erscheint ganz was andres.
Irgendwie liest er den Ordner nicht mehr richtig ein, nach der dritten Auswahl ist die ListBox dann ganz Leer.

Keine Ahnung, vielleicht hat der Ordner keinen Unterordner? Mache eine Haltepunkt und schaue wie der Code abgearbeitet wird.
Gruß Stefan
Win 10 / Office 2016
Top
#25
Hallo Stefan!

Habe folgendes festgestellt.

Beim Start liest der Code alles richtig N:\Wartungspläne\Ordner1-5

Dann wähle ich den ersten Ordner in der Combobox aus, die nächsten Ordner werden eingelesen und auch in der ListBox angezeigt
N:\Wartungspläne\Ordner1\Ordner1-12 
Bis hierhin alles richtig!
Jetzt wähle ich in der Combobox einen anderen Ordner an.
Nun sollte der weg doch so aus sehen  N:\Wartungspläne\Ordner2\Ordner1-4
Er bleibt aber so    N:\Wartungspläne\Ordner1\Ordner1-12 

Ich habe ein paar Greenshots gemacht vielleicht helfen diese auch weiter.


Angehängte Dateien Thumbnail(s)
                       
   
mfg
Michael
:98:

WIN 10  Office 2019
Top
#26
Hallo Michael,

vermutlich wird beim zweiten Mal das Click-Ereignis nicht ausgeführt. Mache einen Haltepunkt oder setze ein Stop
Code:
Private Sub cbDokument_Click()
  Dim strText As String
  Dim varText As Variant
  
  Stop
  strText = strOrdner(cbDokument.ListIndex)
  Erase strOrdner
  ListBox1.Clear
  fncOrdner strText, strOrdner()


  For lngCounter = 0 To UBound(strOrdner)
     varText = Split(strOrdner(lngCounter), "\")
     If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
  Next lngCounter
    
End Sub

Wenn beim zweiten Mal Du nicht in den VBA-Editor kommst, wird das Ereignis nicht ausgeführt.
Gruß Stefan
Win 10 / Office 2016
Top
#27
Hallo!

Das Click Ereignis wird ausgeführt!
Muss Leider grade noch an der Arbeit was schaffen
Melde mich nachher nochmal
mfg
Michael
:98:

WIN 10  Office 2019
Top
#28
Hallo!

Wie gesagt das ClickEreigniss wird ausgführt.
Der Code ändert aber nicht, wenn eine andere auswhlal in der CB statt findet den Pfad.
Beispiele:
Angewählt
N:\Wartungspläne\Arburg
Alle Ordner unter Arburg werden angezeigt.

Neue auswahl in der CB

Boy in der CB angewählt und er sollt genau das gleiche machen.
N:\Wartungspläne\Boy\
und alle unter Ordner anzeigen

Wenn ich das im einzelschritt wieder teste wird mir dann angezeit

N:\Wartungspläne\Arburg      angezeigt müsste aber aussehen      N:\Wartungspläne\Boy

Dadurch kommt auch wahrscheinlich der Laufzeitfehler
Habe bis jetzt selber nach dem Fehler gesucht und komme aber nicht darauf.

Wer kann noch helfen?
mfg
Michael
:98:

WIN 10  Office 2019
Top
#29
Hallo Michael,

was für Inhalte sind im Array strOrdner wenn der Code stoppt? Überprüfe dies mal im Lokalfenster.
Gruß Stefan
Win 10 / Office 2016
Top
#30
Hallo Stefan!
Danke das du noch dabei bist.

Also was ich im Lokalf. sehe ist, das bei erneuter auswahl immer noch das gleich steht wie beim erstenmal.
Ablauf Start vom Code und auswahl in der CB

Beim ersten durchlauf und auswahl in cbDokument steht in dieser Zeile
strText = strOrdner(cbDokument.ListIndex)
strOrdner(cbDokument.ListIndex)="F:\Wartungspläne\Arburg"                         (cbDokument.ListIndex=1)
nach der erneuten Auswahl (Boy) in der cbDokument steht in dieser Zeile
strText = strOrdner(cbDokument.ListIndex)
strOrdner(cbDokument.ListIndex)="F:\Wartungspläne\Arburg\Arburg50.01"     (cbDokument.ListIndex=2)

Was sich geändert hat ist der ListIndex was vorher 1 war ist jetzt 2

Ich denke da hängt die sache


Private Sub cbDokument_Click()
  Dim strText As String
  Dim varText As Variant
  strText = strOrdner(cbDokument.ListIndex)
  Erase strOrdner
  ListBox1.Clear
  fncOrdner strText, strOrdner()
  For lngCounter = 0 To UBound(strOrdner)
     varText = Split(strOrdner(lngCounter), "\")
     If UBound(varText) > -1 Then ListBox1.AddItem varText(UBound(varText))
  Next lngCounter
  End Sub

Ich gehe davon aus das im strOrdner was gelöscht werden müsste (rot makiert, ich weiß es aber nicht genau) um dann cbDokument.ListIndex neu ein zu lesen
strOrdner(cbDokument.ListIndex)="F:\Wartungspläne\Arburg\Arburg50.01"     (cbDokument.ListIndex=2)

Habe bis jetzt auch rumgetüfftel, aber noch kein ergebniss gefunden

Hoffe das sind die richtigen Info's die du brauchst.
mfg
Michael
:98:

WIN 10  Office 2019
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste