| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Tab bzw. Ansicht für Zugriff auf AcadTable wechseln (1591 mal gelesen)
|
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 11. Jan. 2008 17:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum! Zu dem Zeitpunkt wo ich mein Makro ausführe befinde ich mich in "Model". Im "Tab" (ich nenne es jetzt einfach so  "a2_hoch" befindet sich eine AcadTable, deren Zelleninhalte ich auslesen will. Bei den Beispielen habe ich bereits was mit AcadTable gefunden, aber jetzt weiß ich nicht ob ich vom Tab "Model" aus auf die AcadTable zugreifen kann oder ob ich da umschalten muss / SelectionSet...? Wie mache ich das am besten? Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 11. Jan. 2008 18:27 <-- editieren / zitieren --> Unities abgeben:          Nur für pistolpete1
Hi Peter, die Layouts sind in den Blöcken in der Zeichnung aufgeführt. Mit ThisDrawing.Blocks.Item(i).Layout.Name bekommst du den Namen des Layouts bzw. des Modellbereichs. Daher solltest du diese Auflistung durchlaufen, bis du das passende Layout gefunden hast. Dann kommst du über ThisDrawing.Blocks.Item(i).Item(h) an die einzelnen Elemente. diese List kannst du dann auch durchlaufen, bis du das Tabellenobjekt gefunden hast. Gruß, Carsten
[Diese Nachricht wurde von Carsten1210 am 11. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 24. Jan. 2008 10:29 <-- editieren / zitieren --> Unities abgeben:         
Hallo Carsten, vielen Dank für deine detaillierte Antwort. Ich habe es gleich ausprobiert und folgende Probleme: -> Wie bekomme ich die Anzahl der Blöcke für die äußere Schleife? Ich habe es mit ThisDrawing.Blocks.Count versucht, aber die Anzahl kann nicht stimmen (60). -> Wenn ich mit Item(1) das Objekt hole, bekomme ich genau den Block in dem sich die Tabelle befindet. Anschließend versuche ich mit der inneren Schleife wieder über die Elemente zu iterieren, bekomme aber wieder einen Fehler: "Runtime Error 5: Invalid Procedure Call Or Argument"
Code:
Sub TestTable() Dim i As Integer Dim h As Integer Dim o As AcadObject For i = 0 To ThisDrawing.blocks.count If ThisDrawing.blocks.Item(i).Name = "a0_quer" Then For h = 0 To ThisDrawing.blocks.Item(i).count Set o = ThisDrawing.blocks.Item(i).Item(h) If TypeOf o Is AcadTable Then MsgBox "TABLE" End If Next h End If Next i End Sub
Ich bitte dich wiede einmal, mir zu helfen! Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 24. Jan. 2008 12:42 <-- editieren / zitieren --> Unities abgeben:         
|
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 27. Jan. 2008 18:50 <-- editieren / zitieren --> Unities abgeben:         
Wenn ich diesen Code probiere, kommt einmal die Messagebox, da der richtige Block erreicht wurde, aber dann kommt ein Fehler: Code:
For i = 0 To ThisDrawing.blocks.count If ThisDrawing.blocks.Item(i).Layout.Name = "a0_quer" Then MsgBox "block gefunden" End If Next i
Fehler im Anschluss (da der Blockcount 60 ist ...):
run-time error '-2145320891 (80210045)': the property is not available in current state Lg Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 28. Jan. 2008 18:37 <-- editieren / zitieren --> Unities abgeben:          Nur für pistolpete1
Hallo Peter, wenn du in der Schleife arbeitest dann nur bis count -1
Code: For i = 0 To ThisDrawing.blocks.count -1 If ThisDrawing.blocks.Item(i).Layout.Name = "a0_quer" Then MsgBox "block gefunden" End If Next i
Der Index fängt bei 0 an aber es werden alle gezählt.Eine andere Variante wäre doch über die Layouts zu gehen.
Code: Sub Layouts() Dim myLayout As AcadLayout Dim LayoutBlockDef As AcadBlock Dim Entity As AcadEntity On Error Resume Next Set myLayout = ThisDrawing.Layouts("Layout1") If Err.Number = 0 Then On Error GoTo 0 ' Layout vorhanden Set LayoutBlockDef = myLayout.Block For Each Entity In LayoutBlockDef Debug.Print Entity.ObjectName Next Else MsgBox "Gesuchtes Layout ist nicht vorhanden" End If End Sub
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 29. Jan. 2008 11:12 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried! Danke das funktioniert - nun finde ich das Layout und bekomme die Auflistung aller Objekte. Ich dachte eines davon müsste "AcadTable" sein, in meiner Auflistung sind aber nur: AcDbViewport AcDbLine AcDbLine AcDbLine AcDbLine AcDbPolyline AcDbPolyline AcDbViewport AcDbLine AcDbLine AcDbBlockReference Im Anhang ist ein ScreenShot der Tabelle, vlt. kannst du daraus erkennen, welches Objekt das ist. Vielen Dank, Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 29. Jan. 2008 11:26 <-- editieren / zitieren --> Unities abgeben:          Nur für pistolpete1
Hallo Peter, es sieht aus wie eine Tabelle, muss aber keine sein. In deiner Auflistung der Objekttypen wird eine Blockreferenz aufgeführt. Ist es ein Block ? Markiere das Ding doch mal und schaue nach den Eigenschaften. Wenn es ein Block ist dann zerlege ihn in den Ursprung. Vielleicht kommt dann erst die Tabelle Wenn es eine Tabelle ist, wird in der Auflistung auch AcDbTable ausgegeben. Wilfried Stelberg
------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 29. Jan. 2008 20:55 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, ich glaube, dass es ein Block ist, aber ich werde nicht schlau, wie ich den weiterzerlegen könnte. Ich habe den abgespeckten Plan bzw. nur die Tabelle im Anhang. Ich wäre dir sehr verbunden, wenn du einen Blick darauf werfen könntest!!! Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 29. Jan. 2008 21:51 <-- editieren / zitieren --> Unities abgeben:          Nur für pistolpete1
|
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 31. Jan. 2008 17:58 <-- editieren / zitieren --> Unities abgeben:         
Hallo Carsten vielen Dank für die Information - Das muss ich dann wohl ändern lassen, denn wenn es eine Tabelle ist, stellt das auslesen der Werte auch keine Problem mehr dar (zumindest laut Hilfe). Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 26. Apr. 2008 12:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Soviel ich weiß setzt sich die Tabelle jetzt aus Blöcken mit dem Namen "SchachtlisteZeile" zusammen (pro Zeile ein solcher Block). Ein Element darin heißt zB POS. Die Blöcke kann man ja mittels SSet suchen, oder? Aber wie funktioniert der Zugriff auf einen Block innerhalb des Blocks (zB POS)? Ich habe den Plan im Anhang. Ich wäre sehr dankbar, wenn sich jemand die Mühe machen würde und mir zeigt, wie ich die Blöcke suchen bzw. auf die einzelnen Elemente zugreifen kann! Vielen Dank, Lg Peter PS: Tabelle befindet sich im "Tab" "1.0mx1.4m_hoch"! 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: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 01. Mai. 2008 18:43 <-- editieren / zitieren --> Unities abgeben:          Nur für pistolpete1
Hallo Peter, Wie Du im Eigenschaftsfenster sehen kannst hat der Block wirklich den Namen "SchachtlisteZeile" und in den Attributen stehen die zugehörigen Werte. Beispiele zum Auslesen der Werte findest Du im Forum viele, zum Beispiel hier Du mußt im Block das Attribut mit .TagString = "POS" suchen, im .TextString findest Du dann Deinen gesuchten Wert. Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |