| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: Werte von Excel auf Attribute übergeben (3653 mal gelesen)
|
Bernhard F. Mitglied

 Beiträge: 24 Registriert: 17.03.2008 WIN 10 BricsCAD 20 Autocad 2019
|
erstellt am: 17. Mrz. 2008 11:01 <-- editieren / zitieren --> Unities abgeben:         
Ich möchte von einer Exceldatei bestimmte Werte auf einen ausgewählten Blockattribut übergegeben. folgenede vorgehensweise: 1. Excel öffen 2. Makro aufrufen 3. Block in Acad wählen (Attribute sollen sich ändern) Kann mir hier jemand helfen, am besten mit einem Beispiel? Danke im Voraus. Bernhard F. 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
|
erstellt am: 17. Mrz. 2008 11:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Bernhard F.
|
Bernhard F. Mitglied

 Beiträge: 24 Registriert: 17.03.2008 WIN 10 BricsCAD 20 Autocad 2019
|
erstellt am: 17. Mrz. 2008 11:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo Carsten Ich hab z.B.: das Beispiel blockattr.xls verwendet. Hier ist es aber so, dass ich das mit den Block anwählen nicht hingebracht habe. Und hier werden ja alle Daten wieder in den Block zurückgeschrieben. Ich möchte aber, wie gesagt den Block anwählen und nur bestimmte Daten von Excel zurückgeben. Ich möchte selber bestimmen von welcher Spalte und Zeile ich die Daten übernehme. Bernhard F. 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: 17. Mrz. 2008 14:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Bernhard F.
Hallo Bernhard, ich möchte mich so kurz vor dem Urlaub nicht einmischen, aber .. Zitat: 1. Excel öffen 2. Makro aufrufen 3. Block in Acad wählen (Attribute sollen sich ändern)
Woher soll das Programm wissen welche Attribute sich ändern sollen ? Wie ist denn die Verbindung der Blockreferenz zur Exceltabelle ? (Handle, Koordinate, ???) Wenn man das dem Programm immer blockweise angeben musst, kann man die Werte ja fast von Hand ändern. Welchen Programmcode hast du denn schon. Sonst kann man ja keine Vorschläge machen. 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 |
Bernhard F. Mitglied

 Beiträge: 24 Registriert: 17.03.2008 WIN 10 BricsCAD 20 Autocad 2019
|
erstellt am: 17. Mrz. 2008 15:03 <-- editieren / zitieren --> Unities abgeben:         
Zitat: [/QUOTE] Woher soll das Programm wissen welche Attribute sich ändern sollen ? [QUOTE]
Die gebe ich an. z.B.: ba(6).TextString = Cells(15, 6).Value Zitat: [/QUOTE] Wie ist denn die Verbindung der Blockreferenz zur Exceltabelle ? (Handle, Koordinate, ???) [QUOTE]
Das ist eben die Frage, das kann ich nicht sagen. Zitat: [/QUOTE] Wenn man das dem Programm immer blockweise angeben musst, kann man die Werte ja fast von Hand ändern. [QUOTE]
Das ist richtig, aber die Exceltabelle (Blattverzeichniss) wird von jemanden anderen erstellt. Zitat: [/QUOTE] Welchen Programmcode hast du denn schon. Sonst kann man ja keine Vorschläge machen. [QUOTE]
Sub setattrBlock() Dim cad As Object Dim acad As AcadApplication Dim autocad_gestartet As Boolean Dim tempObj As AcadObject Dim ssetObj As AcadSelectionSet Dim bl As AcadBlockReference Dim i, j, k, z As Long Dim attr() As String Dim dwgname, handle, blname As String Dim ba As Variant Dim gpCode(0) As Integer Dim dataValue(0) As Variant autocad_gestartet = True On Error Resume Next Set cad = GetObject(, "AutoCAD.Application") If Err.Number <> 0 Then Err.Clear MsgBox "AutoCAD ist nicht gestartet", vbOKOnly, "Fehler" Exit Sub End If Set acad = cad If IsNull(acad.ActiveDocument) Then MsgBox "Keine Zeichnung geöffnet", vbOKOnly, "Fehler" Exit Sub End If gpCode(0) = 0 dataValue(0) = "Insert" Set ssetObj = acad.ActiveDocument.SelectionSets.Add("SS2") AppActivate acad.Caption ssetObj.SelectOnScreen gpCode, dataValue ... ba(6).TextString = Cells(15, 6).Value ssetObj.Delete End Sub Bernhard F. 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: 17. Mrz. 2008 19:17 <-- editieren / zitieren --> Unities abgeben:          Nur für Bernhard F.
Hallo Bernhard, Zitat: Die gebe ich an. z.B.: ba(6).TextString = Cells(15, 6).Value
Aber doch nicht im Programmcode, oder ? Du kannst es automatisieren wenn es in der Exceltabelle eine Spalte mit einem Elementnamen gibt und dieser auch in einem Blockattribut abgefüllt ist. Dann kannst du einen Block selektieren, den Elementnamen des Blockes aus dem Attributfeld lesen, diesen in der Exceltabelle suchen. Damit erhälst du z.B. die Zeile in Excel in der die Daten zu diesem Element stehen. Dann liest du die Daten wieder in die Attribute zurück. Wenn das dynamisch gehen soll, kannst du ja z.B. nach einer Formatierung in Excel schauen. z.B. wenn Textfarbe rot dann den Wert ins Attribut schreiben. In deinem Programmcode für das Selektionset ist ein Fehler drin. Du kannst nicht in jedem Durchlauf ein neues Selektionset anlegen. Das klappt nur beim ersten Mal. Du musst abfragen ob es eines gibt und wenn nicht, ein neues anlegen.
Code: Dim sset As AcadSelectionSet Dim fType(0 To 0) As Integer Dim fData(0 To 0) As Variant On Error Resume Next Set sset = ThisDrawing.SelectionSets("MySel") If Err.Number Then Set sset = ThisDrawing.SelectionSets.Add("MySel") End If On Error GoTo 0 fType(0) = 0: fData(0) = "Insert" sset.SelectOnScreen fType, fData MsgBox sset.Count
So kannst du auch eine Vorauswahl brücksichtigen
Code: Set sset = ThisDrawing.PickfirstSelectionSet If sset.Count = 0 Then sset.Clear sset.SelectOnScreen End If
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 |
Bernhard F. Mitglied

 Beiträge: 24 Registriert: 17.03.2008 WIN 10 BricsCAD 20 Autocad 2019
|
erstellt am: 18. Mrz. 2008 13:03 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |