| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Automatischer Programmstart (3432 mal gelesen)
|
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 13. Feb. 2008 08:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich hab zwar letzte Nacht bereits diesen Beitrag geschrieben, wahrscheinlich habe ich aber beim Senden einen Fehler gemacht, deshalb hier nochmals mein Problem: Ich habe dank eurer Hilfestellungen in diesem Forum ein VBA-Programm geschrieben, welches mir bestimmte Daten aus einer Exceltabelle ausliest und diese dann in einer AutoCAD Zeichnung in einer Tabelle ausgibt. Hat auch alles geklappt, obwohl ich noch keine Programmiererfahrung habe! Nun möchte ich das Programm und die betreffenden Pläne an einen Anwender weitergeben, der sich aber im ACAD nicht auskennt. Deshalb soll das Programm automatisch starten, wenn die entsprechende Acad-Datei geöffnet wird. Gibt es dafür eine Möglichkeit, ohne das Programm in die Startgruppe einzutragen? Oder muß ich dem Anwender eine Anleitung mitgeben, wie er das Programm in seine Startgruppe einlädt? Das Programm würde ja dann immer geladen werden, wenn er ACAD öffnet und nicht nur bei meinen Plänen. Oder sehe ich das falsch? Ein weiteres Problem ist, das ich nicht weiss, wo der Anwender die Exceldatei auf seinem Rechner speichert und ich so keine konkrete Dateiangabe in meinem Programm machen kann. Gibt es im ACAD eine Datei-Such-Methode ähnlich dem Datei-Suchen-Dialog in Windows? So nun habe ich Euch aber zugetextet, ich hoffe aber meine Probleme so verständlich rüber gebracht zu haben und Ihr könnt mir weiterhelfen. Vielen Dank schonmal. Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002
|
erstellt am: 13. Feb. 2008 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo und Willkommen Ines, Zum Thema Datei suchen schau dir mal diesen Beitrag an. In dem Beispiel geht es um den Datei-Öffnen Dialog, den du dort sicher gebrauchen kannst. Du kannst eine Acad.dvb erstellen, die immer mitgeladen wird, wenn diese in einem Support-Pfad steht. Dort müsstest dann mit dem "BeginOpen"-Event abfragen, um welche Datei es sich handelt und dann wenn nötig deine DVB laden. Habs aber nicht getestet, ob es so funktioniert. Ich würde die DVB in die Startgruppe eintragen lassen und gut is. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 13. Feb. 2008 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Ines, du kannst eine DVB Datei auch in eine Zeichnung einbetten (im VBAMAN-anger). Dann hängen die Funktionen direkt an der Zeichnung. Allerdings einen BeginOpen Event gibt es IMHO nicht. Meines Wissens wird beim Laden einer Zeichnung die AcadDoc.Lsp abgearbeitet. Vielleicht kann man aus einer Kombination von eingebundener DVB und dieser Lisp was machen. Davon abgesehen würde ich das so nicht machen. Ich öffne nie fremde Dateien bei denen man erst die Makros aktivieren muss um sie zu laden. Mit 5 Zeilen ist die Festplatte wieder leer und jungfräulich. Ich würde eine DVB und eine Lisp mitliefern die das Proggi lädt und einen Befehl zur Verfügung stellt, der z.B. ein Formular aus VBA aufruft. Da kannt du dann deinen Pfad und Datei browsen und die Inhalte nach AutoCAD übertragen. 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 |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002
|
erstellt am: 13. Feb. 2008 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hi, Das BeginOpen und Endopen läuft über die Events im AutoCAD. Aus der Hilfe: EndOpen Event Triggered immediately after AutoCAD finishes opening an existing drawing. See Also | Example Signature object.EndOpen(Filename) object Application An object expression that evaluates to a valid container object. In this case, the only valid container is the application. Filename String The name of the file being opened. Remarks The EndOpen event follows the BeginOpen event after AutoCAD completes the opening of an existing drawing. No events will be fired while a modal dialog is being displayed. Habs aber selber noch nie benutzt und werde es auch nicht tun. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 13. Feb. 2008 12:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, Hallo Wilfried, danke für Eure schnellen Antworten. Ich werde mal heute nacht darüber tüfteln, am Tage muß ich leider arbeiten und meine Familie versorgen. Es klingt jedenfalls alles recht kompliziert, da ich in Bezug auf Programmieren in jeder Hinsicht ein Newcomer bin und mich von Codezeile zu Codezeile hangel. Carsten, den Datei-öffnen-Dialog werde ich versuchen nachzuvollziehen, dazu aber gleich eine Frage vorweg: Da dies ein VB-Programm ist, wie stelle ich zu VB im ACAD-VBA die Verbindung her, muß ich da einen besonderen Funktions- aufruf starten? Ich hatte mir das mit dem automatischen Start etwas einfacher vorgestellt: Wenn ich in ACAD eine Exceltabelle als OLE-Objekt einfüge, wird diese doch auch mit Excel verknüpft und bei jedem Mal, wenn ich diese Zeichnung öffne, fragt mich ACAD selbständig, ob die Tabelle aktualisiert werden soll oder nicht. Und genau so eine Routine wollte ich in mein Programm einfügen. Aber wahrscheinlich greife ich da nach den Sternen. Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 14. Feb. 2008 12:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich hab mir gestern mal die Tipps genauer angeschaut. Ich hatte in meinem jugendlichen Leichtsinn gehofft, das es eine Funktion gibt, die im Hintergrund nach dem Speicherort der Exceldatei sucht, diesem dann in eine Variable schreibt und ich mit dieser Variable den Excelaufruf starten kann. Der Anwender sollte also keine Dialogboxen oder ähnliches sehen. Hat jemand Ahnung wie diese OLE-Verknüpfungen im ACAD gelöst sind? Vielleicht muß ich doch die ganze Sache von der Excelseite aus betrachten und das Pferd anders aufzäumen: Anwender startet Excelmappe, wenn er eine bestimmte Zelle anklickt, wird die zugehörige ACAD-Datei geöffnet (wobei auch hier die Frage nach dem Speicherort steht) und einige Zellen werden als Tabelle in die ACAD-Zeichnung übernommen. Kann man das so machen? Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 14. Feb. 2008 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Ines, so langsam versteh ich was du machen willst. Einige Restriktionen sollten schon da sein. Das mit dem automatischen Suchen nach einer Datei geht ja ins Uferlose. Wenn da noch im Netzwerk gesucht werden soll. AutoCAD hat ja auch Supportpfade in denen es sucht. Da gibt es schon Funktionen (programmierte) die In Pfaden suchen. Dann hast du aber immer noch das Problem das der Anwender zwei Versionen von deinen Dateien hat. Ich würde es so machen, dass die Exceldatei und die DWG Datei im gleichen Ordner sein müssen. Ausserdem sollte der Name aus einer Konvention hervorgehen (z.B. Info.xls => Info.dwg) Eine weitere Variante wäre in deiner Exceldatei mit VBA zu arbeiten. Dieses Modul erzeugt dir eine neue DWG mit den notwendigen Daten. Ich habe zwar verstanden das du einige Daten aus Excel in die DWG schreiben willst, aber den Sinn habe ich nicht verstanden. Vielleicht erklärst du mal was du insgesamt erreichen willst. Vielleicht gibt es ja andere Lösungsansätze... 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 |
Oliver_01 Mitglied
Beiträge: 14 Registriert: 30.09.2002
|
erstellt am: 14. Feb. 2008 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo, zum Thema Autostart von vba-Dateien gibt die Acad-Hilfe folgendes her (leider nur in Englisch): acad.dvb — Automatically Load a VBA Project The acad.dvb file is useful if you want to load a specific VBA project that contains macros you want each time you start AutoCAD. Each time you start a new AutoCAD drawing session, AutoCAD searches for the acad.dvb file and loads it. If you want a macro in your acad.dvb file to run each time you start a new drawing or open an existing one, add the following code to your acaddoc.lsp file: (defun S::STARTUP() (command "_-vbarun" "updatetitleblock") ) The project name in the example is updatetitleblock. Gruß Oliver
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 14. Feb. 2008 13:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, ich versuch mich mal verständlicher auszudrücken: Ich habe eine Exceldatei mit 260 Zeilen. Zu jeder dieser Zeilen wird eine AutoCAD-Datei erstellt. In jeder dieser Zeichnungen ist ein Schema mit AutoCAD gezeichnet. Zusätzlich soll in jeder Zeichnung die entsprechende Excelzeile als Tabelle dargestellt werden. Leider sind die Einträge in der Exceltabelle nicht statisch, sondern werden immer mal wieder geändert. Das soll sich natürlich auch auf die AutoCAD-Pläne auswirken und die dort befindliche Tabelle soll automatisch geändert werden. Wenn ich mit AutoCAD-Bordmitteln eine Exceltabelle als OLE-Objekt einfüge, fragt mich AutoCAD bei jedem Öffnen, ob ich die verknüpften Objekte aktualisieren möchte oder nicht. Allerdings wird keine Fehlermeldung ausgegeben, wenn die Exceldatei nicht gefunden wurde, sondern lediglich die Aktualisierung der Tabelle abgebrochen. Dies gefällt mir nicht, ich habe nach einer Möglichkeit gesucht, das die Datei im Hintergrund selbständig gesucht wird. Aber Du hast Recht, wenn ich noch ein eventuelles Netzwerk in Betracht ziehe, dann wird die Geschichte zu aufwändig. Also werde ich zumindest einen gemeinsamen Speicherordner vorgeben. Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 14. Feb. 2008 13:51 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 14. Feb. 2008 17:06 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Ines, hier ist mal ein Programmcode mit dem du ab einem Startordner nach einer Datei suchen kannst.
Code: Sub SucheDatei() Debug.Print DateiSuche("C:\temp", "Suchmich.txt") End SubFunction DateiSuche(vlst_Root As String, vlst_Datei As String) As String ''' !!! Verweis auf Microsoft Scripting setzen !!! ''' Dim fso As FileSystemObject Set fso = New FileSystemObject Dim RootFolder As Folder Dim SubFolder As Folder ' Ist die Pfadangabe mit abschliessenden \ If Right(vlst_Root, 1) <> "\" Then vlst_Root = vlst_Root & "\" End If Debug.Print "Suche in Ordner: " & vlst_Root ' Ist die Datei im Verzeichnis vorhanden If fso.FileExists(vlst_Root & vlst_Datei) Then DateiSuche = vlst_Root & vlst_Datei Exit Function End If ' Springe in die Unterordner und suche da Set RootFolder = fso.GetFolder(vlst_Root) For Each SubFolder In RootFolder.SubFolders ' Der jeweilige Unterordner ist wieder der Ausgang für die Suche ' Die eigene Funktion wird wieder (rekursiv) aufgerufen und durchsucht diesen Ordner DateiSuche = DateiSuche(SubFolder.Path, vlst_Datei) If DateiSuche <> "" Then Exit Function End If Next End Function
Was hast du denn für einen Programmcode um die Tabelle aus Excel nach AutoCAD zu übertragen ? 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
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 15. Feb. 2008 09:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, danke für Deine Hilfe. Kleine Frage dazu: Was meinst Du mit "Verweis auf Windows Scripting setzen" oder ist das nur der Kommentar zu der Zeile darüber und der Verweis ist mit der Funktion Dateisuche erledigt? Anbei mein bisheriger Code um die Tabelle zu übertragen: Sub Exceltabelle_übertragen() 'ExcelDaten auslesen Dim XL1 As Object 'Variable für Verweis auf Excel-Datei Dim XLProg As Object 'Variable für Verweis auf Excel-Applikation Dim zeile As Integer Dim spalte As Integer Dim z As Integer Dim s As Integer Dim Datenfeld() As Variant zeile = 4 spalte = 25 ReDim Datenfeld(zeile, spalte) 'Erfassung der Excel-Daten Set XLProg = CreateObject("excel.application") Set XL1 = XLProg.Workbooks.Open("*.xls") For z = 0 To zeile For s = 1 To spalte Datenfeld(z, s) = XL1.Worksheets(1).Cells(z, s).Value Next s Next z XLProg.Quit 'Excel-Programm beenden Set XL1 = Nothing 'Verweis auf Tabelle freigeben Set XLProg = Nothing 'Verweis auf Anwendung freigeben Dim MyPaperSpace As IAcadPaperSpace Set MyPaperSpace = ThisDrawing.PaperSpace Dim pt(2) As Double 'Startpunkt (linker oberer Punkt der Tabelle) festlegen pt(0) = -660 pt(1) = 195 Dim MyTable As AcadTable 'Tabelle zeichnen mit Startpunkt, Zeilenanzahl, Spaltenanzahl, Zeilenhöhe, Spaltenbreite) Set MyTable = MyPaperSpace.AddTable(pt, 25, 2, 5, 55) Dim i As Double, j As Double Dim col As New AcadAcCmColor For i = 0 To 24 'für jede Zeile For j = 0 To 1 '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(3, 2) MyTable.SetText 1, 0, "Kapitel" MyTable.SetText 2, 0, "Gebäudekostenstelle" MyTable.SetText 3, 0, "Ordner" MyTable.SetText 4, 0, "Anlagentyp" MyTable.SetText 1, 1, Datenfeld(3, 3) MyTable.SetText 2, 1, Datenfeld(3, 4) & Datenfeld(3, 5) MyTable.SetText 3, 1, Datenfeld(3, 6) MyTable.SetText 4, 1, Datenfeld(3, 7) Dim msgString As String msgString = MyTable.GetText(0, 0) For i = 0 To 24 For j = 0 To 1 msgString = msgString & "Row " & i & ", Column " & j & ": " + MyTable.GetText(i, j) & vbCr Next j Next i End Sub Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 15. Feb. 2008 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Zitat: ... Was meinst Du mit "Verweis auf Windows Scripting setzen" oder ist das nur der Kommentar zu der Zeile darüber und der Verweis ist mit der Funktion Dateisuche erledigt? ...
Du musst unter Extras/Verweise Microsoft Sripting Runtime auswählen. Der Compiler kennt sonst das Objekt FileSystemObject nicht. Diese Einstellung kann man im Code nicht vornehmen. 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
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 15. Feb. 2008 13:50 <-- editieren / zitieren --> Unities abgeben:
|
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 15. Feb. 2008 17:59 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Wilfried, Zitat: Du musst unter Extras/Verweise Microsoft Sripting Runtime auswählen. Der Compiler kennt sonst das Objekt FileSystemObject nicht. Diese Einstellung kann man im Code nicht vornehmen
Das kann ich so nicht stehen lassen, denn auch das FileSystemObject-Objekt lässt sich per Late-Binding erstellen. Beispiel: Code: Public Sub Wilfried() Dim objFSO As Object, objDrive As Object Set objFSO = CreateObject("Scripting.FileSystemObject") For Each objDrive In objFSO.Drives If objDrive.IsReady Then MsgBox objDrive.SerialNumber Next End Sub
------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 16. Feb. 2008 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Nepumuk, Zitat: .. Das kann ich so nicht stehen lassen, denn auch das FileSystemObject-Objekt lässt sich per Late-Binding erstellen. ...
Stimmt. Aber im Beispiel ist es anders und muss von daher eingestellt werden. Ganz abgesehen von Vor- oder Nachteilen von early- oder latebinding ist es für einen Anfänger auf jeden Fall leichter mit dem Verweis zu arbeiten. So kann der Objekttyp sauber deklariert werden und dadurch steht die "Eingabehilfe" mit Methoden und Eigenschaften zur Verfügung. Wilfried
------------------ 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
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 16. Feb. 2008 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Wilfried, hat natürlich was, auf die Intelsense zugreifen zu können. Aber wenn du das Programm auf einem anderen Rechner laufen lassen willst, auf dem sich eine andere Version der DLL befindet, oder du einen Update lädst bei dem sich Version ändert, dann sind die Verweise ungültig und du bekommst ganz eigenartige Fehlermeldungen . In größeren Foren kommen jede Woche mehrere Anfragen nur deswegen. Außerdem, wozu gibts die Hilfe. ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 18. Feb. 2008 00:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, hallo Nepumuk, vielen, vielen Dank für Eure Hilfe. Allerdings muß ich gestehen, daß ich nicht mehr so richtig dahintersteige. Deshalb habe ich jetzt doch versucht, das ganze von Excel aus zu betrachten, da es im Excel leichter ist, den Dateiöffnen-Dialog aufzurufen. Dies ist mir auch gelungen: Sub DateiOeffnen() Dim MyFileName As Variant Dim WildCard$, AnzeigeText$, MyDir$ MyDir = "" 'durch "" wird das aktuelle Verzeichnis des aktuellen Laufwerks angezeigt AnzeigeText = "AutoCAD-Dateien" WildCard = "*.dwg)" 'Speicherort der *.dwg-Datei (kompletter Verzeichnispfad) wird in Variable MyFileName geschrieben: MyFileName = Application.GetOpenFileName(AnzeigeText & "(" & WildCard & ",)") If MyFileName = "Falsch" Then Exit Sub Dim acApp As Object 'Anwendungsobject Dim acDoc As Object 'Dokumentobject 'Setzen des Aktuellen Dokumentes und öffnen der Datei Set acApp = CreateObject("Autocad.Application") Set acDoc = acApp.ActiveDocument acApp.Documents.Open (MyFileName) End Sub Leider öffnet er mir anschließend nicht Autocad, gibt aber auch keine Fehlermeldung aus, sondern beendet das Programm stillschweigend. Muß ich eventuell auch im Excel den Verweis auf Autocad setzen? ich hoffte dies umgehen zu können. Ich habe auch schon in diversen Excel-Foren gesucht, aber die haben keinen Bezug zu Autocad. Ich hoffe, ich fall Euch nicht zu sehr auf die Nerven und bitte Euch nochmals um Hilfe! Gruß Ines
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 18. Feb. 2008 00:56 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Ines, schon mal das versucht? Code: Set acApp = CreateObject("Autocad.Application") acApp.Visible = True Set acDoc = acApp.ActiveDocument
Ich kanns nicht testen, ich hab kein AutoCAD. P.S. Öffnendialog geht auch ohne Excel. Code: Option ExplicitPrivate Declare Function GetFileNameFromBrowseW Lib "shell32.dll" Alias "#63" ( _ ByVal hwndOwner As Long, _ ByVal lpstrFile As Long, _ ByVal nMaxFile As Long, _ ByVal lpstrInitialDir As Long, _ ByVal lpstrDefExt As Long, _ ByVal lpstrFilter As Long, _ ByVal lpstrTitle As Long) As Long Private Declare Function GetFileNameFromBrowseA Lib "shell32.dll" Alias "#63" ( _ ByVal hwndOwner As Long, _ ByVal lpstrFile As String, _ ByVal nMaxFile As Long, _ ByVal lpstrInitialDir As String, _ ByVal lpstrDefExt As String, _ ByVal lpstrFilter As String, _ ByVal lpstrTitle As String) As Long Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" ( _ ByRef lpVersionInformation As OSVERSIONINFO) As Long Private Declare Function GetActiveWindow Lib "user32.dll" () As Long Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Private Const VER_PLATFORM_WIN32_NT = 2 Public Sub prcOpenFile() Dim strFilename As String strFilename = Space$(255) Const INITIAL_PATH = "D:\Eigene Dateien\" If IsWinNT Then GetFileNameFromBrowseW GetActiveWindow, _ StrPtr(strFilename), 255, StrPtr(INITIAL_PATH), _ StrPtr("dwg"), StrPtr("AutoCAD-Files (*.dwg)" & Chr$(0) & "*.dwg" & Chr$(0)), _ StrPtr("Open File") Else GetFileNameFromBrowseA GetActiveWindow, _ strFilename, 255, INITIAL_PATH, _ "dwg", "AutoCAD-Files (*.dwg)" & Chr$(0) & "*.dwg" & Chr$(0), "Open File" End If strFilename = Trim$(strFilename) strFilename = Left$(strFilename & Chr$(0), InStr(strFilename, Chr$(0)) - 1) If strFilename <> "" Then MsgBox strFilename Else MsgBox "Abbrechen gedrückt" End If End Sub Private Function IsWinNT() As Boolean Dim udtOS_Info As OSVERSIONINFO udtOS_Info.dwOSVersionInfoSize = Len(udtOS_Info) GetVersionEx udtOS_Info IsWinNT = udtOS_Info.dwPlatformId = VER_PLATFORM_WIN32_NT End Function
------------------ Gruß Nepumuk [Diese Nachricht wurde von Nepumuk am 18. Feb. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 18. Feb. 2008 13:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Nepumuk, super dieser Dateiöffnen-Dialog funktioniert auch unter meinem Autocad. Große Klasse, danke! Der 2.Tipp brachte mich auch weiter: acApp.Visible = True hat gefehlt, allerdings muß ich Autocad nun noch beibringen, das es mit maximiertem Fenster öffnet und nicht verkleinert. Vielleicht fällt mir ja heute abend was dazu ein. Dir schieb ich erstmal 10Unities zu! Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 18. Feb. 2008 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für Murkel
Hallo Ines, das AutoCAD-Fenster hat bestimmt eine Windowstate-Eigenschaft. Versuch es mal so: acApp.Visible = True acApp.WindowState = vbMaximizedFocus Wenn AutoCAD keine VB-Konstanten kennt, oder diese keinen zulässigen Wert hat, dann musst du im Objektkatalog nachschauen, welche Werte / Konstanten da zulässig sind. ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Murkel Mitglied CAD-Zeichnerin
Beiträge: 20 Registriert: 12.02.2008 AutoCAD 2006 und 2007 Windows XP 32bit Office 2003
|
erstellt am: 19. Feb. 2008 23:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Nepumuk, danke für Deine Hilfe. Es funktioniert. Eine andere Möglichkeit ist: acApp.Application.WindowState = acMax Ich hänge zwar schon wieder fest, aber das ist ein neues Thema! Deshalb nochmals Danke an alle! Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|