1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
691
691
EMPFEHLEN
-
Hallo Forum,
ich bastel hier gerade ein Prüfprotokoll das automatisch den Min, Max, Mittelwert usw. erzeugen soll. Später dann auch noch ein Diagramm aus den Daten ermitteln. Eigentlich bin ich ganz gut vorangekommen mit der Umsetzung in VB (ich bin Anfänger). Nun habe ich aber das Problem, dass der Zugriff auf meine Felder via Textmarke ewig dauert! Ich bin mir nicht sicher woran das liegen kann. Es sind aktuell 21 Felder im Dokument. Es sollen natürlich noch viel mehr werden. Ich kann nicht glauben, dass ich jetzt schon an die Grenzen komme.
Im Debugmode sehe ich deutlich, dass die Zeilen
ActiveDocument.FormFields(strFieldNameX).Result = strElementX
ActiveDocument.FormFields(strFieldNameY).Result = strElementY
ActiveDocument.FormFields(strFieldNameZ).Result = strElementZ
ewig dauern. Eine CPU Belastung oder Speicherauslastung kann ich jedoch nicht feststellen. es sind ca. 70MB RAM und 13% CPU Last zu sehen. Das ist nix!
Meine Felder haben die Namen
X_1_
Y_1_
Z_1_
X_2_
Y_2_
Z_2_
jeweils mit 1-7 hinten dran.
Wäre super wenn da jemand eine Idee hat.
Grüße und Danke
excelite
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
Private Sub CommandButton1_Click() Dim PosSemikolon, nIdentNumber, i, bla As Integer Dim LengthString As Integer Dim strElementX, strElementY, strElementZ As String Dim strFieldNameX, strFieldNameY, strFieldNameZ As String Dim strIdentifier, strIdentNumber As String Dim aryRealValuesX(14), aryRealValuesY(14), aryRealValuesZ(14) As Double Open ".\ínputdatei.txt" For Input As #1 i = 0 Do While Not EOF(1) Line Input #1, temp If InStr(1, temp, ";") And Left(temp, 7) = "M_PUNKT" Then i = i + 1 If i > 13 Then Exit Do End If ' strElementX mit X - Wert erzeugen PosSemikolon = InStr(1, temp, ";") strElementX = Right(temp, Len(temp) - PosSemikolon) PosSemikolon = InStr(1, strElementX, ";") strElementX = Left(strElementX, PosSemikolon - 1) ' strElementX mit Y - Wert erzeugen PosSemikolon = InStr(1, temp, ";") PosSemikolon = InStr(PosSemikolon + 1, temp, ";") strElementY = Right(temp, Len(temp) - PosSemikolon) PosSemikolon = InStr(1, strElementY, ";") strElementY = Left(strElementY, PosSemikolon - 1) ' strElementX mit Z - Wert erzeugen PosSemikolon = InStr(1, temp, ";") PosSemikolon = InStr(PosSemikolon + 1, temp, ";") PosSemikolon = InStr(PosSemikolon + 1, temp, ";") strElementZ = Right(temp, Len(temp) - PosSemikolon) PosSemikolon = InStr(1, strElementZ, ";") strElementZ = Left(strElementZ, PosSemikolon - 1) If i < 10 Then strIdentifier = "M_PUNKT00" + CStr(i) Else strIdentifier = "M_PUNKT0" + CStr(i) End If strIdentNumber = Right(Left(temp, 10), 3) nIdentNumber = Val(strIdentNumber) If nIdentNumber < 8 Then strFieldNameX = "X_1_" + CStr(nIdentNumber) strFieldNameY = "Y_1_" + CStr(nIdentNumber) strFieldNameZ = "Z_1_" + CStr(nIdentNumber) ElseIf nIdentNumber > 7 Then strFieldNameX = "X_2_" + CStr(nIdentNumber - 7) strFieldNameY = "Y_2_" + CStr(nIdentNumber - 7) strFieldNameZ = "Z_2_" + CStr(nIdentNumber - 7) End If ActiveDocument.FormFields(strFieldNameX).Result = strElementX ActiveDocument.FormFields(strFieldNameY).Result = strElementY ActiveDocument.FormFields(strFieldNameZ).Result = strElementZ aryRealValuesX(i - 1) = CDbl(strElementX) aryRealValuesY(i - 1) = CDbl(strElementY) aryRealValuesZ(i - 1) = CDbl(strElementZ) End If Loop Close #1 End Sub
Inhalt der txt Datei
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
Bauteilname: T1_M2 Seriennummer: 1 Gerät: 1 Geräteversion: 1,07 Gerätezertifikationsdatum: Tagesdatum: 29.11.2010 Einheiten: Millimeter Etikett;TatsächlichX;TatsächlichY;TatsächlichZ;I;J;K;TatsächlichX2;TatsächlichY2;TatsächlichZ2;I2;J2;K2;TatsächlichRFS;TatsächlichMMC;MaxFehler;MinFehler;Punktanzahl;Temperatur;AbweichungX;AbweichungY;AbweichungZ;AbweichungDurchm;AbweichungRad;AbweichungLänge;AbweichungWinkel;AbweichungForm;AbweichungRFS;AbweichungMMC;AußerhTolX;AußerhTolY;AußerhTolZ;AußerhTolDurchm;AußerhTolRad;AußerhTolLän;AußerhTolWink;AußerhTolForm;AußerhTolRFS;AußerhTolMMC;TatsächlichWinkel;TatsächlichDurchm;TatsächlichLän;TatsächlichRad;TatsächlichForm;SollwertX;SollwertY;SollwertZ;SollwertDurchm;SollwertRad;SollwertLän;SollwertWink;ObereTolX;ObereTolY;ObereTolZ;ObereTolWink;ObereTolForm;ObereTolLän;ObereTolRad;ObereTolDurchm;ObereTolRFS;ObereTolMMC;UntereTolX;UntereTolY;UntereTolZ;UntereTolWink;UntereTolLän;UntereTolRad;UntereTolDurchm;Bezugsgröße;Bezugsgröße1;Bezugsgröße2;Bezugsgröße3;Bezugsgröße4;Bezugsgröße5;Bezugsgröße6;Bezugsgröße7;StdAbw;Spanne;DURCHSCHN;ObereTolAbwPos;AbweichungGerät;AußerhTolGerät;MerkmalTyp _KOORDSYS001;+0000,0000;-0000,0000;+0000,0000;-000,0000;+000,0000;-001,0000;;;;;;;;;;;;0,000°C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ALIGN C_AUSRICHTUNG001;;;;;;;;;;;;;;;+000,0000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+000,0000;+000,0000;+000,0000;+001,2700;+000,0000;**********;ARMPOS C_KOORDSYS002;+0000,0000;+0000,0000;+0000,0000;+000,0000;+000,0000;+001,0000;;;;;;;;;;;;0,000°C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ALIGN M_PUNKT001;+0296,9123;-0030,4655;+0736,2765;+000,0000; M_PUNKT002;+0121,7234;-0205,3282;+0872,3462;+000,0000; M_PUNKT003;+0121,7358;-0205,3344;+0897,3386;+000,0000; M_PUNKT004;+0121,7652;-0205,3216;+0922,3805;+000,0000; M_PUNKT005;+0121,8143;-0205,3488;+0947,4028;+000,0000; M_PUNKT006;+0121,8703;-0205,3218;+0972,4327;+000,0000; M_PUNKT007;+0121,8904;-0030,3355;+0872,3274;+000,0000; M_PUNKT008;+0121,9007;-0030,3381;+0897,3518;+000,0000; M_PUNKT009;+0121,9428;-0030,2975;+0922,3647;+000,0000; M_PUNKT010;+0121,9353;-0030,3377;+0947,3974;+000,0000; M_PUNKT011;+0121,9404;-0030,3254;+0972,3937;+000,0000; M_PUNKT012;+0122,0863;+0144,6256;+0872,3867;+000,0000; M_PUNKT013;+0122,1026;+0144,6516;+0897,3832;+000,0000; M_PUNKT014;+0122,0775;+0144,6854;+0922,3771;+000,0000; M_PUNKT015;+0122,0801;+0144,6666;+0947,4117;+000,0000; M_PUNKT016;+0121,9949;+0144,6361;+0972,3894;+000,0000; M_PUNKT017;+0296,5674;-0205,4371;+0872,3354;+000,0000; M_PUNKT018;+0296,6057;-0205,4568;+0897,3449;+000,0000; M_PUNKT019;+0296,6497;-0205,4804;+0922,3572;+000,0000; M_PUNKT020;+0296,6883;-0205,4817;+0947,3772;+000,0000; M_PUNKT021;+0296,7052;-0205,4519;+0972,4003;+000,0000; M_PUNKT022;+0296,8664;-0030,5710;+0872,3370;+000,0000;
-
20.12.10 08:03 #2
Kannst du mal eine Word-Beispieldatei posten, damit ich das ganze hier durchtesten kann? Bitte auch eine Testzeit von dir dazu schreiben.
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
Hi Doc,
danke, dass du dir mein VB Problem genauer anschaust. Ich habe die .doc und die .txt Datei auf meinen Webserver geladen. Pruefprotokoll.
Mir fällt auf, dass die Ausführungszeit sehr unterschiedlich ist. Gerade eben habe ich anfangs "nur" 15 Sekunden benötigt für den kompletten Code. Als ich dann den Code debuggen wollte musste ich im Step-by-Step Modus jedesmal eine Minute warten bis die "ActiveDocument.FormFieldstrallala" Zeile abgearbeitet wurde. Ich kann mir da keinen Reim drauf machen. Eigentlich habe ich gehofft der Zugriff geht innerhalb weniger Millisekunden.
Jetzt bin ich mal gespannt was deine Tests ans Tageslicht bringen werden.
Grüße Excelite
-
20.12.10 11:58 #4
Hallo!
Hab mir das ganze mal angesehen, läuft bei mir in ca. 1 Sekunde durch (mit Application.ScreenUpdating = False sogar in einer halben Sekunde). Auf welchem System läuft denn das ganze bei dir (hier Word2003 auf WinXP)?
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
Hallo Doc,
komisch - bei mir ist es Office 2007 und WinXp Sp3. Es ist mein Firmennotebook mit Core 2 Duo und 3,irgendwas GB Ram. Die Firma hat da einige Plugins integriert zum Erstellen von Kundenanschreiben. Vielleicht funken die dazwischen. Mal schauen ob ich die deaktivieren kann.
Wie gesagt bin ich neu in VB und dachte ich hätte hier etwas grundsätzlich falsch gemacht was zu dieser ellenlangen Ausführungszeit führt. Nach deiner Analyse sollte es aber irgendwo an meinem PC bzw. der Konfiguration liegen.
Danke dir - nun weiß ich wo ich suchen muss!
Grüße excelite
Ach - was meinst du mit Application.ScreenUpdating? Wo kann ich diesen Parameter einstellen? Vielleicht läuft es dann bei mir auch flotter!Geändert von excelite (21.12.10 um 00:07 Uhr) Grund: Zusatz vergessen
-
21.12.10 08:47 #6
Application.ScreenUpdating ist ein VBA-Befehl, der schaltet die Aktualisierung der Anzeige in Word aus. Da Word dann das Dokument nicht bei jedem VBA-Schritt aktualisieren muss, läuft dein Makro schneller durch.
Dabei sieht das ganze so aus:
Code vb:1 2 3 4 5 6 7
'Aktualisierung ausschalten: Application.ScreenUpdating = False 'hier kommt dann dein VBA-Code rein 'nun muss die Aktualisierung wieder eingeschalten werden, sonst sieht man ja nicht, was per Code geschrieben wurde Application.ScreenUpdating = True
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
Ähnliche Themen
-
Konvertieren dauert ewig
Von Darian im Forum PHPAntworten: 5Letzter Beitrag: 30.05.09, 09:56 -
Abfrage dauert ewig - MS SQL
Von Homer Simpson im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 29.05.07, 16:45 -
DSL Bestellung dauert ewig
Von SMoeller im Forum Internet, DSL & FlatrateAntworten: 1Letzter Beitrag: 30.08.06, 00:42 -
Rendern dauert ewig
Von dadiscobeat im Forum Cinema 4DAntworten: 12Letzter Beitrag: 30.09.04, 12:52 -
LAN-Verbindung dauert ewig!
Von magic_halli im Forum NetzwerkeAntworten: 8Letzter Beitrag: 25.11.03, 07:54





Zitieren

Login





