Hallo,
sorry, ich hatte irgendwie an Excel gedacht.
Anstatt eines Tabellenblattes kann man natürlich auch die CustomDocumentProperties verwenden oder auch einfach eine selbstgeschriebene (Auflistungs-)Klasse oder ein öffentliches Array ...
Um eine Nebenläufigkeit zu erreichen, könntest du auch mit application.ontime ein Makro aufrufen, dass deine Listbox füllt während die Userform schon angezeigt wird - sowas habe ich noch nie gemacht. Ich finde es ziemlich heikel, mit mehreren Codes / Userinteraction gleichzeitig auf eine Userform zuzugreifen.
Alles hier in diesem Post ist experimentell!
Hier ein Beispiel: du benötigst eine Userform "Userform1" mit einer Listbox "ListBox1". Und in ein allgemeines Modul kommt dieser Code:
Option Explicit
Dim myUserform As UserForm1
Sub start()
Set myUserform = New UserForm1
Application.OnTime Now + 1 / 24 / 60 / 60, "fillListbox" 'zeitversetzt Starten
myUserform.Show
MsgBox "Hier gehts weiter nach schließen (zB. mit .Hide) der Userform"
Set myUserform = Nothing
End Sub
Private Sub fillListbox()
Dim i As Long
If Not myUserform Is Nothing Then 'sollte eigentlich nicht nötig sei'
For i = 1 To 10
myUserform.ListBox1.AddItem "Eintrag" & i
Application.Wait (Time + 1 / 24 / 60 / 60)
Next
End If
End Sub
Das obige Konstrukt scheint mir schon extrem anfällig
Vielleicht wäre es stabiler, das so zu lösen:
'====================================================================
' Allgemeines Modul: Modul2
'====================================================================
Option Explicit
Dim myUserform As UserForm1
Public myData As Variant
Sub start()
Set myUserform = New UserForm1
Application.OnTime Now + 1 / 24 / 60 / 60, "fillData" 'zeitversetzt Starten
myUserform.Show
MsgBox "Hier gehts weiter nach schließen (mit .Hide) der Userform"
Set myUserform = Nothing
End Sub
Private Sub fillData()
Dim i As Long
ReDim myData(1 To 10)
For i = 1 To 10
myData(i) = "Eintrag" & i
Application.Wait (Time + 1 / 24 / 60 / 60)
Next
End Sub
'====================================================================
' Userform: UserForm1
'====================================================================
Option Explicit
Private Sub CommandButton1_Click()
Me.Hide
End Sub
Private Sub ListBox1_Enter()
Me.ListBox1.List = VBAProject.Modul2.myData
End Sub
Oder das wäre evtl. auch eine Möglichkeit (wobei mir obige besser gefällt):
'====================================================================
' Allgemeines Modul: Modul2
'====================================================================
Option Explicit
Dim myUserform As UserForm1
Public myData As Variant
Sub start()
Set myUserform = New UserForm1
Application.OnTime Now + 1 / 24 / 60 / 60, "fillData" 'zeitversetzt Starten
myUserform.Show
MsgBox "Hier gehts weiter nach schließen (mit .Hide) der Userform"
Set myUserform = Nothing
End Sub
Private Sub fillData()
Dim i As Long
ReDim myData(1 To 10)
For i = 1 To 10
myData(i) = "Eintrag" & i
Application.Wait (Time + 1 / 24 / 60 / 60)
Next
myUserform.setListboxList myData
End Sub
'====================================================================
' Userform: UserForm1
'====================================================================
Option Explicit
Private Sub CommandButton1_Click()
Me.Hide
End Sub
Public Sub setListboxList(theList As Variant)
Me.ListBox1.List = theList
End Sub
Du bemerkst: sowas habe ich noch nicht gemacht und daher bekommst du von mir auch nur so eine Art "Brainstorming". Jetzt habe ich ein bisschen mit application.ontime rumgespielt, doch das überzeugt mich alles nicht so richtig.
Du hast ja geschrieben: "Das Speichern in eine temp. txt/csv wäre denkbar, aber da liegt die Datei ja dann langfristig.. Wäre bednklich." Wie wäre es denn, wenn du die Daten binär ablegst nachdem du sie (simpel) verschlüsselt hast? Damit würdest du sicherstellen, dass jemand, der in seinem temp-Verzeichnis rumstochert die Daten nicht sofort, ohne einen Handgriff lesen kann. Sicherheit ergibt das natürlich nicht.
Hast du das noch wo anders gefragt? Mich würde eine professionellere Lösung als meine unausgegorenen Ideen nämlich sehr interessieren.
Grüße, Ulrich
|