| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Problem bei zu langer Laufzeit einer Windows Form (1960 mal gelesen)
|
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 07. Dez. 2012 22:31 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich beschäftige mich in letzter Zeit mich kleineren Makros auch Acad 2012 und 2013. Nachdem ich die letzten Monate sehr viel im Forum gelesen habe, habe ich mich nun anmeldet, da ich bei einem Problemchen eigensenständig nicht weiter komme. Ich habe ein VBA-Makro geschrieben, das eine Windows Form aufruft, in der der User Eingaben in Textboxen macht. Nach anschließender Bestätigung wird eine Blockreferenz eingefügt und die Werte aus der Textboxen den Attributen im Block übergeben. Das funktioniert soweit eigentlich auch ganz gut - mit einer Ausnahme: Braucht der User längere Zeit zum Ausfüllen des Formulares, wird der Prozess des Einfügens immer langsamer(also von dem Zeitraum zwischen Bestätigung und dem Zeitpunkt bis die Blockreferenz eingefügt und ausgefüllt ist). Braucht der User gar länger als 1,75 Minuten kann der Block garnicht mehr eingefügt werden. Anhand der Fehlermedung sowie der Zeilen an denen ein Fehler auftritt habe ich den Verdacht, dass die "Zugangsbereichtigung" zur Datenbasis der Zeichnung gekappt wurde. Fehlermeldung wäre: Laufzeitfehler '-2147417856 (80010100))': Automatisierungsfehler, Systemaufruf fehlgeschlagen. bzw. Fehlernummer 91: Objekvariable oder With-Blockvariable nicht festgelegt. Ich konnte im Netzt bislang von keinen solchen Problem lesen, jedoch ist es bei mir nicht vom Makro abhängig, ebensowenig von der Acad Version (2012 und 2013 getestet). Hat von euch einer ne Idee? Viele Grüße Daniel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 08. Dez. 2012 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für firerain
Ohne Codeschnipsel schwierig .. Aber warum rufst Du eine Windows Form auf und verwendest nicht eine UserForm? Die wird aufgerufen, ausgefüllt, der Block erzeugt und die Form beendet. Nachteil allerdings: Schnell mal in der Zeichnung gleichzeitig was nachsehen ist nicht so einfach machbar ... Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 10. Dez. 2012 09:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, danke für deine Antwort! Natürlich habe ich Userforms eingesetzt, da habe ich mich wohl falsch ausgedrückt. Ich habe heute morgen nochmal ein bisschen herumprobiert. Interessanter Weise ist es nicht immer reproduzierbar (CAD2013 scheint deutlich weniger anfällig zu sein) Hier ist mal eine Passage aus dem Makro: Private Sub BtnOK_Click() Dim varEinfPktKopf As Variant Dim BlockRefName As String 'Einfügepunkt suchen 'On Error GoTo Errorhandler For Each acadObject In ThisDrawing.ActiveLayout.Block If acadObject.ObjectName = "AcDbBlockReference" Then BlockRefName = acadObject.Name If BlockRefName = "Rahmen_A0_q" Or BlockRefName = "Rahmen_A1_q" Or BlockRefName = "Rahmen_A2_q" _ Or BlockRefName = "Rahmen_A3_q" Or BlockRefName = "Rahmen_A4_q" Or BlockRefName = "Rahmen_A4_h" Then varEinfPktKopf = acadObject.InsertionPoint x = varEinfPktKopf(0) y = varEinfPktKopf(1) End If End If Next Bereits in der "For each..." Zeile hängt er sich auf. Aber erst nachdem die Userform länger als 1,75 Minuten angezeigt wurde. Sonst läuft der Code sauber durch. Den Codeschnippsel oben kann ich theoretisch auch bei UF laden ausführen lassen, das funktioniert soweit auch, jedoch hängt er sich dann einfach bei der nächsten Zeile auf, die auf die Zeichung zugreiffen soll. Allerdings erst nachden die UF zu lange aktiv war^^ Grüße Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 10. Dez. 2012 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für firerain
|
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 10. Dez. 2012 12:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, wir haben ein 64 Bit System Die UF wird modal geöffnet. Ich habe eben die UF auf modal = false gestellt, dann entsteht aber bereits beim UF öffnen ein Fehler. Leider habe ich mit modal - nicht modal keinerlei Erfahrungen. Der Code, der die UF öffnet ist folgender: Public Sub Kopf_einfügen() Dim BlockRefName As String If ThisDrawing.ActiveSpace = acModelSpace Then MsgBox "Funktion ist nur im Papierbereich verfügbar" Exit Sub End If For Each acadObject In ThisDrawing.ActiveLayout.Block If acadObject.ObjectName = "AcDbBlockReference" Then BlockRefName = acadObject.Name If BlockRefName = "Kopf" Then UF_KopfEdit.Show Exit Sub End If End If Next UF_KopfEinfuegen.Show End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 10. Dez. 2012 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für firerain
Hallo Daniel, nur um mal sicher zu gehen: Wie hast Du denn acadObject definiert? ( as AcadObject, as AcadBlockReference, gar nicht = Variant) Sollte als AcadObject definiert sein. Grüße Klaus PS.: Wenn's nicht zu geheim ist, kannst Du ja auch mal die dvb als Zip hochladen, dann ist es vielleicht einfacher. [Diese Nachricht wurde von KlaK am 10. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 10. Dez. 2012 17:43 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, das acadObject habe ich bereits als AcadObject, AcadEntity sowie als Variant definiert. Dies hat allerdings keinerlei Auswirkungen Ich muss mal schauen, wie ich das Projekt bisschen zusammenkürzen kann, im vollen Unfang sind mir dann doch ein bisschen zu viele unternehmensspezifischen Sachen drin Grüße, Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 10. Dez. 2012 21:15 <-- editieren / zitieren --> Unities abgeben: Nur für firerain
|
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 11. Dez. 2012 18:52 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, das zusammenkürzen des Codes hat nichts gebracht Anbei aber mal das .dvb-Projekt auf Acad2012. Grundsätzlich noch immer das selbe Fehlerbild. Soblad ich mit thisdrawing auf die dwg zugreife hängt er sich nach den 2 Minuten Pause auf. Seltsamer Weise ensteht der Fehler nicht, wenn ich die UF direrkt aus der ide starte, sondern nur wenn ich über vbarun gehe. Wäre klasse, wenn Ihr das mal bei euch probieren könnt Schönen Abend Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 12. Dez. 2012 20:06 <-- editieren / zitieren --> Unities abgeben: Nur für firerain
Habe es mal getestet aber leider nichts außergewöhnliches feststellen können. War allerdings auf einem WinXP PC mit 2011. Muß morgen mal sehen, dass ich das mal unter Win7-64 anschauen kann. Evtl. ist das ja ein Problem von VBA unter 64 Bit. Du hast das schon auch einmal in einer neuen ganz leeren Zeichnung probiert? Nicht dass in der Vorlage noch Verknüpfungen hängen. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 12. Dez. 2012 20:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, danke fürs ausprobieren ) Ich habe es bereits mit unserer standardmäßigen Firmenvorlage (somit auch mit unserem Variablenstandard) sowie der nackigen Acad.exe probiert. Macht leider keinen Unterschied. Leider habe ich keine Möglichkeit unter 32bit zu testen. Bei dem kleinen Test-Projekt spricht nach 2 Minuten Wartezeit dann kein Debugger an. Acad schreibt stattdessen nur in der Befehlszeile dass die "Makro Ausführung fehlgeschlagen" ist, oder so ähnlich. Wenn ich manuell debugge, hängt er sich - wie immer - in der ersten ""thisdrawing..."-Zeile mit dem Fehler "Systemzugriff fehlgeschlagen, Objekvariable oder With-Blockvariable nicht festgelegt." auf. Ich bin mal gespannt, wie es sich bei dir unter 64bit verhält Schon mal Danke in Voraus! Grüße Daniel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
firerain Mitglied Ingenieur
Beiträge: 8 Registriert: 07.12.2012 Acad 2012
|
erstellt am: 17. Dez. 2012 22:48 <-- editieren / zitieren --> Unities abgeben:
|