tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von DrSoong
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
691
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    excelite excelite ist offline Mitglied Bronze
    Registriert seit
    Apr 2004
    Beiträge
    26
    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;
     

  2. #2
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    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?

  3. #3
    excelite excelite ist offline Mitglied Bronze
    Registriert seit
    Apr 2004
    Beiträge
    26
    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
     

  4. #4
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    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!
    excelite bedankt sich. 
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  5. #5
    excelite excelite ist offline Mitglied Bronze
    Registriert seit
    Apr 2004
    Beiträge
    26
    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
     

  6. #6
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    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

  1. Konvertieren dauert ewig
    Von Darian im Forum PHP
    Antworten: 5
    Letzter Beitrag: 30.05.09, 09:56
  2. Abfrage dauert ewig - MS SQL
    Von Homer Simpson im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 29.05.07, 16:45
  3. DSL Bestellung dauert ewig
    Von SMoeller im Forum Internet, DSL & Flatrate
    Antworten: 1
    Letzter Beitrag: 30.08.06, 00:42
  4. Rendern dauert ewig
    Von dadiscobeat im Forum Cinema 4D
    Antworten: 12
    Letzter Beitrag: 30.09.04, 12:52
  5. LAN-Verbindung dauert ewig!
    Von magic_halli im Forum Netzwerke
    Antworten: 8
    Letzter Beitrag: 25.11.03, 07:54

Stichworte