Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Problem mit getentity (VBA) und vla-runmacro

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
  
PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
Autor Thema:  Problem mit getentity (VBA) und vla-runmacro (1224 mal gelesen)
simsl
Mitglied



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

Beiträge: 13
Registriert: 06.12.2010

erstellt am: 14. Jun. 2012 11: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

Hallo,

habe ein für mich (anscheinend) unlösbares Problem, bei dem ich leider aufgeben und euch um Hilfe bitten muss.

Folgendes:
Ich habe ein kleines VBA-Programm geschrieben, bei dem ich die Nummerierung meiner Vermessungspunkte (Blockreferenz mit Attributen) etwas automatisieren möchte, d.h. die Punktnummer wird mit jeder Anwahl eines neuen Blockes um 1 erhöht und das betreffende Blockattribut dann mit der neuen Nummer überschrieben.

Bei Aktivierung des Programmes erscheint die Userform, wo verschiedene Einstellungen gemacht werden können. Über einen Commandbutton blende ich anschließend die Userform aus ("Hide") und kann dann anschließend die gewünschten Blöcke über den VBA-Befehl

Code:
ThisDrawing.Utility.GetEntity obj, Punkt, "Vermessungspunkt wählen: "

auswählen.
So, das ganze funktioniert PROBLEMLOS, wenn ich das Makro über den VBA-Editor starte. Auch beim Start über die Befehlszeile ("-vbarun" => Makroname) funktioniert es ohne Probleme.

Jetzt hätte ich aber gerne das Makro über eine LISP-Zeile als "Autocadbefehl" eingebunden, um das Makro durch die ENTER-Taster schnell und einfach wieder aufrufen (wiederholen) zu können.
Habe dazu ein kleines LISP geschrieben mit folgendem Inhalt:

Code:
(defun c:TH_NeunummVerPunkt (/) (vla-runmacro(vlax-get-acad-object) "TH_NeunummVerPunkt_Start"))

Der Aufruf des Makros über LISP funktioniert auch problemlos, bis ich an den Punkt komme, wo ich die Userform ausblende und über die GetEntity-Funktion die Blöcke auswählen möchte.
Die Userform blendet sich zwar aus, aber das Problem ist jetzt, dass ich keine Objekte auswählen kann (Fadenkreuz bzw. Pickbox ist nicht mehr sichtbar). Wenn ich mit der Maus (blind) über die Zeichnungsfläche fahre, heben sich die Objekte auch hervor, allerdings kann kein Objekt ausgewählt werden!

Mir scheint, dass Autocad (oder LISP??) hier irgendwie auf eine (zusätzliche?) Eingabe wartet...
Ich kann mir das allerdings nicht erklären, da wie gesagt der Aufruf über den VBA-Editor und die Befehlszeile problemlos funktioniert, nur eben beim LISP-Aufruf bleibt das Programm beim "GetEntity"-Aufruf stecken!
Mir bleibt dann nur die Möglichkeit, AutoCAD zu killen und neu zu starten, da die Zeichnungsfläche "abstürzt". Über den Symbolleisten ist die Maus allerdings sichtbar - es kann aber nichts ausgewählt werden.

Ach ja, ich verwende AutoCAD 2011!


Frage: Ist das Problem bekannt? Wie könnte man es lösen?

Hier noch der betreffende Programmcode, mit dem ich die Userform ausblende und die Objekte auswählen kann:

Code:
Private Sub cmd_Auswahl_Click()
    Dim obj As AcadEntity
    Dim Punkt As Variant
    Dim iKeyCode
    Dim i As Long                                          'Zähler
    Dim Blockattribute As Variant                  'Attribute des Vermessungsblockes
    Dim Blockattribut As AcadAttributeReference    'Einzelnes Attribut des Vermessungsblockes
    Dim PktNummer As Integer


TH_NeunummVerPunkt.Hide
PktNummer = cbxStartwert.Value - 1

Do
    On Local Error Resume Next
   
    ThisDrawing.Utility.GetEntity obj, Punkt, "Vermessungspunkt wählen: "
    iKeyCode = GetAsyncKeyState(&H1B)  ' gleich mal abfragen, ob ESC noch gedrückt ist !

    If Err.Number <> 0 Then
        Err.Clear
        If (iKeyCode And &H1B) = 1 Then
            'MsgBox "ESC"
            TH_NeunummVerPunkt.Show
            Exit Do
        Else
            ThisDrawing.Utility.Prompt ("Keine Auswahl! Bitte Vermessungspunkt wählen..." & vbCrLf)
        End If
    Else
        'MsgBox "Eigentlich müsste was gewähllt worden sein"
        If TypeName(obj) = "IAcadBlockReference" Or TypeName(obj) = "IAcadBlockReference2" And obj.Name = "GDS1" Then
               
                PktNummer = PktNummer + 1
                If PktNummer > PktNummerMax Then
                    Call MsgBox("Maximale Punktnummer für aktuelle Station erreicht! => " & PktNummerMax & vbCrLf & "Funktion wird abgebrochen!", vbCritical)
                    TH_NeunummVerPunkt.Show
                    Exit Do
                End If
               
               
                'Attributwert "BEZ" setzen
                Blockattribute = obj.GetAttributes
                For i = 0 To UBound(Blockattribute)
                    Set Blockattribut = Blockattribute(i)
                    If Blockattribut.TagString = "BEZ" Then Blockattribut.TextString = PktNummer
                Next
                obj.Update
        Else
            ThisDrawing.Utility.Prompt (vbCrLf & "Objekt ist kein Vermessungspunkt!" & vbCrLf)
        End If
    End If
Loop

End Sub


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: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 14. Jun. 2012 14: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 Nur für simsl 10 Unities + Antwort hilfreich

Hallo,

das liegt wohl daran, dass du in deiner SUB TH_NeunummVerPunkt_Start() das Formular modal aufrufst. Dann bleibt die das Programm so lange stehen, bis das Formular geschlossen wird. Dummerweise ist aber durch ".hide" nicht mehr sichtbar.

Setze mal "UserForm.show (false)" ein. Dann sollte es gehen.

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

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)2025 CAD.de | Impressum | Datenschutz