Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  AutoCAD-Attribute in Excel einlesen (VB)

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
  
PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
Autor Thema:  AutoCAD-Attribute in Excel einlesen (VB) (5648 mal gelesen)
VolkerD
Mitglied
Dipl.Ing MB

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

Beiträge: 5
Registriert: 22.03.2006

erstellt am: 15. Sep. 2008 19:15    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

Ich hoffe ich bin hier richtig (eigentlich ist es ein Excel/VB Problem), da ich aus Excel Acad aufrufe.
Ich habe vor einiger Zeit bereits ein Programm geschrieben mit dem ich Attribute nach excel auslesen kann. Ich habe auch schon in verschiedenen Foren entsprechende Programme gefunden.
Hat auch alles funktioniert (ACAD Version 2000, Office 2000)
Nach langer Zeit benötige ich dieses Tool wieder und nichts funktioniert.
Ich vermute es liegt an der veränderten Umgebung (ACADMech 2006-2008, Office 2007)
Ich bekomme einfach keine Referenz auf den Block mehr ?
Folgendes Programm habe ich aus einem Forum geladen:
Sub getattr()
  Dim cad As Object
  Dim acad As AcadApplication
  Dim autocad_gestartet As Boolean
  Dim tempObj As AcadObject
  Dim gpCode(0) As Integer
  Dim dataValue(0) As Variant
  Dim ssetObj As AcadSelectionSet
  Dim bl As AcadBlockReference
  Dim ip(0 To 2) As Double
  Dim i, j, k, z As Long
  Dim attr 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")
'  Set ssetObj = acad.ActiveDocument.SelectionSets.Add("")
 
  AppActivate acad.Caption
  ssetObj.SelectOnScreen gpCode, dataValue
 
  AppActivate Application.Caption
  j = 1
  If ssetObj.Count > 0 Then
    For i = 0 To ssetObj.Count - 1
      Set bl = ssetObj.Item(i)
   
      If bl.HasAttributes = True Then
        Range("A" + Trim(Str(j + 1))).Select
        ActiveCell.FormulaR1C1 = acad.ActiveDocument.FullName
        Range("B" + Trim(Str(j + 1))).Select
        ActiveCell.FormulaR1C1 = bl.handle
        Range("C" + Trim(Str(j + 1))).Select
        ActiveCell.FormulaR1C1 = bl.name
        attr = bl.GetAttributes
        z = Asc("D")
        For k = LBound(attr) To UBound(attr)
          Range(Chr(z) + Trim(Str(j + 1))).Select
          ActiveCell.FormulaR1C1 = attr(k).TagString
          z = z + 1
          Range(Chr(z) + Trim(Str(j + 1))).Select
          ActiveCell.FormulaR1C1 = attr(k).TextString
          z = z + 1
        Next k
        j = j + 1
      Else
        MsgBox "Gewählte Blöcke haben keine Attribute!", vbOKOnly, "Meldung"
      End If
    Next i
  Else
    MsgBox "Keine Blöcke gewählt!", vbOKOnly, "Meldung"
  End If
  ssetObj.Delete
End Sub

Problem:
      Set bl = ssetObj.Item(i)
liefert keinen Blockk zurück.

Für Hilfe wäre ich sehr dankbar !!!

Volker

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


Ex-Mitglied

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

hi volker,

die vermutung liegt nahe, dass das vba-modul noch auf alte acad-referenzen hinzeigt.

oeffne mal den vba-editor
dann im pulldown 'extras'==>'verweise'
damit erhaeltst du eine liste von referenzierten dll's

alle hakerl, wo autocad mit version 2000 vorkommt ==> hakerl weg
dann verweisfenster schliessen
verweisfenster wieder oeffnen
neue hakerl machen bei:
- autocad 2006 type-library (oder 2007 oder 2008 oder 2009, was auch immer jetzt aktiv ist)
(wenn's noch nicht funktionieren sollte) - autocad/objectdbx common 17.0 (oder 17.1 oder 17.2)

hoffe es hilft

- alfred -

VolkerD
Mitglied
Dipl.Ing MB

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

Beiträge: 5
Registriert: 22.03.2006

erstellt am: 16. Sep. 2008 09:26    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 Alfred,
vielen dank für den Tip, aber das hatte ich auch schon probiert.
Da ich kein altes Autocad mehr auf dem Rechner habe, lief ohne die neuen Referenzen sowieso nichts.
Ich bekomme auch Verbindung mit Autocad und werde aufgefordert einen Block auszuwählen. Im Selectionset ist auch ein (bzw. mehrere) Eintrag vorhanden.
Erst bei der Zuweisung "Set bl = ssetObj.Item(i)" sieht es so aus als wäre das Ausgewählte Objekt kein Block. (ist aber einer)
Da bei der Zuweisung auch keine Fehlermeldung kommt, weis ich nicht mehr weiter.

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



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

Beiträge: 2855
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2025
Plateia, Canalis
Visual Basic

erstellt am: 16. Sep. 2008 10:29    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 VolkerD 10 Unities + Antwort hilfreich

Hallo Volker,
habe gerade Deine Sub mal unter AutoCAD 2008 und Excel 2000 ausprobiert, dort klappt es noch (Hilft Dir aber nicht weiter).

Was mir außer den Verweisen noch auffällt ist Deine Fehlerroutine. Wenn der SS2 in der Zeichnung schon besteht hast Du keine Zuweisung mehr. Ich würde die Zuweisung zumindest so schreiben:

  Set ssetObj = acad.ActiveDocument.SelectionSets.Add("SS2")
  If Err <> 0 Then
    Set ssetObj = acad.ActiveDocument.SelectionSets("SS2")
  End If

Ansonsten - stimmen die Excel-Verweise?
Kannst Du Deine Zeichnung mal einstellen?

Hoffe es hilft,
Klaus

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

VolkerD
Mitglied
Dipl.Ing MB

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

Beiträge: 5
Registriert: 22.03.2006

erstellt am: 16. Sep. 2008 11:33    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 Klaus,
ich habe gerade die gleiche Erfahrung gemacht. Auf einem Rechner mit Office2000 funktioniert noch alles einwandfrei!!???
Leider haben wir bei uns aber schon überall auf Office2007 umgestellt.
Seltsamerweise habe ich das gleiche Problem, wenn ich alles unter VB6  programmiere.
Das mit der Zuweisung ist ein guter Tip. Ich habe beim Testen schon häufiger genau das Problem gehabt.

Danke für die Hilfe

Volker

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 16. Sep. 2008 12:11    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 VolkerD 10 Unities + Antwort hilfreich

Hallo Volker,

bau doch mal vor die Set Anweisung eine Debug Zeile ein

Code:
Dim Ent as acadentity
....
Set Ent = ssetObj.Item(i)
debug.Print Ent.ObjectName

un schau mal was passiert.

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

VolkerD
Mitglied
Dipl.Ing MB

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

Beiträge: 5
Registriert: 22.03.2006

erstellt am: 19. Sep. 2008 17:16    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 Wilfried,
bin heute mal wieder zum Testen gekommen.
Debug.Print hat leider überhaupt keine Auswirkung.
Wenn ich im Debugger die Variable ansehe dann bekomme ich folgende Anzeige
Ent.ObjectName = <Objectvariable oder With-Blockvariable nicht festgelegt>
Diese Anzeige bekomme ich für alle Variablen denen ich ein Objekt aus dem Selectionset zuweise

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



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

Beiträge: 2855
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2025
Plateia, Canalis
Visual Basic

erstellt am: 19. Sep. 2008 20:23    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 VolkerD 10 Unities + Antwort hilfreich

Hallo Volker,
Wenn Du im Debugger schaust, hat ssetObj Werte? Count > 0?
Welche Objekte stehen im ssetObj ?
Hattest Du den Ent als AcadEntity definiert?
Schon mal ohne gpCode,dataValue probiert?

Fragen über Fragen, aber denke es gibt eine Lösung

Klaus

EDIT:
Hast Du mal eine Schleife probiert mit
  For Each element In ssetObj 'Werte aus SSet umsetzen
    debug.print element.objectname
    'Set bl = element
  Next element

[Diese Nachricht wurde von KlaK am 19. Sep. 2008 editiert.]

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)2025 CAD.de | Impressum | Datenschutz