Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1576to1580
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UserForm TextBox einlesen

UserForm TextBox einlesen
01.09.2017 14:26:04
stef26
Hallo liebe Excelprofis,
ich hab eine Frage zur Performance.
Ich schalte alle Möglichen Themen ab die Zeit fressen.
Dann lese ich viele TextBoxen in mein Userform ein.
Dieses Einlesen dauert eine Ewigkeit, bis er mir das Ergebnis anzeigt.
Hat jemand eine Idee was da so zeitfressend sein kann, und wie ich das beheben oder den Code anders schreiben kann?
Application.EnableEvents = False
Application.DisplayAlerts = False 'Meldungen aus
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False 'Bildschirmreaktionen ausschalten
AZG1.Value = Sheets("AZGs").Range("B2").Value
AZG2.Value = Sheets("AZGs").Range("B3").Value
AZG3.Value = Sheets("AZGs").Range("B4").Value
AZG4.Value = Sheets("AZGs").Range("B5").Value
AZG5.Value = Sheets("AZGs").Range("B6").Value
AZG6.Value = Sheets("AZGs").Range("B7").Value
AZG7.Value = Sheets("AZGs").Range("B8").Value
AZG8.Value = Sheets("AZGs").Range("B9").Value
AZG9.Value = Sheets("AZGs").Range("B10").Value
AZG10.Value = Sheets("AZGs").Range("B11").Value
AZG11.Value = Sheets("AZGs").Range("B12").Value
AZG12.Value = Sheets("AZGs").Range("B13").Value
AZG13.Value = Sheets("AZGs").Range("B14").Value
AZG14.Value = Sheets("AZGs").Range("B15").Value
AZG15.Value = Sheets("AZGs").Range("B16").Value
AZG16.Value = Sheets("AZGs").Range("B17").Value
AZG17.Value = Sheets("AZGs").Range("B18").Value
AZG18.Value = Sheets("AZGs").Range("B19").Value
AZG19.Value = Sheets("AZGs").Range("B20").Value
AZG20.Value = Sheets("AZGs").Range("B21").Value
AZG21.Value = Sheets("AZGs").Range("B22").Value
AZG22.Value = Sheets("AZGs").Range("B23").Value
AZG23.Value = Sheets("AZGs").Range("B24").Value
AZG24.Value = Sheets("AZGs").Range("B25").Value
AZG25.Value = Sheets("AZGs").Range("B26").Value
AZG26.Value = Sheets("AZGs").Range("B27").Value
PasswortBox.Value = Sheets("Setup").Range("C4").Value
GruppenPWBox.Value = Sheets("Setup").Range("C5").Value
MAStundenBox = Sheets("Setup").Range("B9").Value
MinMaxBox = Sheets("Setup").Range("B2").Value
RWBestandBox = Sheets("Setup").Range("B3").Value
PfadBox = Sheets("Setup").Range("B6").Value
GetAccessBox = Sheets("Setup").Range("B7").Value
QMBox = Sheets("Setup").Range("B8").Value
WorkList = Sheets("Setup").Range("B10").Value
ZeitList = Sheets("Setup").Range("B11").Value
BitteWartenBild = Sheets("Setup").Range("B12").Value
AbmeldenBid = Sheets("Setup").Range("B13").Value
AnmeldenBild = Sheets("Setup").Range("B14").Value
SetupDatei = Sheets("Setup").Range("B15").Value
Else
'falsche Eingabe
MsgBox ("Sorry falsches Passwort.")
MultiPage1.Pages(12).Visible = False
End If
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True 'Meldungen wieder aktivieren
Application.ScreenUpdating = True 'Bildschirmreaktionen einschalten
Liebe Grüsse
Stefan

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm TextBox einlesen
01.09.2017 14:48:29
ChrisL
Hi Stefan
EnableEvents wird nicht greifen, wenn es z.B. TextBox-Change-Ereignisse gibt.
Hier noch eine kleine Abkürzung, was jedoch keinen Einfluss auf die Performance hat:
Dim i As Byte
For i = 1 To 26
Controls("AZG" & i).Value = Sheets("AZGs").Range("B" & i + 1).Value
Next i
cu
Chris
AW: UserForm TextBox einlesen
01.09.2017 16:42:08
Luschi
Hallo Chris,
das ist ein guter Ansatz aber nicht ganz so gut gelöst.
VarType(1), VarType(2), VarType(3) usw. ergibt 2, also Datentyp 'Integer'. Du preßt aber alle Zahlen in der For-Schleife in einen Byte-Datentyp, sowas nennt man in Dot.Net (VB.Net, C#.Net) 'Boxing' und kostet Rechenzeit.
Hier: "AZG" & i muß wahrscheinlich wieder 'UnBoxing' (in Integer) durchgeführt werden, wenn es für die Verkettung von String und Byte keine Überschreibungsmethode gibt.
Deshalb definiere ich 'i' so: Dim i As Integer
Gruß von Luschi
aus klein-Paris
Anzeige
AW: UserForm TextBox einlesen
01.09.2017 16:55:02
Sven
Hi,
ich vermute die Performance wird wo anders im Code gefressen, dazu müsste aber der gesamte Code zu sehen sein. Du kannst auch mal vor jede Zeile in deinem Code ein Debug-Point setzen und mit F5 Zeile für Zeile ausühren. Spätestens dann weisst Du wo das Skript für die schlechte Performance sorgt.
Grüße
Sven
AW: UserForm TextBox einlesen
01.09.2017 17:39:10
ChrisL
Hi Luschi
Ich denke wir sind uns einig, dass die Performance Probleme vermutlich durch ein Change-Ereignis o.ä. verursacht werden. Mit der Schleife wollte ich Stef lediglich zukünftige Schreibarbeit abnehmen. Dass die Schleife die Performance minimal (ich schätze nicht spürbar in Millisekunden) verschlechtern wird, habe ich tatsächlich übersehen.
Ich bin dir dankbar für den Hinweis, denn "Boxing/Unboxing" kannte ich bisher nicht. Ich habe mich mal kurz in das Thema eingelesen und verstehe dass es (in einfacher Sprache ausgedrückt) um die Konvertierung von Wert in Objekt und umgekehrt geht. Insofern kann ich auch den Einwand bezüglich Performance verstehen.
Gemäss meiner Recherche wandelt "Type Casting" a basic type to another basic type z.B. Byte in Integer oder Integer in Long. In manchen Programmiersprachen sieht der Syntax von Boxing/Unboxing und Type Casting gleich aus.
Mit der Byte vs. Integer Frage habe ich noch ein Verständnisproblem. Gibt es einen Unterschied ob "Byte in String in Objekt" oder "Integer in String in Objekt"?
cu
Chris
Anzeige
AW: UserForm TextBox einlesen
01.09.2017 16:28:35
Luschi
Hallo
für mich höhrt sich das an, als ob für die Textboxen Ereignis-Routinen definiert wurden.
Diese kann man aber nicht mit 'Application.EnableEvents = True' vorrübergehen deaktivieren sie sondern bleiben wirksam.
Hier behelfe ich mich so:
Dim vbaEintrag As Boolean
Vor dem Start der Werteintragungenn in die Textboxen per Vba

vbaEintrag = True
'und das bei allen Textboxen
Private Sub AZG1_Change()
If vbaEintragen Then Exit Sub
'mache dies & das
End Sub
Danach wieder: vbaEintragen = False

Wenn es sich im viele Textboxen handelt, ist der Ansatz Ereignis-Routinen mit Klassenprogrammierung
der bessere Alternative. Da gibt es dann nur einmal eine Routine 'Chance()' für alle Textboxen.
Gruß von Luschi
aus klein-Paris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige