Clever-Excel-Forum

Normale Version: Comboboxen in abhängikeit
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
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
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.
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.
Hallo Michael,

(12.07.2016, 06: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.
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.
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.
Hallo!

Das Click Ereignis wird ausgeführt!
Muss Leider grade noch an der Arbeit was schaffen
Melde mich nachher nochmal
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?
Hallo Michael,

was für Inhalte sind im Array strOrdner wenn der Code stoppt? Überprüfe dies mal im Lokalfenster.
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.
Seiten: 1 2 3 4