Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  SelectionSet Fehlermeldung Programmabbruch

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 wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  SelectionSet Fehlermeldung Programmabbruch (1978 mal gelesen)
ela-cad
Mitglied



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

Beiträge: 77
Registriert: 10.09.2009

AutoCAD Architecture 2016

erstellt am: 07. Dez. 2011 17:28    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,

im Internet habe ich eine schönes Beispiel für den SelectionSet gefunden.

Hier der Code:
----------------------------------------------------

Sub AusAuswahlEntfernen()

Dim objSset As AcadSelectionSet
Dim objEnt As AcadEntity

On Error Resume Next

    'Auswahlsatz löschen, falls vorhanden

    For Each objSset In ThisDrawing.SelectionSets
      If objSset.Name = "NeuerAuswahlsatz" Then
      objSset.Delete
      End If
    Next

    Set objSset = ThisDrawing.SelectionSets.Add("NeuerAuswahlsatz")
    objSset.SelectOnScreen

    'Alle Kreise aus Auswahl entfernen
    For Each objEnt In objSset
      If objEnt.ObjectName = "AcDbCircle" Then
        objSset.RemoveItems objEnt
      End If
    Next objEnt

End Sub

---------------------------------------------------

Dieses Progrämmchen läuft auch sehr gut, ABER nur das erste Mal.
Beim zweiten Aufruf kommt bei mir die Fehlermeldung:

Systemfehler: Unhandled Access Violation Reading
              0x0000 Excption at 78a33abch


Ich bin kein Profi in Sachen VBA und kann mir dieses Verhalten nicht erklären.

Kann jemand mir hier weiter helfen 

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Dez. 2011 18:20    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 ela-cad 10 Unities + Antwort hilfreich

Hallo,

als erstes schalte mal deinen Errorhandler wieder ein ...

... und dann führe nochmal aus.
Jetzt siehst Du, dass er in der Zeile hängt:

Code:

objSset.RemoveItems objEn

Ein F1 auf 'RemoveItems' verrät:
Object = Variant (array of objects)

Ergo müsste dein Code dann irgendwie so in der Art aussehen:

Code:

    'Alle Kreise aus Auswahl entfernen
    Dim i&, arr() As AcadEntity
    i = -1
    Debug.Print objSset.Count
    For Each objEnt In objSset
      If objEnt.ObjectName = "AcDbCircle" Then
        i = i + 1
        ReDim Preserve arr(0 To i)
        Set arr(i) = objEnt
      End If
    Next objEnt
    objSset.RemoveItems arr
    Debug.Print objSset.Count

Schau Dir auch in Ruhe mal die Beispiele in der Hilfe an, zu:
- RemoveItems
- Erase
- Delete
Dann wird vieles klarer;-) 

Gruß Nancy

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

ela-cad
Mitglied



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

Beiträge: 77
Registriert: 10.09.2009

AutoCAD Architecture 2016

erstellt am: 07. Dez. 2011 21:25    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 Nancy,

danke für deine schnelle Antwort. Ich habe deinen Code eingebaut, leider trat der Fehler immer noch auf. Der Hinweis auf den Errorhandler hat mir gezeigt, das der Fehler in dieser Schleife liegt:

    For Each objSset In ThisDrawing.SelectionSets
      If objSset.Name = "NeuerAuswahlsatz" Then
      objSset.Delete
      End If
    Next


Ich habe nach dem Delete ein Exit For eingebaut und nun läuft das Programm auch bei mehrfachem Aufruf.

Leider verstehe ich dieses Verhalten noch nicht.

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Dez. 2011 22: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 Nur für ela-cad 10 Unities + Antwort hilfreich

    
Zitat:
Original erstellt von ela-cad:
Der Hinweis auf den Errorhandler hat mir gezeigt, das der Fehler in dieser Schleife liegt:
Code:

For Each objSset In ThisDrawing.SelectionSets
  If objSset.Name = "NeuerAuswahlsatz" Then
    objSset.Delete
  End If
Next

Ohne jetzt Deinen geänderten Code zu kennen ... der Fehler liegt (ungetestet) garantiert NICHT! in dieser Abfrage;-)
Der Fehler liegt IMHOIn my humble oppinion (Meiner Meinung nach) dabei, wo und wie Du mit 'On Error resume next' und mit 'On Error goto 0' umgehst.

Den Errorhandler brauchste schon bei Deinem Konstrukt, du musst ihn aber gezielt (hier beim Sset) einsetzen:

Code:

On Error Resume Next 'riskiern wir mal nen Crash und übergehen mögliche Errors im Sset einfach
'Auswahlsatz löschen, falls vorhanden
    For Each objSset In ThisDrawing.SelectionSets
      If objSset.Name = "NeuerAuswahlsatz" Then
      objSset.Delete
      End If
    Next
'jetzt ist in jedem Fall das Sset "NeuerAuswahlsatz" verwendbar, egal ob vorher vorhanden oder nicht
Set objSset = ThisDrawing.SelectionSets.Add("NeuerAuswahlsatz")
on error goto 0 'sinnvollerweise den Errorhandler nach dem Sset-Chrash-Test zurücksetzen

Wenn Du also vergisst mit 'On Error goto 0' die Hexerei namens 'On Error resume next' auszuschalten,
kannst du in Teufels Küche kommen;-)
Errorhandler (ein/aus) macht also - richtig platziert - Sinn.

Hab aber etwas das Gefühl, du steigst grade von fast Null bei (symbolisch) 'Lesson 37' ein?
Egal - untendran mal dein Code, wie er bei mir läuft, dafür verrätste aber mal wo man sowas aufgabelt;-):

> im Internet habe ich eine schönes Beispiel für den SelectionSet gefunden.

Gruß Nancy
--

Code:
Option Explicit

Sub AusAuswahlEntfernen()

   Dim objSset As AcadSelectionSet
   Dim objEnt As AcadEntity

   On Error Resume Next 'Errorhandler = AUS, Crashtest = EIN

    'Auswahlsatz löschen, falls vorhanden

    For Each objSset In ThisDrawing.SelectionSets
      If objSset.Name = "NeuerAuswahlsatz" Then
      objSset.Delete
      End If
    Next
    Set objSset = ThisDrawing.SelectionSets.Add("NeuerAuswahlsatz")
   
    On Error GoTo 0 'Errorhandler = EIN, Chrashtest = AUS
   
    objSset.SelectOnScreen

    'Alle Kreise aus Auswahl entfernen
    Dim i&, arr() As AcadEntity
    i = -1
    For Each objEnt In objSset
      If objEnt.ObjectName = "AcDbCircle" Then
        i = i + 1
        ReDim Preserve arr(0 To i)
        Set arr(i) = objEnt
      End If
    Next objEnt
    objSset.RemoveItems arr
End Sub


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