Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Fortlaufende Numerierung von Blöcken klappt nicht immer.

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:  Fortlaufende Numerierung von Blöcken klappt nicht immer. (1149 mal gelesen)
ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 12. Apr. 2021 15:30    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,

Ich habe mir vor ca. 20 Jahren ein Messgerät gebaut und lese die Daten vom
Gerät über die serielle Schnittstelle in Autocad 2002 ein.
Im Gerät habe ich 9 Messplätze forgesehen und die kann ich einzeln abrufen.
Im Normalfall werden die Aufmaße in Blöcken mit aufsteigender Numerierung
gespeichert und das klappt fast immer.
Leider eben nur fast.
Manchmal habe ich dann einem Block mit der Nummer 1 und der nächste hat die Nummer 4
und ähnlich.
Letzten habe ich das Pech gehabt, das einzelne Aufmaße zu einem Block zusammengefasst
wurden, ein einziges Desaster!
Mir ist das bisher nicht aufgefallen, weil ich eigentlich immer nur 1- 3 Meßßplätze
brauche, da waren es wesentlich mehr.

Das sind die Zeilen aus dem Programm, wo ich überprüfe, wieviele Blöcke sich in der Zeichnung
befinden und wo die nächsthöhere freie Zahl vergeben wird:

Dim MessBlock As AcadBlock, EinfP_Block(0 To 2) As Double, BlockAnz As Long

BlockAnz = ThisDrawing.Blocks.Count
EinfP_Block(0) = 0#: EinfP_Block(1) = 0#: EinfP_Block(2) = 0#
Set MessBlock = ThisDrawing.Blocks.Add(EinfP_Block, LTrim(Str(BlockAnz + 1)))

Prinzipiell funktioniert es, aber warum nicht immer?
Kann da jemand das Problem erkennen, oder hat jemand einen Vorschlag, wie
man das besser lösen kann?

Vielen Dank!

Gruß Reinhard

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: 13. Apr. 2021 11:07    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 ReinhardK 10 Unities + Antwort hilfreich

Hallo Reinhard,
Willkommen im Forum  
Erstaunlich dass Dir das erst nach 20 Jahren auffällt  
Bitte lese Dir mal die FAQ: Blöcke und FAQ: Blöcke: Objekteigenschaften und deren Auswirkungen in Blöcken durch, vielleicht wird Dir dann einiges klarer.
Ein Block mit der Nummer 1 kann eigentlich gar nicht erzeugt werden, das würde bedeuten Du hättest alle Layouts und den Modellbereich aus der Zeichnung gelöscht.
Hast Du denn eine Fehlerabfrageroutine integriert?
Vermutlich nein bzw. Du übergehst Fehlermeldungen mit einem "On Error Resume Next"
Dadurch kann es natürlich passieren dass ein nötiger neuer Block nicht erzeugt wird und der bestehende verändert wird. Aber dazu bräuchten wir den kompletten Code.

Grüße
Klaus  

[Edit]Interessant wäre auch noch wie Du die Blöcke in die Zeichnung einfügst. Evtl. wäre es ja eine Möglichkeit nur einen neuen Block zu erzeugen und die Messwerte durch unterschiedliche BlockReferenzen in die Zeichnung einzutragen.

[Diese Nachricht wurde von KlaK am 13. Apr. 2021 editiert.]

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

ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 13. Apr. 2021 21: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 KlaK,

vielen Dank für die nette Begrüßung!  


Zitat:
Erstaunlich dass Dir das erst nach 20 Jahren auffällt

In dieser Richtung gab es eigentlich nie ein Problem und ich Nutze das Gerät ständig.

Zitat:
Bitte lese Dir mal die FAQ: Blöcke und FAQ: Blöcke: Objekteigenschaften und deren Auswirkungen in Blöcken durch, vielleicht wird Dir dann einiges klarer.

Guter Tip, ich muß da nur wieder reinkommen, habe ewig nichts mit VBA gemacht.

Zitat:
Hast Du denn eine Fehlerabfrageroutine integriert?
Vermutlich nein bzw. Du übergehst Fehlermeldungen mit einem "On Error Resume Next"
Dadurch kann es natürlich passieren dass ein nötiger neuer Block nicht erzeugt wird und der bestehende verändert wird. Aber dazu bräuchten wir den kompletten Code.


Ich muß mich da wieder einarbeiten, das Programm wollte ich eigentlich anfügen, ist aber irgendwie verlorengegangen,
kommt gleich nach.

Ich habe mal zwei Screenshots gemacht, da worden die Blöcke wirklich von 1 ab numeriert.
Das ist aber die Ausname, sonst beginnt es immer bei 4 und wenn ich mir die Anzahl der voerhandenen Blöcke anzeigen
lasse, dann sind es immer 3, die ich aber nicht sehe.
Ich würde es jetzt so machen, das ich prüfe, ob zB. Block 4 voehanden ist und wenn ja, die 5 prüfen usw.
also die nächst freie Zahl vergebe. Wie der Block heißt, ist mir ansonsten völlig egal.
Ich melde mich gleich noch mal und reiche das Programm nach.

Vielen Dank für deine Antwort!

Wie fügt man hier Dateien an, hochgeladen habe ich die Bilder? 

Schade, wenn das mit den Dateien anfügen ein Intelligenztest ist, dann bin ich leider gescheitert.
Im File Manager kann ich sie lediglich löschen.

Gruß Reinhard

[Diese Nachricht wurde von ReinhardK am 13. Apr. 2021 editiert.]

[Diese Nachricht wurde von ReinhardK am 13. Apr. 2021 editiert.]

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

ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 14. Apr. 2021 09:09    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


Sub_Zeichnen.txt


Block1.jpg


Block2.jpg

 
Hallo,

ich hab wirklich keine Möglichkeit die Dateien anzufügen, das Hochladen klappt.
Unter Linux und mit Chromium erscheint danach ein leeres Fenster,
unter Firefox bekomme ich eine Bestätigung.
Die Dateien sind hochgeladen, ich könnte sie löschen aber eine Möglichkeit zum
Anfügen sehe ich nicht.

Gruß Reinhard


Edit:

Unter Firefox klappt es doch, jetzt sind sie da!

[Diese Nachricht wurde von ReinhardK am 14. Apr. 2021 editiert.]

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 14. Apr. 2021 09:24    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 ReinhardK 10 Unities + Antwort hilfreich

Deine Screenshots sind nutzlos, hoffentlich ist es auch nicht die Antwort.
Die könnten einfach zeigen: In einer Datei gibt es Block 1-9
in der anderen Variante gibt es mind. Block 1-14

Mehr zeigt es nicht, kein Hinweis auf "fehlende" Blöcke

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

ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 14. Apr. 2021 09:35    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

Zitat:
Original erstellt von cadffm:
Deine Screenshots sind nutzlos, hoffentlich ist es auch nicht die Antwort.
Die könnten einfach zeigen: In einer Datei gibt es Block 1-9
in der anderen Variante gibt es mind. Block 1-14

Mehr zeigt es nicht, kein Hinweis auf "fehlende" Blöcke


Hallo cadffm,

ich wollte damit nur zeigen, das wirklich ein Block mit der Nummer 1 erstellt wird, siehe Antwort von KlaK.
Zwischendurch fehlen da auch immer ein paar Nummern, das kommt da wirklich nicht zum Ausdruck.

Gruß Reinhard

[Diese Nachricht wurde von ReinhardK am 14. Apr. 2021 editiert.]

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: 14. Apr. 2021 12:37    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 ReinhardK 10 Unities + Antwort hilfreich

Hallo Reinhard,

Beinhalten denn die Blöcke mit dem Nummern 1, 2 oder 3 auch Deine Messwerte (Punkt mit Linie)?
Das Modul Zeichnen ist ja nur ein Teil eines größeren Programmes, ich würde da wirklich genauer nachsehen und den Fehlerabfang nachverfolgen (oder ausschalten), hatte da schon die merkwürdigsten Ergebnisse wenn das nicht gepasst hat.

Ich habe inzwischen meine Standardroutine:

Code:

Sub neu()
' Dimensionierungen

On Error GoTo Err_Handler
' Programmcode


Exit Sub ' beendet den Programmteil
Err_Handler:
  MsgBox "Fehler: " & Err.Number & vbCrLf & Err.Description
  Stop
  Resume Next

End Sub



Natürlich ist ein "On Error Resume Next" manchmal sinnvoll, dann muß aber der mögliche Fehler direkt behandelt werden und anschließend wieder auf den allgemeinen Err_Handler zurückgestellt.


Noch ein kleiner Hinweis (kann aber auch gewollt sein):
Du hast zweimal die gleiche Abfrage ( If s_Zugkraft > 99000000 Then )
somit wird das Layerflag = "S_Punkte" immer überschrieben

Korr_Biegebalken und Raumpunkt sind vermutlich andere Programmmodule

Ansonsten fällt mir hier nichts auf warum Blöcke mit Nummer 1 erzeugt werden könnten (außer sie waren schon in der Zeichnung)

Zitat:
Letzten habe ich das Pech gehabt, das einzelne Aufmaße zu einem Block zusammengefasst wurden, ein einziges Desaster!
Mir ist das bisher nicht aufgefallen, weil ich eigentlich immer nur 1- 3 Meßplätze brauche, da waren es wesentlich mehr.

Die Meßplätze werden ja woanders geöffnet (DateiNr scheint global zu sein), evtl. ist dort ein Fehler?

Grüße
Klaus 

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

ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 14. Apr. 2021 22:02    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 KlaK

Zitat:
Original erstellt von KlaK:
[B]Hallo Reinhard,

Beinhalten denn die Blöcke mit dem Nummern 1, 2 oder 3 auch Deine Messwerte (Punkt mit Linie)?



Nein, die sind leer, bei allen anderen Zeichnungen geht es auch immer erst bei 4 los.

Zitat:
Das Modul Zeichnen ist ja nur ein Teil eines größeren Programmes, ich würde da wirklich genauer nachsehen und den Fehlerabfang nachverfolgen (oder ausschalten), hatte da schon die merkwürdigsten Ergebnisse wenn das nicht gepasst hat.
Ich habe inzwischen meine Standardroutine:

Guter Tip, ich sitze gerade dran und versuche wieder reinzukommen.


Zitat:
Noch ein kleiner Hinweis (kann aber auch gewollt sein):
Du hast zweimal die gleiche Abfrage ( If s_Zugkraft > 99000000 Then )
somit wird das Layerflag = "S_Punkte" immer überschrieben


Das ist so gewollt. Ich benutze die Variable "Zugkraft" zusätzlich
zur farblichen Kennzeichnung der Punkte. Auf der Senderseite wird
da entweder nichts, oder 100000000 oder 200000000 aufaddiert.
Das habe ich erst Jahre später dazu programmiert, wollte aber
nicht zuviel ändern.

Zitat:
Korr_Biegebalken und Raumpunkt sind vermutlich andere Programmmodule

Genau.
Zitat:
Ansonsten fällt mir hier nichts auf warum Blöcke mit Nummer 1 erzeugt werden könnten (außer sie waren schon in der Zeichnung)

    Zitat:Letzten habe ich das Pech gehabt, das einzelne Aufmaße zu einem Block zusammengefasst wurden, ein einziges Desaster!
    Mir ist das bisher nicht aufgefallen, weil ich eigentlich immer nur 1- 3 Meßplätze brauche, da waren es wesentlich mehr.

Die Meßplätze werden ja woanders geöffnet (DateiNr scheint global zu sein), evtl. ist dort ein Fehler?


Die Blöcke 1-3 habe ich wirklich nur in einer Datei entdeckt, wer weiß, was das war.

Wie ich geschrieben hatte, ich versuche es jetzt so:

Zitat:
Ich würde es jetzt so machen, das ich prüfe, ob zB. Block 4 voehanden ist und wenn ja, die 5 prüfen usw.
also die nächst freie Zahl vergebe. Wie der Block heißt, ist mir ansonsten völlig egal.
Ich melde mich gleich noch mal und reiche das Programm nach.


Gruß Reinhard


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: 15. Apr. 2021 10:24    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 ReinhardK 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ReinhardK:
Hallo KlaK

    Zitat:Ansonsten fällt mir hier nichts auf warum Blöcke mit Nummer 1 erzeugt werden könnten (außer sie waren schon in der Zeichnung)

        Zitat:Letzten habe ich das Pech gehabt, das einzelne Aufmaße zu einem Block zusammengefasst wurden, ein einziges Desaster!
        Mir ist das bisher nicht aufgefallen, weil ich eigentlich immer nur 1- 3 Meßplätze brauche, da waren es wesentlich mehr.

    Die Meßplätze werden ja woanders geöffnet (DateiNr scheint global zu sein), evtl. ist dort ein Fehler?

Die Blöcke 1-3 habe ich wirklich nur in einer Datei entdeckt, wer weiß, was das war.

Wie ich geschrieben hatte, ich versuche es jetzt so:

    Zitat:Ich würde es jetzt so machen, das ich prüfe, ob zB. Block 4 voehanden ist und wenn ja, die 5 prüfen usw.
    also die nächst freie Zahl vergebe. Wie der Block heißt, ist mir ansonsten völlig egal.
    Ich melde mich gleich noch mal und reiche das Programm nach.


Gruß Reinhard


Diese Vorgehensweise hat natürlich auch ihre Tücken, Du hattest ja schon geschrieben dass Blöcke 1-5 vorhanden waren, dann eine Lücke und dann wieder Blöcke 10-15.
Wenn so etwas vermieden werden soll, könnte man sich einen Blocknamen erzeugen der Datum, Uhrzeit und Nummer der Messung enthält, das dürfte dann auf alle Fälle eindeutig sein oder eine Funktion die den neuen Namen prüft.

Beispiel für Datum:

Code:
MB_Name = "M-" & Format(Date, "YYYYMMDD") & Format(Time, "hhmm")


Wenn Du diesen Namen noch um die Nummer der Messung erweiterst (irgendwo öffnest Du ja die neue Schnittstelle => DateiNr) ist dieser doch eindeutig.

Grüße
Klaus 

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

ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 15. Apr. 2021 13:26    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

Zitat:
Original erstellt von KlaK:

Diese Vorgehensweise hat natürlich auch ihre Tücken, Du hattest ja schon geschrieben dass Blöcke 1-5 vorhanden waren, dann eine Lücke und dann wieder Blöcke 10-15.
Wenn so etwas vermieden werden soll, könnte man sich einen Blocknamen erzeugen der Datum, Uhrzeit und Nummer der Messung enthält, das dürfte dann auf alle Fälle eindeutig sein oder eine Funktion die den neuen Namen prüft.


Hallo Klak,

das hatte ich ja weter oben geschrieben, ich möchte prüfen, ob die Zahl vorhanden ist wenn ja die Zahl erhöhen, bis was frei ist.

Zitat:

Ich würde es jetzt so machen, das ich prüfe, ob zB. Block 4 voehanden ist und wenn ja, die 5 prüfen usw.
also die nächst freie Zahl vergebe.

Funktioniert leider nicht so, wie ich möchte.

Blocknummer = 5
Blockname_vergeben = False
On Error Resume Next
While Blockname_vergeben = False
    Set tBlDef = ThisDrawing.Blocks.Item(LTrim(Str(Blocknummer)))             
    If (tBlDef Is Nothing) Then                                               
        MsgBox "Block nicht vorhanden"
        EinfP_Block(0) = 0#: EinfP_Block(1) = 0#: EinfP_Block(2) = 0#
        Set MessBlock = ThisDrawing.Blocks.Add(EinfP_Block, LTrim(Str(Blocknummer)))
        Blockname_vergeben = True
    Else
        MsgBox "Bin schon da!"
        Blocknummer = Blocknummer + 1
    End If
Wend

Beim ersten Durchlauf verhält sich das Programm wie erwartet, tBlDef ist Nothing und der Block wird erzeugt.
Beim zweiten Durchlauf erkennt das Programm das der Block existiert und nach Else wird die Blocknummer erhöht.
Trotzdem nimmt das Programm an, das der Block existiert und erhöht pausenlos die Blocknummer.
Also tBlDef wird nicht mehr Nothing, obwohl nur ein Block mit der Nummer 5 existiert.

Kurze Frage zum Forum:
Kann man in einem Thema für einen User nur einmal Unities abgeben?

Gruß Reinhard

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: 15. Apr. 2021 14: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 Nur für ReinhardK 10 Unities + Antwort hilfreich

Hallo Reinhard,

Ja die Tücken der Programmierung   
Warum ist das so? Ich habe Dir ja schon geschrieben benutze eine Fehlerabfangroutine, z.B. so:

    Set tBlDef = ThisDrawing.Blocks.Item(LTrim(Str(Blocknummer)))
    If Err Then
      Debug.Print Err.Number, Err.Description
      Stop
      Resume Next
    End If

Dann bekommst Du den Hinweis : -2145386476   Schlüssel nicht gefunden
Logisch, denn es gibt ja den Item("6") nicht.
Beim ersten Mal klappt das, tBlDef war nothing, beim zweiten Mal klappt das nicht mehr denn Du hast tBlDef bereits item("5") zugewiesen.
Jetzt hast Du zwei Möglichkeiten:

- Du ergänzt Deinen Code:
      Else
        Blocknummer = Blocknummer + 1
        Set tBlDef = Nothing
      End If

- Oder Du baust alles um:

Code:

Sub main()

Dim EinfP_Block(0 To 2) As Double
Dim Messblock As AcadBlock

Blocknummer = 5
' Blockname_vergeben = False
' On Error Resume Next
    While Blocktest(Trim(Str(Blocknummer))) = False
      Blocknummer = Blocknummer + 1
    Wend
  EinfP_Block(0) = 0#: EinfP_Block(1) = 0#: EinfP_Block(2) = 0#
  Set Messblock = ThisDrawing.Blocks.Add(EinfP_Block, LTrim(Str(Blocknummer)))

End Sub


Function Blocktest(Nr As String) As Boolean

Dim bFrei As Boolean
' Dim block As AcadBlock

bFrei = True
For Each block In ThisDrawing.Blocks
  If block.Name = Nr Then
    bFrei = False
    Exit For
  End If
Next block
Blocktest = bFrei

End Function


Variante 1 mit der (gewollten) Fehlererzeugung ist natürlich wegen der deutlich geringeren Schleifendurchläufe schneller. Dennoch würde ich nach der Zuweisung die Fehlerbehandlung wieder abschalten ( On Error goto 0 ) oder eben eine allg. Behandlung wie oben beschrieben einführen.


Zitat:
Kurze Frage zum Forum:
Kann man in einem Thema für einen User nur einmal Unities abgeben?

Nein, man kann auch mehr, allerdings jede Punktzahl nur einmal, also max. 55   

Grüße
Klaus   

[Diese Nachricht wurde von KlaK am 15. Apr. 2021 editiert.]

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

ReinhardK
Mitglied



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

Beiträge: 12
Registriert: 12.04.2021

erstellt am: 15. Apr. 2021 19: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

Hallo Klaus,

ganz herzlichen Dank, jetzt funktioniert alles!

Zitat:

Beim ersten Mal klappt das, tBlDef war nothing, beim zweiten Mal klappt das nicht mehr denn Du hast tBlDef bereits item("5") zugewiesen.
Jetzt hast Du zwei Möglichkeiten:

- Du ergänzt Deinen Code:
      Else
        Blocknummer = Blocknummer + 1
        Set tBlDef = Nothing
      End If


Hat sofort geklappt.

Zitat:
Dennoch würde ich nach der Zuweisung die Fehlerbehandlung wieder abschalten ( On Error goto 0 ) oder eben eine allg. Behandlung wie oben beschrieben einführen.

Hab ich gemacht. Mit der Fehlerbehandlung und allgemein mit VBA werde ich mich am Wochenende beschäftigen.
Ich dachte das brauch ich nicht mehr, aber wie man sieht...
Jetzt muß ich das Gerät erst mal wieder einsatzfähig machen, denn da gibt es noch ein anderes Problem.
Auf jeden Fall wird das Problem mit den verhunzten Blöcken nicht mehr auftreten.

Viele Grüße
Reinhard

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