| |
 | 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 neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Aufruf Dateieigenschaften in VBA (7165 mal gelesen)
|
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 21. Mrz. 2006 19:12 <-- editieren / zitieren --> Unities abgeben:         
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 21. Mrz. 2006 19:19 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo wwwilli, Such mal im VBA-Forum nach "Common Dialog". Dort steht beschrieben, wie es mit dem Dateiöffnen-Dialog geht(funktioniert leicht abgewandelt auch als speichernunter). Gruß, Carsten P.s. Nicht Cross-Posten. Wird nicht gern gesehen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 21. Mrz. 2006 19:31 <-- editieren / zitieren --> Unities abgeben:         
|
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 21. Mrz. 2006 19:40 <-- editieren / zitieren --> Unities abgeben:         
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 21. Mrz. 2006 19:43 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo wwwilli, Die Lizenz brauchst du nur beim erstellen des Fromulars, danach nicht mehr. Dafür reicht auch eine der Express-Editionen auf deinem Rechner (Sind im Moment glaube ich noch gratis bei MS). Danach kannst das überall nutzen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 21. Mrz. 2006 20:04 <-- editieren / zitieren --> Unities abgeben:         
Hallo, jetzt habe ich mir das COMMON da zwar geholt, aber so tief wollte ich eigentlich nicht einsteigen. Ich suche VBA-Anweisungen, wie sie z.B. in WORD heißen: Application.Dialogs(wdDialogFileSummaryInfo).Show '86 Application.Dialogs(wdDialogFileSaveAs).Show '84 oder auch Application.Run "Dateieigenschaften" Application.Run "DateiSpeichernUnter" oder zur Not AppActivate "Microsoft Word" SendKeys "%(DG)", True SendKeys "%(DU)", True Das kann doch in ACAD-VBA nicht soooo schwierig sein, dass ich erst das Betriebssystem umdressieren muss. Oder? MfG
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: 21. Mrz. 2006 20:07 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 21. Mrz. 2006 20:19 <-- editieren / zitieren --> Unities abgeben:         
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Mrz. 2006 09:21 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 22. Mrz. 2006 09:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo, das Problem mit diesem Aufruf, z.B. ThisDrawing.SendCommand ("_DWGPROPS") ist meines Erachtens, dass _DWGPROPS dann nicht im richtigen zeitlichen Makrozusammenhang oder gar nicht (Fehler bei Ausführung) abgearbeitet wird, ebenso _SAVEAS. Funktioniert also nicht wirklich. Oder? Auch die Unterbringung der ACAD-Anweisungen in einem benutzerdefinierten Befehl, gemeinsam mit dem VBA-Makro (das dann die Ergebnisse der Speicherung usw. noch weiter auswerten soll), hat es nicht gebracht: ^C^C_DWGPROPS _SAVEAS _-vbarun modulname.makroname Funktioniert nicht; weiß auch nicht, warum. :-(( Auch mit Sendkeys werden die Dialoge gar nicht oder erst nach Beendigung des sonstigen VBA-Makros ausgeführt, das ist dann sinnlos. Irgendwelche Zeitschleifen o.ä. haben auch nicht geholfen. MfG
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: 22. Mrz. 2006 10:03 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo, das liegt daran das du ein Formular modal geöffnet hast. Wenn du es mit "form.show" oder "form.show 1" aufrufts ist es modal. In diesem Fall wartet AutoCAD mit der Programmausführung bis dein Formular geschlossen ist und arbeitet dann deine Sendcommands ab. Vermeiden kannst du das wenn du die Form nonmodal lädst (form.show 0) oder die Form vor dem Sendcommand verbergen (form.hide). Dann klappt es auch mit dem Speichern. Stelli
------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 22. Mrz. 2006 11:34 <-- editieren / zitieren --> Unities abgeben:         
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Mrz. 2006 19:24 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo, Zitat: Original erstellt von wwwilli: Verstehe ich nicht. Habe keine Formulare.
Ich auch nicht ??? Geht ganz normal
Code:
Sub savetest() MsgBox "vor speichern" ThisDrawing.SendCommand "_saveas " MsgBox "Nach speichern" End Sub
Stelli
------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 23. Mrz. 2006 11:34 <-- editieren / zitieren --> Unities abgeben:         
Ja, danke, jetzt geht es. Das Leerzeichen hinter dem Befehl hat gefehlt. DAS LEERZEICHEN !!! Danke, danke. 10 Punkte für alle. So einfach kann das Leben sein. By the way, kann ich fürs Saveas einen neuen Pfad oder gar einen Dateinamen voreinstellen/vorschlagen? MfG 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: 23. Mrz. 2006 12:11 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 23. Mrz. 2006 12:29 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo, Dann brauchst du kein Sendcommand wenn du den Dateinamen schon hast.
Code:
ThisDrawing.SaveAs "C:\TEMP\MIST.DWG", acNative
Use a space or the ASCII carriage return character (vbCr) at the end of the command string to end the command; this is equivalent to pressing ENTER on the keyboard.
Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 23. Mrz. 2006 20:54 <-- editieren / zitieren --> Unities abgeben:         
Das mit der ersten Variante hat den Nachteil, dass ich sie nicht kapiere. Du siehst ja, dass ich mich Taste für Taste vorarbeiten muss... In anderen Anwendungen kann man das Ganze mit dem SpeichernUnter-Dialog mit unverbindlichem "Vorschlag" eines Pfades und Namens ziemlich kurz halten, z.B. in Excel: x = Application.GetSaveAsFilename(initialFilename:=y, FileFilter:=z) ActiveWorkbook.SaveAs x Oder in Word: Set w = Application.Dialogs(wdDialogFileSaveAs) w.Name = y w.Show So etwa würde ich mir das auch in ACAD-VBA vorstellen. Dann bräuchte ich nicht so viele neue Tasten zu lernen. MfG 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: 23. Mrz. 2006 22:00 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo Willi, Folgender Codeausschnitt muss in einem Formular stehen, wo nur das CommonDialog-Steuerelement eingefügt wurde: CommonDialog1.DialogTitle = "Titel" CommonDialog1.flags = cdlOFNOverwritePrompt + cdlOFNNoChangeDir CommonDialog1.Filter = "DXF Files (*.dxf)|*.dxf" 'Filtername CommonDialog1.CancelError = True CommonDialog1.FileName = "" 'Dateinamenvorgabe CommonDialog1.InitDir = "S:\DXF" 'Pfadvorgabe CommonDialog1.ShowSave 'Ruft Speichernunter-Dialog auf If Err = cdlCancel Then Exit Sub DXF_File = CommonDialog1.FileName 'Übergabe dateiname von Dialog ThisDrawing.SaveAs (DXF_File), acR12_dxf 'Speichern als DXF Release12 Damit sollte das speichern klappen. Ist doch nicht so schwierig, oder?!  Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 23. Mrz. 2006 22:25 <-- editieren / zitieren --> Unities abgeben:         
|
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Mrz. 2006 22:48 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hi wwwilli, vergiss' sowas wie Application.Dialogs() unter Acad/VBA, dieses 'Feature' ist ein Office-Kind. Ich behaupte aber mal mit API ginge das vielleicht, aber das sieht dann noch schlimmer aus als mit dem Common-Dings. Also quick'n dirty wenn's nicht kompliziert sein soll, verweise/binde zB. Excel ein, borg' dir von da die Dialogs() und setz Excel wieder auf nothing, wenn du hast was du wolltest. Gruss Nancy 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: 24. Mrz. 2006 10:34 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo, Zitat: Original erstellt von wwwilli: Das mit der ersten Variante hat den Nachteil, dass ich sie nicht kapiere. Du siehst ja, dass ich mich Taste für Taste vorarbeiten muss...
Die Antworten sollten auf keinen Fall irgendwie negativ rüberkommen. Wenn ja, dann sorry, war auf keinen Fall so gemeint. Zitat: Original erstellt von wwwilli: Hallo, weiß jemand, wie in einem VBA-Makro in ACAD die Dialoge "Dateieigenschaften" und "Dateispeichernunter" (oder ähnlich) aufgerufen werden können? MfG
Es ist jedoch schwer eine Lösung vorzuschlagen da du nicht geschrieben hast was du machen willst. Schilder doch mal deine Aufgabe, ansonsten kann ich mir keinen Reim darauf machen was deine Aufgabe ist. Formulare verwendest du nicht ?! Übringens der Commondialog ist dazu gedacht den Windows Öffnen/Speichern Dialog aufzurufen. Er ist ein OCX und kann unter Werkzeuge mit eingeblendet werden (TR in der Werkzugpalette, Zusätzliche Komponenten) Dieses OCX kann man dann wie eine Textbox auf ein Formular ziehen. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 27. Mrz. 2006 11:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo, mein Makro soll bei Bedarf die Standard-Anweisung "Speichern Unter" ersetzen. Es soll erst die Dateieigenschaften abfragen, daraus, wenn möglich Rückschlüsse ziehen, in welchen Ordner das neue Bild gehören könnte und einen Vorschlag machen, wie es (nach vorgegebener Systematik) heißen könnte. Dann Speichern Unter ausführen (mit dennoch freier Wahl von Namen und Ordner). Und dann aus Dateiinfos und Namen und Pfad einen Eintrag in eine Übersichtsdatei für jeden Ordner absetzen. In Word, XL und PP habe ich Ähnliches mittlerweile hinbekommen, in ACAD bin ich mit dem ...sendcommand "_saveas " auch mit Leerzeichen nicht wirklich glücklich, da ich Pfad und Namen nicht vorschlagen und dennoch frei wählbar machen kann. Sonst könnte ich ja gleich in VBA saveas ausführen. Ohne Scham gebe ich zu, dass mir vieles beim Programmieren in VBA tatsächlich verborgen bleibt, da ich das nicht richtig gelernt habe und mich neben meiner Arbeit als Bauingenieur nur minutenweise mit Informatik beschäftigen kann. Gelernt habe ich ab 1976 Progranmmieren mit Fortran IV und anderen tollen Sachen, aber das bringt mich in VBA über eine konfuse, aber funktionierende Programmstruktur nicht hinaus. Die mir zur Verfügung stehende Hilfefunktionen finde ich oft skandalös unhilfreich. Ich bin oft auf übertragbare Beispiele angewiesen, um sie angepasst zu übernehmen. Bisher ging das eigentlich auch ganz gut, und meine Makros funktionieren zu meiner Zufriedenheit; an diesem Punkt komme ich aber lange nicht weiter. MfG
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 27. Mrz. 2006 12:08 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Servus Willi, Der Ansatz von Carsten war doch schon ganz gut und treffend. Du solltest Dich mit dem CommonDialog auseinandersetzen oder zumindest ihn richtig abkupfern können. So hab's zumindest ich gemacht ;-) Als erstes erstellst Du Dir in VBA unter "Extras" - "Verweise" einen Verweis zu CommonDialog indem Du "Microsoft Common Dialog Control..." anklickst. Danach erstellst Du einfach mal ein neues Formular mittels "Einfügen" - "UserForm". Keine Angst, Du mußt ja jetzt nicht zum Formularprogrammierer werden, Du brauchst es nur um den Common Dialog anzusprechen. In Deiner Werzeugsammlung (mit der man Befehlschaltflächen etc. reinbasteln kann) sollte nun zusätzlich der Button "CommonDialog" hinzugekommen sein. Falls nicht, dann füge es mit "Extras" "Zusätzliche Steuerelemente" dazu. Dieses Steuerelement ziehst Du einfach in Dein leeres Formular. So, und jetzt öffnest Du den Code zum Formular (rechte Maustaste, "Code anzeigen") und kopierst den Code von Carsten (den Du sinnvollerweise an Deine Bedürfnisse anpasst) da rein. (ich hab's ein bischen abgewandelt) Zitat:
Code:
Private Sub UserForm_Activate()CommonDialog1.DialogTitle = "Titel" CommonDialog1.flags = cdlOFNOverwritePrompt + cdlOFNNoChangeDir CommonDialog1.Filter = "DXF Files (*.dxf)|*.dxf" 'Filtername CommonDialog1.CancelError = True CommonDialog1.FileName = "" 'Dateinamenvorgabe CommonDialog1.InitDir = "S:\DXF" 'Pfadvorgabe CommonDialog1.ShowSave 'Ruft Speichernunter-Dialog auf If Err = cdlCancel Then Exit Sub DXF_File = CommonDialog1.FileName 'Übergabe dateiname von Dialog ThisDrawing.SaveAs (DXF_File), acR12_dxf 'Speichern als DXF Release12 End Sub
Und jetzt kannst Du dieses Formular aus einem Modul mit "call" aufrufen. Bei mir hat's immer ganz prima so geklappt :-) Liebe Grüße vom Hübi ------------------ Schaun ma mal, dann seng ma scho....  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 27. Mrz. 2006 13:18 <-- editieren / zitieren --> Unities abgeben:         
Hallo, läuft schon nicht. In Verweise gibt es bei mir "Microsoft Common Dialog Control..." nicht. Hätte das nach Installation des CommonControl-Links von Carsten auftauchen sollen? Oder muss ich das noch suchen? Oder heißt es vieleicht anders? Funktioniert das Ganze dann gegebenenfalls auch bei anderen Benutzern? Oder muss das dann wiederholt werden? Und beim nächsten ACAD-Update? Bei Nicht-Standard-Methoden sollte man vielleicht lieber die Finger weg lassen... MfG
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 27. Mrz. 2006 13:38 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo Willi, Zitat: läuft schon nicht. In Verweise gibt es bei mir "Microsoft Common Dialog Control..." nicht. Hätte das nach Installation des CommonControl-Links von Carsten auftauchen sollen? Oder muss ich das noch suchen? Oder heißt es vieleicht anders?
Falls Du es in der Liste nicht finden solltest, dann gehe auf "Durchsuchen" und such die Datei: "...\Windows\system32\Comdlg32.ocx". Leider weiß ich nicht, wann die Datei auf den Rechner installiert wird - ich vermute mal bei der Windows - Installation oder spätestens, wenn man Office installiert. Zitat: Funktioniert das Ganze dann gegebenenfalls auch bei anderen Benutzern?
Ja! Zitat: Und beim nächsten ACAD-Update?
Ich sag mal: wenn Du Dir da jetzt Sorgen machst, solltest Du die Finger von VBA in AutoCAD lassen!!! Bei einem bin ich mir allerdings ganz sicher: Wenn uns der Himmel auf den Kopf fallen wird, funktionieren auch die CommonDialogs nicht mehr! Zitat: Bei Nicht-Standard-Methoden sollte man vielleicht lieber die Finger weg lassen...
Microsoft Common Dialog IST Standard und nichts exotisches und einer der einfachsten Wege das zu erreichen, was Du hier geschildert hast. Leider lese ich aus Deinen Beiträgen einen gewissen Pessimismus und den wird kein noch so kompetenter und gut gemeinter Tipp aus diesem Forum überwinden können sondern nur Du selbst. Mein Tip: Wenn Du möchtest, dass man Dir hilft, lass Deinen Frust nicht hier im Forum aus. Nix für ungut Hübi
------------------ Schaun ma mal, dann seng ma scho....  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 27. Mrz. 2006 14:00 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Huebi: Leider lese ich aus Deinen Beiträgen einen gewissen Pessimismus...
Nicht doch... wer kommt denn auf sowas? In Word-VBA habe ich gut 10 Minuten gebraucht, um zu kriegen, was ich wollte, hier bin ich nach 10 Tagen noch nicht weiter. Ein Schelm, wer Schlechtes dabei empfände... "Windows\system32\Comdlg32.ocx" ist da, lässt sich aber unter Verweise nicht hinzufügen: "Verweis auf angegebene Datei kann nicht hinzugefügt werden." Keine weiteren Infos vorhanden. :-)))) Heißt das veilleicht in der Liste "Verfügbare Verweise" doch anders und ist schon da? Da sehe ich überschläglich 200 bis 300 Einträge, von denen es vielleicht einer sein könnte. MfG vom immer optimistischen wwwilli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 27. Mrz. 2006 14:12 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Zitat: Nicht doch... wer kommt denn auf sowas? In Word-VBA habe ich gut 10 Minuten gebraucht, um zu kriegen, was ich wollte, hier bin ich nach 10 Tagen noch nicht weiter. Ein Schelm, wer Schlechtes dabei empfände...
Naja, man sollte sich im klaren sein, dass AutoCAD und VBA ein bischen was anderes ist als ein Tastaturrecorder in M$-Office (hach, was bin ich heute aber bissig ). Die CommonDialogs stehen im Normalfall in dieser von Dir beschriebenen schier endlosen Liste (die übrigens nicht das geringste mit AutoCAD sondern vielmehr mit M$-VBA zu tun hat). Der genaue Name lautet bei mir (was bei Dir allerdings ganz anders sein kann) "Microsoft Common Dialog Control 6.0 (SP3)". Keine Ahnung, ob das uptodate ist, es funktioniert zumindest (und das nicht nur bei mir). Falls Du es nicht finden kannst, kann ich Dir auch nicht weiterhelfen (Bin ja kein Programmierer oder Softwareprofi). Doch allen, die da mehr Ahnung haben solltest Du in Deinem Profil ein paar Zusatzinfos über Deine eingesetzte Hard- und Software angeben (könnte ja sein, dass gewisse Dinge bei älteren Versionen nicht unterstützt werden). So long, viel Erfolg beim "Speichern unter" Hübi P.S. Vielleicht gibt's ja im Officepaket bald ein CAD-Programm
------------------ Schaun ma mal, dann seng ma scho....  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 27. Mrz. 2006 14:29 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ächz, acker, maloch, schwitz. Es geht voran. Jetzt sag mir noch bitte, wie es hinter "call" weitergeht. Ich habe noch nie mit Userforms gearbeitet und habe keine Ahnung, wie die benannt oder angesprochen werden wollen. MfG vom immer optimistischen wwwilli
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: 27. Mrz. 2006 14:44 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo wwwilli, Userformen (Formulare) werden wie folgt aufgerufen: Name.show Wobei der Name, der Name ist den du dem Formular zugewiesen hast. Standardmäßig ist hier Userform1 usw. vorgegeben. Vielleicht doch öfter mal F1 drücken? Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 27. Mrz. 2006 14:47 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Servus Willi, benutz doch mal ein starkes Deo - ich kann's ja förmlich riechen, wie Du schwitzt. Schön, dass es doch klappt , aber ein bischen musst Du schon noch selber suchen (und auch finden) "call" war der falsche Aufruf. Ein Formular startet man natüüürlich mit ".show" Also: Nemen wir mal an, Dein Formular hat den wunderschönen Namen: "Saveas_dwg" dann rufst Du das Formular mit dem Befehl "Saveas_dwg.Show" auf. Falls es allerdings nur schnöde "UserForm1" heißt, sollte es mit "UserForm1.Show" klappen. Die Einstellungen der Variablen des CommonDialog (wie von Carsten beschrieben) sind eigentlich ziemlich selbsterklärend. Das musst Du Dir halt an Deine Bedürfnisse anpassen. Und wenn Dein "Speichen unter" klappt, möchte ich das Freibier ploppen hören!!!! Mit den besten Empfehlungen Hübi ------------------ Schaun ma mal, dann seng ma scho....  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 27. Mrz. 2006 14:59 <-- editieren / zitieren --> Unities abgeben:         
Die Tropfen sind kein Schweiß. Und keine Tränen. Das ist bloß der Regen, guckt doch mal aus dem Fenster, wenn Ihr eines habt. Ja also, "userform1.show" hatte ich eigentlich schon. Da bleibt aber nach dem SpeichernUnter-Dialog ein leeres Fenster "Userform1", das dann sinnlos abzubrechen ist und das Hauptprogramm nicht weiterführt. :-))) Nebenbei: Meine F1-Aktionen sind fast immer völlig ergebnislos. Das höre ich auch von anderen Kollegen und Kolleginnen. Was man sucht, ist NIE dabei. Geht Euch das nicht auch so? MfG vom weiterhin optimistischen wwwilli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 27. Mrz. 2006 15:13 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Servus Willi, bei uns regnet's nicht sondern die Sonne scheint! Hast Du auch die nötigen Anpassungen in dem Formular von Carsten vorgenommen? Kopier doch bitte mal den Code Deines Formulares und Deines Modules hier rein und dann schaun ma mal weiter, OK? Zitat: Meine F1-Aktionen sind fast immer völlig ergebnislos. Das höre ich auch von anderen Kollegen und Kolleginnen. Was man sucht, ist NIE dabei. Geht Euch das nicht auch so?
..ääääh, nö! Beste Grüße von dem auf's Freibier scharfen Hübi ------------------ Schaun ma mal, dann seng ma scho....  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 27. Mrz. 2006 15:21 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Ups, da hammas. Ich sollte aufmerksamer Lesen  Streich mal obige Bemerkung, ich hab's jetzt gerafft, wo das Problem liegt! Zitat: Da bleibt aber nach dem SpeichernUnter-Dialog ein leeres Fenster "Userform1", das dann sinnlos abzubrechen ist und das Hauptprogramm nicht weiterführt. :-)))
Klar bleibt da das Formular offen. Das solle man mit "Me.Hide" schließen (damit macht man eben Formulare zu). Als so ungefähr: Code: Private Sub UserForm_Activate() CommonDialog1.DialogTitle = "Titel" CommonDialog1.flags = cdlOFNOverwritePrompt + cdlOFNNoChangeDir CommonDialog1.Filter = "DXF Files (*.dxf)|*.dxf" 'Filtername CommonDialog1.CancelError = True CommonDialog1.FileName = "" 'Dateinamenvorgabe CommonDialog1.InitDir = "S:\DXF" 'Pfadvorgabe CommonDialog1.ShowSave 'Ruft Speichernunter-Dialog auf If Err = cdlCancel Then Exit Sub DXF_File = CommonDialog1.FileName 'Übergabe dateiname von Dialog Me.Hide ThisDrawing.SaveAs (DXF_File), acR12_dxf 'Speichern als DXF Release12End Sub
Dann geht's auch wieder zu *g*. Also ich mag gern ein Franziskaner oder Augustiner! Prost, Hübi ------------------ Schaun ma mal, dann seng ma scho....  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 27. Mrz. 2006 16:53 <-- editieren / zitieren --> Unities abgeben:         
Leute, ich bin jetzt erschöpft. Es ergeben sich mehr Fragen als Antworten. Jetzt muss ich erstmal 8 Std. arbeiten, um mich zu erholen. Dann frage ich weiter, was MEIN F1 nicht weiß und ich schon sowieso nicht (Wie übergebe ich Parameter an das Common Userformdingsbums? Wie vermeide ich das Auftauchen des leeren Userforms im Hintergrund? Wie übergebe ich ein VBA-Programm mit Userforms an einen anderen Rechner? Und jetzt genug davon.) MfG 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: 27. Mrz. 2006 20:07 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 27. Mrz. 2006 20:57 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo, hier noch dein heiss begehrter Wunsch , speichern unter ohne Form. Lade dir mal die DVB. Unter Modul1 ist die Funktion auf das wesentliche reduziert.
Code:
Sub Speichern_Unter() ' Noch ins Modul einfügen !!! Dim Dateiname as string Dateiname = GetSaveName("AutoCAD DWG|*.dwg|", "dwg", "C:\TEMP\", "Mein Speichern", "TEST.DWG") If Not Dateiname = "" Then ' Speicher mich ' .... End If End Sub
Der Rest passiert im anderen Modul. Brauchst du nur immer mit einbinden und fertig.Stelli ------------------ 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: 1360 Registriert: 24.07.2002
|
erstellt am: 27. Mrz. 2006 21:24 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 28. Mrz. 2006 07:37 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Prima Sache Stelli! Aber indirekt greift dieses Modul auch wieder auf die CommonDialogs zu Code:
Private Declare Function GetSaveFileName Lib "comdlg32" Alias _ "GetSaveFileNameA" (lpOpenfilename As OpenFilename) As Long
Man muß es nur nicht als Verweis einbinden und braucht kein Formular. Das Modul werd ich sicherlich in Zukunft einbauen - sehr komfortabel  Liebe Grüße Hübi ------------------ Schaun ma mal, dann seng ma scho....  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. Mrz. 2006 15:17 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 28. Mrz. 2006 16:41 <-- editieren / zitieren --> Unities abgeben:         
Ihr Guten, ich muss all das erst verdauen. Nullcharacters und Hex-Zahlen hatte ich bisher noch nicht in meinen VBA-Makros, ich weiß nicht, ob mein Magen da mitmacht. Aber wichtig ist ja, was hinten rauskommt... Ich hab all das provisorisch eingebaut, aber nur halb getestet bis jetzt; wenn Ihr es sagt, wird es funktionieren. Vielen Dank. Ich habe Euch eine Runde Punkte ausgegeben, ich hoffe, das deckt den Aufwand. Über Biersorten müssen wir vielleicht andermal reden. MfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 16. Mai. 2006 12:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo @ Stelli, ich komme nochmal auf den Speichern-Unter-Dialog zurück. Das funktioniert gut, vielen Dank dafür. Eine Zusatzfrage: Kann man beim Filter (erster Parameter der Function) auch mehrere zur Auswahl angeben? ACAD bietet ja in diesem Feld auch mehrere DWG-Versionen und auch Speichern als DXF an. Dateiname = GetSaveName("AutoCAD DWG|*.dwg|", "dwg", "C:\TEMP\", "Mein Speichern", "TEST.DWG") MfG
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 16. Mai. 2006 13:20 <-- editieren / zitieren --> Unities abgeben:         
Also so scheint es jedenfalls nicht zu funktionieren: Filter1 = "DWG-Datei (*.dwg)|*.dwg|DXF-Datei (*.dxf)|*.dxf|" '??? Dann gibt es zwar eine Auswahl DWG/DXF, aber gespeichert wird doch DWG, nämlich meinname.dxf.dwg
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: 16. Mai. 2006 13:23 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo wwwilli, Du kannst die verschiedenen Dateitypen bei einem CommonDialog einfach aneinander reihen: "DXF Files (*.dxf)|*.dxf|DWG Files (*.dwg)|*.dwg". Getrennt werden diese nur durch folgendes Zeichen : | (AltGr+< ). Diese Dateien werden dir dann getrennt angezeigt. Gruß, Carsten 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: 16. Mai. 2006 19:23 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hi wwwilli, Bei Stellis Version ohne Formular kannst du die Angaben wie folgt aneinander reihen: dateiname = GetSaveName("AutoCAD DWG|*.dwg|DXF-File|*.dxf|", "dwg|dxf", "C:\TEMP\", "Mein Speichern", "TEST.DWG") Dann gibt dir der Dateiname bei Wahl DXF-File auch den Dateinamen mit der Endung DXF zurück. Bei einem Formular mit dem CoomonDialog musst du über me.Commondialog1.Filename gehen. Da wird dir die Endung auch mit Angegeben. Danach musst du halt ein Abfrage machen und die Datei unter dem Namen und der Dateiendung speichern. Gruß, Carsten 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: 02. Jun. 2006 16:17 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 02. Jun. 2006 16:37 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo wwwilli, Lösung siehe unten. Musst du nur noch in deine Funktion einbauen. Z.B. als Parameter der geändert wird.
Code:
If GetSaveFileName(OFN) Then Temp$ = OFN.lpstrFile 'Alles nach dem NULL-Zeichen verwerfen n = InStr(Temp$, vbNullChar) If n > 1 Then GetSaveName = Left$(Temp$, n - 1) Else GetSaveName = "" End If Else GetSaveName = "" End If ' Hier kannst du die gewählte Option abfragen Debug.Print "gewählter Index: " & OFN.nFilterIndex End Function
Stelli------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 06. Jun. 2006 10:31 <-- editieren / zitieren --> Unities abgeben:         
Super, Stelli1! Das funktioniert. Für die Allgemeinheit: Es ging darum beim besprochenen Speichern-Unter-Dialog verschiedene DWG-Versionen zu unterscheiden, die alle mit dem gleichen Namen "... .dwg" zurückgegeben werden. Mit der Rückgabe vom Filter-Index kann so ermittelt werden, an welcher Stelle des Filters der Benutzer eigentlich "DWG" gewählt hat. Der Wert muss dann natürlich noch wieder in geeigneter Weise ausgewertet werden. Tschulgulung für unangebrachtes PMen ("Tschulgulung" sagt mein Dreijähriger). Ich wollte die Allgemeinheit nicht mit dem so aufgewärmten Thread belästigen. Wenn ich das mit PM ausreichend oft abgeschrieben habe, poste ichs als Anhang. Bei der Gelegenheit: Weiß jemand, wie in AC 2007 die SaveAs-Parameter für Speichern unter DWG und DXF 2007 heißen? Vermutlich doch ac2007_dwg und ac2007_dxf? Ich habe 2007 auf dem Tisch liegen, aber mich noch nicht getraut. MfG
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
 
 Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 06. Jun. 2006 10:38 <-- editieren / zitieren --> Unities abgeben:         
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 06. Jun. 2006 11:05 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
Hallo wwwilli, Du liegst schon richtig. Die Hilfe gibt dieses Beispiel: Sub Example_Version() ' This example returns AutoCAD version as a string Dim version As String version = ThisDrawing.Application.version MsgBox "This is AutoCAD Version " & version, , "Version Example" End Sub Bei mir gibt Autocad "16.2s (LMS Tech)" wieder, was der Version 2006 entsprechen sollte. Gruß, Carsten 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: 06. Jun. 2006 15:11 <-- editieren / zitieren --> Unities abgeben:          Nur für wwwilli
|