| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Block änderungen (1314 mal gelesen)
|
dw Mitglied cad
Beiträge: 45 Registriert: 29.06.2007
|
erstellt am: 22. Apr. 2013 12:11 <-- editieren / zitieren --> Unities abgeben:
Wer ist in der Lage mich weiter zu helfen? Habe da eine Routine welche Blocks in der Zeichnung ändert aber das Problem liegt da wen ich zb block altername_3 und 4 nicht in der Zeichnung habe bekommt das altername_2 die neuername_4 und das darf eben nicht passieren wie kann man diese Fehler unterfangen? Private Sub CommandButton1_Click() Dim block As AcadBlock On Error Resume Next Set block = ThisDrawing.Blocks("altername_1") block.Name = "neuername_1" Set block = ThisDrawing.Blocks("altername_2") block.Name = "neuername_2" Set block = ThisDrawing.Blocks("altername_3") block.Name = "neuername_3"
Set block = ThisDrawing.Blocks("altername_4") block.Name = "neuername_4" MsgBox "alle blocks sind geändert....." Me.Hide End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 22. Apr. 2013 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für dw
|
dw Mitglied cad
Beiträge: 45 Registriert: 29.06.2007
|
erstellt am: 22. Apr. 2013 12:19 <-- editieren / zitieren --> Unities abgeben:
|
bccad Mitglied
Beiträge: 57 Registriert: 02.11.2009
|
erstellt am: 22. Apr. 2013 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für dw
hallo dw, versuchs mal so ... Bernd Code:
Private Sub CommandButton1_Click() Dim block As AcadBlockOn Error Resume Next Set block = ThisDrawing.Blocks("altername_1") If Not (block Is Nothing) Then block.Name = "neuername_1" Set block = ThisDrawing.Blocks("altername_2") If Not (block Is Nothing) Then block.Name = "neuername_2" MsgBox "alle blocks sind geändert....." Me.Hide End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dw Mitglied cad
Beiträge: 45 Registriert: 29.06.2007
|
erstellt am: 22. Apr. 2013 13:35 <-- editieren / zitieren --> Unities abgeben:
Tut mir leid aber diese geht auch nicht, wenn man block altername_3 wegnehmt in der Zeichnung kriegt block altername_2 die neuername_3 und sollte neuername_2 bleiben. Private Sub CommandButton1_Click() Dim block As AcadBlock On Error Resume Next
Set block = ThisDrawing.Blocks("altername_1") If block.Name = True Then block.Name = "neuername_1" Else: MsgBox " kein block im Zeichnung" Set block = ThisDrawing.Blocks("altername_2") If block.Name = True Then block.Name = "neuername_2" Else: MsgBox " kein block im Zeichnung" Set block = ThisDrawing.Blocks("altername_3") If block.Name = True Then block.Name = "neuername_3" Else: MsgBox " kein block im Zeichnung" ' ' Set block = ThisDrawing.Blocks("altername_4") ' If Not (block Is Nothing) Then block.Name = "neuername_4" ' MsgBox "alle blocks sind geändert....." Me.Hide End Sub
[Diese Nachricht wurde von dw am 23. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bccad Mitglied
Beiträge: 57 Registriert: 02.11.2009
|
erstellt am: 23. Apr. 2013 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für dw
Hi dw, Das liegt vermutlich daran das der Variablen 'block' noch die Blockreferenz des vorherigen Set-Befehls zugewiesen ist. und 'If block.Name = True' ist auch nicht so toll. Wenn es den Block nicht gibt ist das Objekt nothing, (True/False) Probier mal das: Set block = ThisDrawing.Blocks("altername_1") If Not (block Is Nothing) Then block.Name = "neuername_1" Set block = Nothing Set block = ThisDrawing.Blocks("altername_2") If Not (block Is Nothing) Then block.Name = "neuername_2" Set block = Nothing Bernd 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
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 23. Apr. 2013 16:16 <-- editieren / zitieren --> Unities abgeben: Nur für dw
Eure Programme möchte ich nicht unbedingt übernehmen wollen (und die Rechtschreibung auch nicht) Beiliegendes Programm sollte so funktionieren und dann macht Euch mal Gedanken zum Programmierstil ... Code:
Sub Block_Tausch() Dim oBlock As AcadBlock On Error GoTo 0 For Each entity In ThisDrawing.Blocks Set oBlock = entity If UCase(oBlock.Name) = UCase("Altername_1") Then Call Tauschen(oBlock, "AlterName_1", "NeuerName_1") If UCase(oBlock.Name) = UCase("Altername_2") Then Call Tauschen(oBlock, "AlterName_2", "NeuerName_2") If UCase(oBlock.Name) = UCase("Altername_3") Then Call Tauschen(oBlock, "AlterName_3", "NeuerName_3") Next End Sub Sub Tauschen(sBlock As AcadBlock, sA As String, sN As String) Dim tBlock As AcadBlock Dim gefunden As Boolean On Error GoTo 0 gefunden = False For Each ent In ThisDrawing.Blocks Set tBlock = ent If UCase(tBlock.Name) = UCase(sN) Then gefunden = True Exit For End If Next ent If gefunden Then MsgBox "Neuer Name " & sN & " bereits vorhanden " & vbCrLf & "Block " & sA & " nicht geändert" Else sBlock.Name = sN End If End Sub
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 266 Registriert: 07.06.2013 Various: systems, Operating systems, cad systems, cad versions, programming languages.
|
erstellt am: 26. Jun. 2013 20:38 <-- editieren / zitieren --> Unities abgeben: Nur für dw
*pruhst* wo du recht hast hast du recht !!! Ich wuerd die blocknamen mit split ersteinmal in den text und den numerischen teil aufsplitten dann nen temporaeren blocknamen erstellen mit dem um 1 hochgezaehlten numerischen teil guggen ob der existiert und wenn ja das ganze solange wiederholen bis er nicht existiert. Sie ueben halt noch ------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |