Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Autocad aus Excel heraus ansprechen

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 aus Excel heraus ansprechen (6021 mal gelesen)
Murkel
Mitglied
CAD-Zeichnerin


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

Beiträge: 20
Registriert: 12.02.2008

AutoCAD 2006 und 2007
Windows XP 32bit
Office 2003

erstellt am: 19. Feb. 2008 23: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

Hallo,
ich habe noch ein Problem, aber bitte nicht gleich in die Luft gehen, weil die ganze Geschichte schon mehrfach besprochen wurde. Hier erstmal mein Ansatz:

Sub Acadtabelle()

  Dim acApp As Object                                'Anwendungsobject (AutoCAD)
  Dim acDoc As Object
       
  Set acApp = CreateObject("Autocad.Application")    'Autocad starten
               
  'die entsprechende Zeichnung (strFilename wurde vorher ermittelt) öffnen:
  acApp.Documents.Open (strFilename)                 
  acApp.Application.WindowState = acMax              'Autocad-Fenster maximieren

  Set acDoc = acApp.ActiveDocument
  acApp.ActiveDocument.ActiveSpace = acPaperSpace    'Layoutbereich aktiv setzen
       
  'acApp.Visible = True                              'AutoCAD anzeigen
       
  MsgBox "testlauf"

  Dim pt(2) As Double        'Startpunkt (linker oberer Punkt der Tabelle) festlegen
  pt(1) = -660
  pt(2) = 195
 
  Dim MyTable As AcadTable
  'Tabelle zeichnen mit Startpunkt, Zeilenanzahl, Spaltenanzahl, Zeilenhöhe, Spaltenbreite)
  Set MyTable = MyPaperSpace.AddTable(pt, 4, 4, 5, 55)

End Sub

Trotz Aufruf von Autocad aus dem Excel heraus, gelingt es mir nicht die einzelnen Autocad-Objekte anzusprechen. Ich habe auch schon unter Extra die Verweise zu Autocad eingestellt, obwohl ich eigentlich ohne Verweise auskommen wollte. Ich verstehe auch die ganze Sache mit früher und später Bindung nicht. Gibt es dazu Literatur, wo man nachlesen kann? Was mache ich falsch? Laßt mich bitte nicht vor Dummheit sterben, vielleicht fehlt mir ja nur ein kleiner Anstoß.
Gruß Ines

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

yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

erstellt am: 20. Feb. 2008 16:07    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 Murkel 10 Unities + Antwort hilfreich

Hallo Ines,

1.Also der Code kommt ja in die Excel-Datei.
Du kannst da im VBA-Editor auf einem Verweis
zur Autocad Type Library verzichten; würd ich aber nicht
machen, weil du dann auch die Autocad-eigenen Schlüsselwörter
(zb. acPaperSpace) nicht verwenden kannst.
Wieso willst Du überhaupt drauf verzichten?

2. zu Set acApp = CreateObject("Autocad.Application")
Das Startet jeweils eine neue Autocad-Instanz.
Wenn dies gewünscht wird OK, ich nehme aber lieber
Set acApp = GetObject(, "AutoCad.Application.17")
Damit greifts Du auf das bereits gestartete Autocad 2008 zu.

3. zu Set MyTable = MyPaperSpace.AddTable(pt, 4, 4, 5, 55)
Um dies nutzen zu können mußt Du erst das Object "MyPaperSize"
zuweisen. zb. mit:
Set MyPaperSpace = acApp.ActiveDocument.PaperSpace

Also Ich habs mal ausprobiert müßte dann funktionieren.

------------------
Gruß Jörn

[Diese Nachricht wurde von yamaha am 20. Feb. 2008 editiert.]

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: 20. Feb. 2008 17: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 Murkel 10 Unities + Antwort hilfreich

Hallo Ines,

ich glaube in deinem Code ist etwas vermischt.

In VB/VBA hast du die Möglichkeit auf die ActiveX Schnittstelle anderer Anwendungen zuzugreifen. Die Schnittstelle stellt Eigenschaften, Methoden, Funktionen und Events zu Verfügung.

In VB erzeugst du mit

Code:
Set acApp = CreateObject("Autocad.Application")

eine neue Instanz der Aktuellen AutoCAD Version. Hast du mehrere Versionen auf einem Rechner kann der "Klassenname" eventuell den Zusatz der Version besitzen (z.B. Autocad.Application.16 bei AutoCAD 2004). Die Klassen kannst du auch im Registierungseditor nachschauen. Dort hat jede Klasse ein "CLSID". Für diese CLSID hat Windows eine Exe oder DLL registriert die Ausgeführt wird wenn eine Instanz angefordert wird.
Bei einigen Programmen willst du aber in der Regel nicht immer eine neue Instanz anlegen sondern eine im Speicher befindliche verwenden.
Code:
Set acApp = GetObject(, "AutoCad.Application")


Dieser Code schaut ob eine Instanz aktiv ist. Wenn diese Methode einen Fehler ergibt (mit On Error abfangen) kannst du mit Createobject eine neue starten.

Ziel des Ganzen ist eine Referenz auf das gewünschte Objekt zu erhalten. Hier wurden schon zwei Methoden erwähnt.
- Late Binding
- Early Binding
Wenn du in der Deklaration angibts "DIM acApp as Object" gibst du nur an das diese Variable ein allgemeines Object aufnehmen soll. Hier ist noch nicht bekannt was das für ein Objekt ist und welche Methoden und Eigenschaften es hat. Wenn du nun ein Objekt erst zur Laufzeit des Programmes zuwweist, spricht man von late Binding, weil der Compiler erst jetzt weiss was es für ein Objekt ist.
Wenn du in der Deklaration angibts "DIM acApp as AutoCAD.Application" gibts du an das es sich um ein Objekt der "Bauart" AutoCAD Application handelt. Das ist aber nur möglich, wenn du vorher dem Compiler den Bauplan gegeben hast. Also unter Verweisen die Referenz zur AutoCAD OBjektbibliothek eingestellt ist. Hier spricht man von early Binding. Der Vorteil ist dann das du schon während des Programmentwurfs auf die zur Verfügung gestellten Methoden zugreifen kannst. Ausserdem sind dem Compiler dann auch Konstanten des Objekte wie "acPaperspace" bekannt. Der Nachteil ist dann jedoch, das der Verweis nur dann korrekt ist, wenn auf dem Rechner wo dein Proggi läuft auch exakt die gleiche Version installiert sein muss. Ist das nicht der Fall, braucht lediglich der alte ungültige Verweis durch den neuen ersetzt werden.

Du kannst auch noch einen Kompromiss eingeben. Du deklarierst die Variablen doppelt.

Code:
'dim acApp as Object
dim acApp as Autocad.application

Im Entwurf arbeitest du mit dem Verweis, wenn dein Proggi fertig ist kommentierst du die Deklaration des exakten Typs aus und öffnest die allegemeine Deklaration.
Konstanten solltest du dann aber selber deklariert haben, da diese nach dem entfernen des Verweises nicht mehr bekannt sind.

Ich hoffe ein wenig Licht ins Dunkle gebracht zu haben und den Zusammenhang verständlich erklärt zu haben.
Ich entschuldige mich schon mal bei Nepumuk für die "unqualifizierte" Ausdrucksweise und Vereinfachung der Dinge 

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

Nepumuk
Mitglied
Entwicklungsleiter


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

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 20. Feb. 2008 18:45    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 Murkel 10 Unities + Antwort hilfreich

Hallo Wilfried,

ich sag ja schon nix mehr. 

Nur ein kleiner Tipp. Die Konstanten sind ja nur Platzhalter für numerische Werte. Die Werte der Konstanten sind im Objektkatalog nachzuschlagen. Und jetzt kommt’s: Wesentlich schneller an ihren Wert kommst du, wenn du die Konstante mit einem vorangestellten Fragezeichen in das Direktfenster kopierst und Enter drückst. Beispiel:

?vbRed
255

Die VB-Konstante vbRed kann also durch ihren Wert 255 ersetzt werden. Damit bist du wieder unabhängig von einem Verweis auf eine Objektbibliothek. Übersichtlicher ist es natürlich dafür eigene Konstanten mit sprechenden Namen zu deklarieren. Übrigens, eigene Konstanten sollten immer in GROSSBUCHSTANBEN geschrieben werden, das macht das ganze noch überschaubarer.

------------------
Gruß
Nepumuk 

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: 20. Feb. 2008 20:21    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 Murkel 10 Unities + Antwort hilfreich

Hallo Nepumuk,
 
Zitat:
Original erstellt von Nepumuk:
Hallo Wilfried,

ich sag ja schon nix mehr.   

Nur ein kleiner Tipp. Die Konstanten sind ja nur Platzhalter für numerische Werte. Die Werte der Konstanten sind im Objektkatalog nachzuschlagen. Und jetzt kommt’s: Wesentlich schneller an ihren Wert kommst du, wenn du die Konstante mit einem vorangestellten Fragezeichen in das Direktfenster kopierst und Enter drückst. Beispiel:

?vbRed
255

Die VB-Konstante vbRed kann also durch ihren Wert 255 ersetzt werden. Damit bist du wieder unabhängig von einem Verweis auf eine Objektbibliothek. Übersichtlicher ist es natürlich dafür eigene Konstanten mit sprechenden Namen zu deklarieren. Übrigens, eigene Konstanten sollten immer in GROSSBUCHSTANBEN geschrieben werden, das macht das ganze noch überschaubarer.



Ich glaube das ich meine Proggi's hin bekomme  
Bei mir erkennt man das, wenn es nicht eine Klasse ist, an Prefixen.
vlst_VariableLocalString
vllo_VariableLocalLong
kgst_KontanteGlobalString
Aber ich glaube Ines braucht die Info.

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

Murkel
Mitglied
CAD-Zeichnerin


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

Beiträge: 20
Registriert: 12.02.2008

AutoCAD 2006 und 2007
Windows XP 32bit
Office 2003

erstellt am: 21. Feb. 2008 09:39    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 Leute,
Ihr seid einfach Spitze! Vielen Dank für Eure Antworten und besonders Dir Wilfried für die verständliche Erklärung der beiden Bindungsarten. Ich glaube es jetzt endlich verstanden zu haben. Alle weiteren Hilfen muß ich erst heute abend ausprobieren. Ich möchte jedenfalls gern ohne Verweise auskommen, da das Programm für andere ist und ich nicht weiß, wie diese Anwender in der Materie drin stecken. Ich meinem Kollegenkreis ernte ich jedenfalls immer verständnislose Blicke, wenn ich ihnen sage, das sie unter Extras einen Verweis setzen sollen. Die Abfrage, ob Autocad bereits gestartet ist und vielleicht im Hintergrund läuft, werde ich auf jeden Fall in mein Programm einbauen. Bis später also!
Gruß Ines

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

Murkel
Mitglied
CAD-Zeichnerin


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

Beiträge: 20
Registriert: 12.02.2008

AutoCAD 2006 und 2007
Windows XP 32bit
Office 2003

erstellt am: 22. Feb. 2008 12:05    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,
ich habe jetzt AutoCAD zum Laufen gebracht dank Eurer Hilfe!
Leider funktioniert die Sache immer noch nicht, aber hier erstmal mein Proggi:

Option Base 1                                  'Datenfeld soll mit 1 beginnen

Dim zeile As Integer
Dim spalte As Integer
Dim z As Integer
Dim s As Integer
Dim Datenfeld() As Variant
Dim strFilename As String

Public Sub CommandButton1_Click()

Exceldaten
Acadtabelle

End Sub

Sub Exceldaten()

    zeile = 4
    spalte = 5

    ReDim Datenfeld(zeile, spalte)

    'Erfassung der Excel-Daten
    For z = 1 To zeile
        For s = 1 To spalte
            Datenfeld(z, s) = ActiveWorkbook.Worksheets(1).Cells(z, s).Value
        Next s
    Next z

End Sub

     
Sub Acadtabelle()

  'On Error Resume Next

  'Angabe, das die Variable acApp ein allg. Objekt aufnehmen soll (Verwendung für late binding)
  'Nutzung wenn das Programm fertig ist und läuft:
  'Dim acApp As Object                                      'Anwendungsobject (AutoCAD)
       
  'Angabe, das die Variable acApp ein Objekt von Autocad ist (Verwendung für early binding)
  'dazu ist aber das Setzen eines Verweises auf Autocad unter Extras notwendig
  'Nutzung in der Entwicklungsphase des Projektes:
  Dim acApp As AutoCAD.AcadApplication      'Verweis auf AutoCAD 2006 Type Libary (für ACAD 2006) notwendig
  Dim acDoc As Object
  Dim MyPaperSpace As AcadPaperSpace
  Dim MyTable As AcadTable
       
  Set acApp = CreateObject("AutoCAD.Application") 
  'neues AutoCAD wird geladen (VB-Code) (Aufruf Zeichnung 1.dwg)
  'Verweis auf AutoCAD/ObjectDBX Common 16.0 Type Libary (fur ACAD 2006) muss gesetzt sein
  'Set acApp = GetObject(, "AutoCAD.AcadApplication")
       
  acApp.Documents.Open ("D:\Person1.dwg")         

  'acApp.Application.WindowState = acNorm              'Autocad-Fenster weder maximieren noch minimieren

  Set acDoc = acApp.ActiveDocument
  Set MyPaperSpace = acApp.ActiveDocument.PaperSpace  'Zuweisung des Objektes PaperSpace zu Autocad
               
  acApp.Visible = True                                'AutoCAD anzeigen
       
  MsgBox "testlauf"

  Dim pt(2) As Double        'Startpunkt (linker oberer Punkt der Tabelle) festlegen
  pt(1) = -650
  pt(2) = 195
 
  acApp.ActiveDocument.ActiveSpace = acPaperSpace    'Layoutbereich aktiv setzen

  'Tabelle zeichnen mit Startpunkt, Zeilenanzahl, Spaltenanzahl, Zeilenhöhe, Spaltenbreite)
  'AddTable benötigt die AutoCAD Focus Control for VBA Type Library
  'diese hat voreingestellten Verweispfad auf AutoCAD 2006, deshalb aus 2007 dahin kopieren
  Set MyTable = acApp.ActiveDocument.PaperSpace.AddTable(pt, 5, 2, 5, 55)

  Dim i As Double, j As Double
    For i = 1 To 5          'für jede Zeile
        For j = 1 To 2      'für jede Spalte
          MyTable.SetCellTextHeight i, j, 3              'Texthöhe = 3
          MyTable.SetCellAlignment i, j, acMiddleLeft    'Textposition = Mitte links innerhalb der Zelle
          'MyTable.SetCellType i, j, acTextCell
          MyTable.VertCellMargin = 0.5                  'horizontaler Abstand Text-Zellenrand = 1
          MyTable.RowHeight = 4
        Next j
    Next i
 
    MyTable.SetText 0, 0, Datenfeld(1, 1)
    MyTable.SetText 1, 0, Datenfeld(1, 2)
    MyTable.SetText 2, 0, Datenfeld(1, 3)
    MyTable.SetText 3, 0, Datenfeld(1, 4)
    MyTable.SetText 1, 1, Datenfeld(2, 1)
    MyTable.SetText 2, 1, Datenfeld(2, 2)
    MyTable.SetText 3, 1, Datenfeld(2, 3)
    MyTable.SetText 4, 1, Datenfeld(2, 4)

    Dim msgString As String
    msgString = MyTable.GetText(0, 0)
    For i = 1 To 5
        For j = 1 To 2
            msgString = msgString & "Row " & i & ", Column " & j & ": " + MyTable.GetText(i, j) & vbCr
        Next j
    Next i

End Sub

Soweit mein Versuch!
Bis zu der Zeile "acApp.ActiveDocument.ActiveSpace = acPaperSpace" ist ja auch alles OK, aber bei der Ausführung der nächsten Zeile erscheint eine Fehlermeldung:
    Laufzeitfehler '-2145320944 (80210010)'  - Automatisierungsfehler
In der Hilfe dazu steht noch: Fehler 440

Schalte ich "On Error Resume Next" davor, erscheint die Fehlermeldung natürlich nicht, allerdings wird trotzdem keine Tabelle gezeichnet. Im Lokalfenster wird mir bis zum Abbruch für MyTable der Wert Nothing angezeigt, obwohl doch bereits früher MyTable as AcadTable deklariert wurde! Laut Objektkatalog ist dem
Compiler auch AcadTable bekannt und die Methode AddTable wird auch von Der IntelliSense vorgeschlagen.
Ich weiss wirklich nicht mehr weiter, ich hab mir schon die ganze Nacht um die Ohren geschlagen!

Habt Ihr eine Idee wo der Fehler liegen könnte? Bis gestern war ich noch guter Dinge!

Gruß Ines

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

yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

erstellt am: 22. Feb. 2008 12:14    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 Murkel 10 Unities + Antwort hilfreich

Hallo Ines,

Code:

Set MyTable = MyPaperSpace.AddTable(pt, 5, 2, 5, 55)


müßte funktionieren
---------------------------------------

Gruß Jörn

[Diese Nachricht wurde von yamaha am 22. Feb. 2008 editiert.]

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: 22. Feb. 2008 15:05    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 Murkel 10 Unities + Antwort hilfreich

Hallo Ines,

damit legst du fest das Datenfelder mit dem Index 1 anstatt 0 beginnen
 

Zitat:
Option Base 1                                  'Datenfeld soll mit 1 beginnen

Als Startpunkt brauchst du einen 3D Punkt
 
Zitat:
Dim pt(2) As Double        'Startpunkt (linker oberer Punkt der Tabelle) festlegen

Richtig wäre
Code:
Dim Pt(0 to 2) as Double
pt(0)= 100 ' Rechtswert
pt(1)= 50  ' Hochwert
pt(2)=0    ' Höhe


Dein Autocad Objekt versuchst du in der falschen Reihenfoge zu erzeugen
Code:
On error resume next
' Versuche eine Instanz zu finden
Set acApp = GetObject(, "AutoCAD.AcadApplication")
if err.number then
   ' Wenn keine da war, eine neue Instanz starten
   Set acApp = CreateObject("AutoCAD.Application") 
end if
on error goto 0

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

Murkel
Mitglied
CAD-Zeichnerin


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

Beiträge: 20
Registriert: 12.02.2008

AutoCAD 2006 und 2007
Windows XP 32bit
Office 2003

erstellt am: 22. Feb. 2008 19:39    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,
es funktioniert endlich! ich bin ja so happy!!!
Jörn, deine Variante reichte leider nicht aus, es muß schon die komplette Zuordnung da sein.
Also "Set MyPaperSpace = acApp.ActiveDocument.PaperSpace". Da hatte ich ja auch noch keine Fehlermeldung.
Wilfried, Deine Tipps habe ich so übernommen, vielleicht lag es ja wirklich daran, das ich den Punkt richtig definieren mußte und die Fehlerroutine einbauen mußte. Allerdings habe ich noch die Deklaration von "i" und "j" von Double in Long geändert, weil ich das noch in der Hilfe gefunden hatte.
Wie ich die ganze Sache allerdings ohne gesetzte Verweise hinkriegen soll, ist mir noch schleierhaft. Gerade der Verweis auf die "AutoCAD Focus Control for VBA Type Library" gestaltete sich schwieriger, weil bei mir die Pfadzuordnung nicht richtig war und auch auf meinem 2.Testrechner hatte ich Probleme damit.
Trotzdem erstmal vielen, vielen Dank, die Unities sind unterwegs!
Gruß Ines

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: 25. Feb. 2008 10:35    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 Murkel 10 Unities + Antwort hilfreich

Hallo Ines,

schön das es geklappt hat. Eigentlich brauchst du nur eine Reference, die auf die Autocad Typbiliothek.

Du kannst in deinem Code beide Varianten vorhalten in dem du mit bedingter Complilierung arbeitest.

Code:
Option Explicit
#Const isWithReference = True

Sub test()
    #If isWithReference = True Then
        Dim exApp As Excel.Application
    #Else
        Dim exApp As Object
    #End If
   
End Sub



Füge den Code mal in ein Modul ein. Wenn isWithReference=true ist brauchst du den Verweis, wenn isWithReference=false ist kannst du den Verweis entfernen.

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

Murkel
Mitglied
CAD-Zeichnerin


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

Beiträge: 20
Registriert: 12.02.2008

AutoCAD 2006 und 2007
Windows XP 32bit
Office 2003

erstellt am: 25. Feb. 2008 12:48    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,
danke für Deinen Tipp! Ich hatte am Wochenende mein ganz persönliches Erfolgserlebnis, das Programm läuft jetzt auch ohne gesetzte Verweise. Ich werde trotzdem Deine Variante probieren, vielleicht läuft das Proggi ja dann etwas schneller. Eine kleine Sache ärgert mich aber noch: Sobald ich mit
Set acApp = CreateObject("Autocad.Application")
eine neue AutoCAD-Instanz erzeuge, wird AutoCAD mit Zeichnung1.dwg gestartet. Diese Zeichnung muß dann erst geschlossen werden und dann wird mit "acApp.Documents.Open ("D:\Person1.dwg")" erst die Zeichnung geladen, die ich eigentlich haben will. Vielleicht hängt das aber auch mit dem Datei-öffnen-Dialog von Nepumuk zusammen.
Kann man AutoCAD irgenwie gleich mit der richtigen Zeichnung starten?
Gruß Ines

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

c.schojer
Mitglied



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

Beiträge: 299
Registriert: 23.05.2007

Autocad 2018

erstellt am: 27. Feb. 2008 20:41    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 Murkel 10 Unities + Antwort hilfreich

Hallo Murkel!
Ein Tipp !
Steuere Autocad nicht über Excel sondern starte Das Programm in Autocad über Excel.
Dann ist das Programm um Welten Schneller!!

Autocad kann sich dann Excel holen und die Notwendigen Daten von Excel Auslesen und die Befehle viel viel Schneller verarbeiten.

Im Forum sollte ein Beispielprogramm von mir enthalten sein!

Mußte mal statische Ergebnisse zeichnen das dauerte vorher fast ne Minute und dann gings in Sekunden!

Mfg Chris

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



Anzeige:Infos zum Werbeplatz >>

Spatial Manager? for AutoCAD CAD APP für GIS, Vermessung und Kartografie, Tiefbau, Datenaustausch

Spatial Manager? für AutoCAD ist ein leistungsstarkes AutoCAD-Plug-In für AutoCAD-Benutzer, die räumliche Geodaten auf einfache, schnelle und kostengünstige Weise importieren, exportieren, umwandeln und verwalten müssen. Dazu gehören viele Funktionen, die in AutoCAD bisher nicht verfügbar waren

Murkel
Mitglied
CAD-Zeichnerin


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

Beiträge: 20
Registriert: 12.02.2008

AutoCAD 2006 und 2007
Windows XP 32bit
Office 2003

erstellt am: 27. Feb. 2008 22:09    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 Chris,
danke für Deinen Tipp. Es geht aber darum, das ein anderer Anwender eine Exceldatei bearbeitet und daraufhin die zugehörigen AutoCAD-Dateien aktualisiert werden.
Gruß Ines

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