Thema Datum  Von Nutzer Rating
Antwort
22.10.2018 11:25:24 Andreas Vogt
NotSolved
23.10.2018 01:10:44 Ulrich
NotSolved
23.10.2018 08:40:05 Andreas Vogt
NotSolved
Blau Beschleunigen des Befüllens in ListBox (Formular schneller anzeigen)
23.10.2018 12:55:47 Ulrich
NotSolved
30.10.2018 10:43:17 Gast83887
NotSolved
30.10.2018 11:13:19 Ulrich
NotSolved
30.10.2018 11:36:17 Andreas Vogt
NotSolved
30.10.2018 12:22:25 Ulrich
NotSolved
30.10.2018 14:09:29 Andreas Vogt
NotSolved
30.10.2018 16:55:52 Ulrich
NotSolved
30.10.2018 17:16:31 Andreas Vogt
NotSolved
30.10.2018 17:41:40 Ulrich
NotSolved
30.10.2018 17:46:16 Ulrich
NotSolved
30.10.2018 18:14:39 Gast98839
NotSolved
30.10.2018 23:57:46 Ulrich
NotSolved
31.10.2018 08:35:03 Andreas Vogt
NotSolved
31.10.2018 12:45:41 Ulrich
NotSolved
31.10.2018 12:57:13 Andreas Vogt
NotSolved
31.10.2018 16:07:21 Ulrich
NotSolved
31.10.2018 16:20:10 Andreas Vogt
NotSolved
31.10.2018 21:36:25 Ulrich
NotSolved
02.11.2018 10:11:32 Gast48059
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
23.10.2018 12:55:47
Views:
561
Rating: Antwort:
  Ja
Thema:
Beschleunigen des Befüllens in ListBox (Formular schneller anzeigen)

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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
22.10.2018 11:25:24 Andreas Vogt
NotSolved
23.10.2018 01:10:44 Ulrich
NotSolved
23.10.2018 08:40:05 Andreas Vogt
NotSolved
Blau Beschleunigen des Befüllens in ListBox (Formular schneller anzeigen)
23.10.2018 12:55:47 Ulrich
NotSolved
30.10.2018 10:43:17 Gast83887
NotSolved
30.10.2018 11:13:19 Ulrich
NotSolved
30.10.2018 11:36:17 Andreas Vogt
NotSolved
30.10.2018 12:22:25 Ulrich
NotSolved
30.10.2018 14:09:29 Andreas Vogt
NotSolved
30.10.2018 16:55:52 Ulrich
NotSolved
30.10.2018 17:16:31 Andreas Vogt
NotSolved
30.10.2018 17:41:40 Ulrich
NotSolved
30.10.2018 17:46:16 Ulrich
NotSolved
30.10.2018 18:14:39 Gast98839
NotSolved
30.10.2018 23:57:46 Ulrich
NotSolved
31.10.2018 08:35:03 Andreas Vogt
NotSolved
31.10.2018 12:45:41 Ulrich
NotSolved
31.10.2018 12:57:13 Andreas Vogt
NotSolved
31.10.2018 16:07:21 Ulrich
NotSolved
31.10.2018 16:20:10 Andreas Vogt
NotSolved
31.10.2018 21:36:25 Ulrich
NotSolved
02.11.2018 10:11:32 Gast48059
NotSolved