Hallo,
von einem LDAP-Server habe ich null Ahnung und da du deinen Code auch nicht zeigst, kann man da nicht nachschauen, ob es am Code liegt.
Das hört sich irgendwie so an, als ob diese Liste sich nicht so wahnsinnig oft ändern würde. Wenn dem so ist, dann könnte es eine Strategie sein, die Liste schon mal vorher "auf Vorrat" vom Server zu holen (weil 5-7 Sekunden empfinde ich schon wirklich krass lang).
Das einfachste ist IMHO wenn du die Liste beim Öffnen der Datei in ein ausgeblendetes Tabellenblatt schreibst. Dazu schreibst du auch einen Zeitstempel. Wenn du dann das Formular lädst, dann schaust du zuerst, wie alt die Daten im Tabellenblatt sind und wenn sie "frisch genug sind", dann nimmst du die aus dem Tabellenblatt, ansonsten eben vom LDAP-Server.
Evtl. gilt es den Datenschutz zu beachten (du hast ja dann Usernamen in der Datei abgelegt, die du evtl. nicht darin speichern willst/sollst/darfst). Da muss also evtl. nachgebessert werden.
Allerdings hat das den Nachteil, dass dann das öffnen der Datei so lange dauert. Das finde ich auch nicht so prickelnd.
Daher noch eine andere Idee von mir: Du hast ja schon den VBA-Code, um die Daten vom LDAP-Server zu holen. Könntest du das auch mit VBS oder VB? Falls das leicht umzustricken ist, dann würde ich in meiner laienhaften Naivität wahrscheinlich so vorgehen:
Beim Öffnen der Datei wird automatisch eine Textdatei mit dem VBS-Code im lokalen temp-Verzeichnis (environ("TEMP") ) abgelegt und diese wird dann gestartet. Jetzt kannst du mit Excel weiterarbeiten wärend dein VBS-Script im Hintergrund vom LDAP-Server die Daten holt und in einer Datei im temp-Verzeichnis ablegt. Sind alle Daten vom LDAP-Server in die Datei geschrieben, legt dein VBS-Code noch eine Datei "DataLoaded.txt" im temp-Verzeichnis an, in die du einen Zeitstempel reinschreibst.
Startest du nun deine Userform, schaut sie zunächst nach, ob die Datei "DataLoaded.txt" existiert und ob der Zeitstempel "frisch genug ist". Wenn das alles gut ist, holt sich die Userform die Daten aus der anderen Datei aus dem temp-Verzeichnis, was sehr schnell gehen sollte).
Existiert die Datei "DataLoaded.txt" nicht, ist entweder der VBS-Code noch nicht fertig (müsste man daran erkennen, dass die Datendatei im temp-Verzeichnis bereits existiert), oder dass das ist irgendwie schiefgegangen mit dem VBS-Code. Da kannste dir ja überlegen, wie du auf die Situationen reagieren möchtest.
Beim Schließen der Exceldatei löscht du einfach wieder alle von dir angelegten Dateien.
Dieser zweite Vorschlag ist ja schon irgendwie ein ziemlich umständliches Konstrukt. Leider weiß ich nicht, wie man anders erreichen kann, dass du mit Excel ganz normal arbeiten kannst, während im Hintergrund die Daten geholt werden. Ich bin aber in solchen Fragen auch überhaupt nicht erfahren. Das ist einfach eine Idee, wie ich es evtl. machen würde.
Grüße, Ulrich
|