| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Mittels VBA den Layoutnamen ändern ? (2287 mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 11. Mrz. 2010 18:53 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich bin gerade dabei mir ein kleines Tool zuschreiben, welches die Anzahl der Layouts (- Model) in eine Dialogbox schreibt. Ferner wird der Name des Layouts mit in eine Textbox geschrieben. Den Namen des Layouts möchte ich in der Textbox ändern und per Buttonclick soll der alte Layoutname überschrieben werden. Bei dem zurückschreiben hakts gerade? Könnte mir da bitte jemand bei weiterhelfen? Code:
Private Sub cmdOK_Click() Dim ALayouts As AcadLayouts, ALayout As AcadLayoutIf TextBox9.Text = "Model" Then GoTo MyErrorHandler4 '####---???? If ThisDrawing.ActiveLayout.ModelType = False Then ALayouts().Name = TextBox9.Text End If '----------- Exit Sub MyErrorHandler4: MsgBox "Sie befinden sich im Modellbereich", vbInformation, "Zur Info" End Sub
Vielen Dank im voraus. Gruß Dirk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 11. Mrz. 2010 18:56 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 11. Mrz. 2010 20:12 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium! Danke für den "Anschubser". So gehts nun:
Code:
Dim Layout As AcadLayout Set Layout = ThisDrawing.ActiveLayoutIf TextBox9.Text = "Model" Then GoTo MyErrorHandler4 If Layout.ModelType = False Then Layout.Name = TextBox9.Text End If ... ...
Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 11. Mrz. 2010 20:34 <-- editieren / zitieren --> Unities abgeben:
Hallo! Noch ne kleine Nachfrage zu Blöcken (Schriftkopfblock) im Layoutberech. Wenn ich die Blockreferenzen in dem Schriftkopfblock in einem Layout mittels VBA ändern möchte, wie Filter ich diesen nur in dem activen Layout heraus? Geht das auch über DXF - Gruppencode
Code:
Dim EntGrp(0) As Integer Dim EntPrp(0) As VariantSet ssnew = ThisDrawing.SelectionSets.Add("DB08") EntGrp(0) = 2 EntPrp(0) = "dbattab-info" ssnew.Select acSelectionSetAll, Pt1, Pt2, EntGrp, EntPrp ...
oder wie kann ich diesen direkt ansprechen? Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 11. Mrz. 2010 20:36 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
Ex-Mitglied
|
erstellt am: 11. Mrz. 2010 21:04 <-- editieren / zitieren -->
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 12. Mrz. 2010 09:22 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium! Hallo Alfred! Vilen Dank, funktioniert prima. Code:
... EntGrp(0) = 0: EntPrp(0) = "INSERT" EntGrp(1) = 2: EntPrp(1) = "dbattab-info" EntGrp(2) = 410: EntPrp(2) = Layout.Name ...
Mein Dank ist unterwegs. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 12. Mrz. 2010 15:32 <-- editieren / zitieren --> Unities abgeben:
Hi! Noch ne Nachfrage zur Fehlerbehandlung hätte ich da. Die Übergabe des Layout.name funktioniert soweit. Nur könnte es ja sein, daß bereits ein Layout den gerade vergeben Namen hat. Um hier einem Fehler und somit einem Programmabbruch vorzubeugen, möchte ich noch einen ErrorHandler einbauen. Nur beim Abgleich der Layoutnamen, erkennt das Programm ja auch das active Layout!!!! Hätte da noch jemand eine Lösung für mich? Code:
Private Sub cmdOK_Click() Dim Layout As AcadLayout, Layouts As AcadLayouts, Layout1 As AcadLayout Set Layout = ThisDrawing.ActiveLayout Set Layouts = ThisDrawing.LayoutsIf TextBox9.Text = "Model" Then GoTo MyErrorHandler1 If TextBox9.Text = "" Then TextBox9.Text = " Kopie" End If If Layout.ModelType = False Then For Each Layout1 In Layouts If Layout1.Name = TextBox9.Text Then GoTo MyErrorHandler2 Next Layout.Name = TextBox9.Text End If ... ... Exit Sub MyErrorHandler1: MsgBox "Sie befinden sich im Modellbereich", vbInformation, "Zur Info" ThisDrawing.SelectionSets.Item("DB15").Delete MyErrorHandler2: MsgBox "Ein Layout mit diesem Namen gibt es bereits", vbInformation, "Zur Info" Layout.Name = TextBox9.Text & " Kopie" End Sub
Vielen Dank im voraus. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 12. Mrz. 2010 15:49 <-- editieren / zitieren -->
Hi, vermeide GoTo-Anweisungen, wenn Du Dich später mal mit anderen Programmiersprachen auseinandersetzten willst. Und dann gäbe es noch das 'On Error ....', das ich wie folgt verwendet hätte: Code: Private Sub cmdOK_Click() Dim Layout As AcadLayout Set Layout = ThisDrawing.ActiveLayout If TextBox9.Text = "Model" Then MsgBox "Sie befinden sich im Modellbereich", vbInformation, "Zur Info" ThisDrawing.SelectionSets.Item("DB15").Delete Else 'dann koennen wir weiter fortsetzen If TextBox9.Text = "" Then TextBox9.Text = " Kopie" End If Dim tNewLayoutName as string tNewLayoutName = TextBox9.Text Do While len(tNewLayoutName) < 250 'Sicherheitsgrenze 'solange der Name nicht gesetzt werden kann, " Kopie" anhängen On Error Resume Next Layout.Name = tNewLayoutName If Err.Number = 0 then 'dann hat alles funktioniert 'raus aus der Funktion Exit Do Else 'dann wurde beim Setzen des Layout-Names von AutoCAD ein Fehler gemeldet tNewLayoutName = tNewLayoutName & " Kopie" End If On Error Goto 0 Loop if Layout.Name <> tNewLayoutName Then MsgBox "Fehler beim Setzen des Layoutnamens (" & tNewLayoutName & ")", vbInformation, "Zur Info" End If End IF End Sub
(Blind geschrieben, Tippfehler möglich, Logikfehler möglich, aber weniger wahrscheinlich ) Dabei vermeide ich auch den Fehler, dass es ev. schon einen Namen mit ' Kopie' gibt, dann würde Dein Code abbrechen. Du kannst natürlich auch statt " Kopie" anzuhängen besser eine Zahl anhängen, die sich hochzählt, denn dann läufst Du nicht in Gefahr, dass der Layoutnamens-String zu lange wird. Lass mich wissen, wenn der Code zu wenig kommentiert und damit ev. unverständlich ist. - alfred - ------------------ www.hollaus.at |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 12. Mrz. 2010 16:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred! Vielen Dank erst einmal. Leider komme ich heute nicht mehr dazu es auszuprobieren. Aber morgen werde ich es mal testen. Zitat:
...wenn Du Dich später mal mit anderen Programmiersprachen auseinandersetzten willst.
Ich spiele mit dem Gedanken von VBA auf VB.Net zu wechseln. Hab mich auch schon mal in dem entsprechenden Forum so umgesehen. Auch die Infos bzw. Dateien von der Autodesk (USA) Seite habe ich mir schon mal heruntergeladen. Nur alles was ich bislang dazu gefunden habe ist alles auf englisch beschrieben. Gibt es dazu schon Infos und Anleitungen auf deutsch? Sobald ich dieses Tool unter VBA lauffähig habe, würde ich gerne versuchen diese mittels VB.Net umzusetzen. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 12. Mrz. 2010 16:36 <-- editieren / zitieren -->
Hi, >> Gibt es dazu schon Infos und Anleitungen auf deutsch? Nichts von Autodesk, einige (wenige) Hinweise zu (deutschen) Büchern für dotNET mit AutoCAD hätte es in dem Forum AutoCAD-ObjectARX schon gegeben, bisschen suchen. - alfred - ------------------ www.hollaus.at |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 12. Mrz. 2010 18:18 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, Ich würde mich an deiner Stelle erst einmal grundsätzlich mit VB.Net auseinander setzten bevor man sich gleich daran macht etwas mit AutoCAD und VB.Net zu machen. Es gibt doch einige Unterschiede zwischen VBA und VB.Net. Du kannst dir ja das Galileo Openbook Visualbasic 2008 anschauen. Da hast du Online ein komplettes Buch kostenlos zu VB.Net zur Verfügung. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 13. Mrz. 2010 12:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred! Hallo Carsten! Alfred! Vielen Dank noch mal. Nun funktionierts. Carsten! Vielen Dank für den Link. Bin bereits da bei, mir einen Überblick über VB.Net zu verschaffen. - Klassenbibliotek - Windows Forms-Anwendungen Ich wünsch Euch noch ein schönes Wochenende. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |