Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block aus Header / aus Bibliothek einfügen

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:  Block aus Header / aus Bibliothek einfügen (2024 mal gelesen)
otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 10. Sep. 2009 21: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 zusammen,

ich habe eine Blockbibliothek (Ordner mit DWG-Dateien) in der es z.B. einen Block "Baum.dwg" gibt.
Mit einem VBA-Code füge ich diesen Block in meine leere Zeichnung ein. (Block ist noch nie in die Zeichnung eingefügt worden)

Während des Projekts soll der Baum auf einmal anders aussehen und ich definiere den Block "Baum" in der Zeichnung neu.

Wenn ich jetzt den Code wieder laufen lasse, weil ich irgendwo noch einen Baum einfügen will, wird nicht der geänderte Baum-Block aus der Zeichnung referenziert, sondern der ursprüngliche Block "Baum.dwg" aus der Bibliothek neu geladen und der Block in der Zeichnung neu definiert.

Somit schaut der Baum wieder aus wie vorher.

Den Programmablauf stelle ich mir so vor:
- Nachsehen, ob der Block "Baum" in der Zeichnung bereits eingefügt  wurde bzw. im Header vorkommt
- wenn ja, diesen Block nehmen.
- wenn nein, Block aus der Bibliothek suchen und einfügen.

Wie kann ich das meinem Rechner sagen?

------------------
Christian

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


Ex-Mitglied

erstellt am: 10. Sep. 2009 22:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

da läuft irgendwas aber nicht so, wie ich es kenne. 

Wenn Du bereits eine Blockdefinition 'BAUM' in der Zeichnung hast (und diese Definition in der Zeichnung bereits modifiziert hast); dann erneut den Einfügebefehl mit vollem Dateinamen angibst (z.B. 'C:\AcadSymb\BAUM.dwg'), dann schaut AutoCAD schon selbst nach, ob's die Blockdefinition schon gibt oder nicht.

Lt. Deiner Beschreibung interpretiere ich, dass mit Deiner Version, wie Du den Block einfügst, die in der Zeichnung bestehende Blockdefinition überschrieben wird und danach alle BlockReferenzen 'BAUM' wieder so aussehen, wie in der DWG, die Du einfügst. ==> Sorry das glaub ich nicht, bitte Code zeigen!

Du kannst aber schon prüfen, ob es bereits eine Blockdefinition mit einem bestimmten Namen gibt:

Code:
On Error Resume Next
Dim tBlName as String
tBlName = "BAUM"

Dim tBlDef as AcadBlock
Set tBlDef = ThisDrawing.Blocks(tBlName)
if tBlDef is Nothing Thene
  'die Blockdefinition existiert noch nicht
else
  'die Blockdefinition existiert
End If



HTH, - alfred -

------------------
www.hollaus.at

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 11. Sep. 2009 07:34    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 otm 10 Unities + Antwort hilfreich

Bist du sicher, daß der Block existiert?
Im Post vorher hast du gefragt wie man den Block im Ursprung einfügt.
Schau mal vor dem Einfügen, ob der Block tatsächlich schon als solcher in der Zeichnung vorhanden ist.

lg
Didi

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 11. Sep. 2009 08: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

Hi Alfred,

das dachte ich auch aber es klappt leider nicht.

Foldender Code soll schauen, ob der Block in der Zeichnung vorhanden ist. (Der Code ist von verschiedenen Autoren zusammengetragen. Hier auch ein Dank an alle.)

Wenn er vorhanden ist, dann den Code aus der Zeichnung nehmen.
Wenn er nicht vorhanden ist, dann aus der Bibliothek "nachladen".

'Hauptprogramm:
...
' Ist der gewünschte Block schon in der Zeichnung definiert ?
    Set Blockdef = GetBlockDef(BlkNameDWG)
   
    'Block in die Zeichnung laden, wenn er nicht schon vorhanden ist.
    If Blockdef Is Nothing Then
        '' Block aus einer externen Zeichnung laden
        Set Blockdef = LoadBlock(BlkNameDWG)
    End If
   
    'Block einfügen, der schon in der Zeichnung vorhanden ist.
    Dim Blk As AcadBlockReference   
    If ThisDrawing.ActiveSpace = acModelSpace Then
        Set Blk = ThisDrawing.ModelSpace.InsertBlock(EPkt, BlkNameVoll, XF, YF, ZF, RiWi)
    Else
        Set Blk = ThisDrawing.PaperSpace.InsertBlock(EPkt, BlkNameVoll, XF, YF, ZF, RiWi)
    End If

....


'Code:
Function GetBlockDef(Blockname As String) As AcadBlock
    ''  Blockdefinition holen
    On Error Resume Next
    ' Versuch eine Blockdefinition zu holen
    Set GetBlockDef = ThisDrawing.Blocks(Blockname)
    If Err.Number Then
      ' Ist der Block nicht vorhanden
      Set GetBlockDef = Nothing
    End If
    On Error GoTo 0
   
End Function

Function LoadBlock(BlkNameVoll As String) As AcadBlock
    '' DWG als Block laden
   
    Dim tmpBlockRef As AcadBlockReference
    Dim tmpPkt(0 To 2) As Double
    Dim tmpBlockName As String
   
    'Temporären Einfügepunkt festlegen.
    tmpPkt(0) = 0#: tmpPkt(1) = 0#: tmpPkt(2) = 0#
       
    ' Fügt eine DWG temporär ein
    Set tmpBlockRef = ThisDrawing.ModelSpace.InsertBlock(tmpPkt, BlkNameVoll, 1, 1, 1, 0)
   
    ' Name des Block innerhalb von AutoCAD ermitteln
    tmpBlockName = tmpBlockRef.Name
   
    ' Blockreferenz löschen
    tmpBlockRef.Delete
   
    ' Rückgabe der Blockdefinition
    Set LoadBlock = ThisDrawing.Blocks(tmpBlockName)
   
End Function
'________________________________

So dachte ich funktioniert's.

Hi Didi,

ja ich bin sicher, dass der Block existiert.
Hab ihn schon mehrmals eingefügt, bevor ich die Blockdefinition in der Zeichnung geändert habe.

Der andere Beitrag bezog sich nicht auf dieses Problem.
Aber danke für das Mitdenken.

------------------
Christian

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


Ex-Mitglied

erstellt am: 11. Sep. 2009 19:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

kann es sein, dass in der Variable  'BlkNameDWG'  die Dateinamen-Extension mit drin steht?

...und die Zeile mit
If Err.Number Then

liefert einen Integer-Wert, der ist nicht zwangsweise True oder False. Vergleiche mal statt dessen

if Err.Number <> 0 then

- oder noch besser -

if GetBlockDef is nothing then

Viel Erfolg, - alfred -

------------------
www.hollaus.at



Elektroplaner (m/w/d) Fertigung und Montage
Technologien auf das nächste Level zu heben, sich Herausforderungen zu stellen und an den Innovationen von morgen zu arbeiten - dafür benötigen wir bei FERCHAU Expert:innen wie dich: als ambitionierte Kolleg:innen, die wie wir Technologien auf die nächste Stufe bringen möchten. Wir realisieren spannende Projekte für namhafte OEMs und Zulieferer der Automobilindustrie und übernehmen Verantwortung für komplexe Entwicklungsprojekte....
Anzeige ansehenElektrotechnik, Elektronik
otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 15. Sep. 2009 20:12    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

Hi Alfred,

danke für den Hinweis.
Ich werd's probieren, kann aber, wegen dringenden Aufträgen etwas dauern.

------------------
Christian

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