Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Problem bei zu langer Laufzeit einer Windows Form

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 07. Dez. 2012 22:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für firerain 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 10. Dez. 2012 09:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für firerain 10 Unities + Antwort hilfreich

Hallo Daniel,

was setzt du denn ein 32 oder 64 bit?

Wie ist denn der Code zum Fensteröffnen?
Öffnest du die Form Modal?

Wenn ja, dann versuch es mal anders.


Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

firerain
Mitglied
Ingenieur

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 10. Dez. 2012 12:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für firerain 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 10. Dez. 2012 17:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für firerain 10 Unities + Antwort hilfreich

Na wer weiß 
Vielleicht kommt man mit Code kürzen auch darauf,
dass mit der Ausführung ein ganz anderer Event ausgeführt wird ... 
(Wäre auch nicht das erste Mal  )

Viel Erfolg
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

firerain
Mitglied
Ingenieur

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 11. Dez. 2012 18:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Test.zip

 
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für firerain 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 12. Dez. 2012 20:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Sehen Sie sich das Profil von firerain an!   Senden Sie eine Private Message an firerain  Schreiben Sie einen Gästebucheintrag für firerain

Beiträge: 8
Registriert: 07.12.2012

Acad 2012

erstellt am: 17. Dez. 2012 22:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Klaus,

hattest Du schon die Gelegenheit unter 64bit zu testen? 

Viele Grüße
Daniel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz