| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: VBA: Dateien zum Lesen öffnen (3187 mal gelesen)
|
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 11. Aug. 2009 12:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, hier also meine zweite Frage: Ist es möglich, in AutoCAD automatisch eine DXF Datei aus einem Ordner zu öffnen, eine Polylinie darin zu finden (es gibt immer meist nur eine, sonst sind sie anhand der Punktanzahl zu unterscheiden), ein paar Prozeduren darüber laufen zu lassen, die Datei wieder zu schließen und anschließend die nächste auf diese Weise zu verwursten? Viele Grüße und vielen Dank im voraus, Fabi Tante Edit: Jetzt gibts den Beitrag zweimal.. entschuldigung. Bitte an die Moderatoren: Bitte einen Beitrag löschen.
[Diese Nachricht wurde von Fabi143 am 11. Aug. 2009 editiert.] [Diese Nachricht wurde von Fabi143 am 11. Aug. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Aug. 2009 13:19 <-- editieren / zitieren -->
Hi Fabi, bitte diesen Thread jetzt als den aktuellen ansehen, Rückfragen von Deinem alten Eintrag dann bitte auch gleich hier beantworten. - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 11. Aug. 2009 editiert.] |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 11. Aug. 2009 13:30 <-- editieren / zitieren --> Unities abgeben:
Moin, mit dieser Problemstellung bin ich bisher nicht gar so weit gediehen. Mir ist leider mein Code dafür abhanden gekommen. Ich hatte eine Nutzerabfrage --> Ordnerpfad als String Und dann eine Schleife, die erst eine Dateiliste erstellen und dann nacheinander die DXF Dateien öffnen sollte. Stimmt das so als Herangehensweise? Was den Code betrifft: Da muß ich nochmal ran. Fabi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Aug. 2009 13:44 <-- editieren / zitieren -->
Hi, Zitat: Stimmt das so als Herangehensweise?
...sehe keinen Fehler, Verzeichnis einlesen kannst Du mit dem Windows-Scripting-Object oder mit der VB-Funktion 'DIR'. Vorsicht bei großer Dateianzahl, Öffnen von 100ten Zeichnungen kann irgendwann mal ein MemoryLeak hinterlassen und AutoCAD ist tschüss. - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 11. Aug. 2009 14:47 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe es nun mit dieser Prozedur probiert:
Code:
Original erstellt von startrek: ..... Code: Sub asdf() Dim f$, p$, i& p = "D:\Cad\" f = Dir(p & "*.dwg") i = 1 Do While f <> "" Documents.Open p & f With ActiveDocument MsgBox i & ": " & .WindowTitle If Not .Saved Then .Save .Close End With i = i + 1: f = Dir Loop End Sub Gruss Nancy
und erhalten folgenden Fehler vom VBA Editor: Laufzeitfehler '-2145320845(80210073)': Ungültiger Dateiname liegt das jetzt an meinem Code oder am Dateinamen? Fabi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Aug. 2009 14:55 <-- editieren / zitieren -->
Hi, Dein Code läuft bei mir, bei welcher Zeile steckt er bei Dir? - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 11. Aug. 2009 15:03 <-- editieren / zitieren --> Unities abgeben:
Bei mir sieht es etwas anders aus, da ich dazwischen noch prozeduren hängen habe. Es hängt allerdings schon recht früh: Code:
Dim Pathname As String Pathname = InputBox("Bitte geben Sie den Pfad zu den Schablonendateien an") p = Pathname f = Dir(p & "*.dxf") g = 1 Do While f <> " " Documents.Open p & f
Er bleibt direkt nach Documents.Open hängen.Gruß, Fabi [Diese Nachricht wurde von Fabi143 am 11. Aug. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Aug. 2009 15:40 <-- editieren / zitieren -->
Hi, kann es sein, dass Du im AutoCAD die Systemvariable 'SDI' auf 1 stehen hast? - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 11. Aug. 2009 16:03 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 11. Aug. 2009 16:13 <-- editieren / zitieren -->
Hi, Zitat: Kann es sein, daß die Variable p den Wert Pathname nicht im geeigneten Format übernimmt?
...wenig wahrscheinlich, bei Strings kann es ev. Unterschiede zwischen ASCII und UNICODE geben, diese sind zwar in ObjectARX, aber nicht in VB/VBA-Strings relevant. Du könntest aber mal versuchen, Zeichnungsnamen explizit ohne Sonderzeichen, ohne Leerschritte und in einem Verzeichnis mit gleichen Regeln zu versehen. Und was noch offen ist bzw. eine Möglichkeit wäre: Dein erstes Beispiel war '*.dwg', das zweite war '*.dxf' ==> Du hast aber schon die DXF's mal händisch versucht, zu öffnen? - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 11. Aug. 2009 17:12 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 11. Aug. 2009 17:54 <-- editieren / zitieren -->
Hi, sorry, war ein bisschen unterwegs. Nachdem ich es nicht nachvollziehen kann, starten wir mal vom Anfang: a) hast Du zumindest eine leere Zeichnung offen? b) hast Du Deinen Code in VBA oder in einem externen VB6 c) wenn Du einen Breakpoint setzt (bei der Zeile mit '...open') und eine Überwachung auf 'Documents' machst, ist es ein gültiges Objekt? d) schreib mal nur eine Zeile hardcoded mit einem Dir bekannten (natürlich vorhandenen) Dateinamen, geht das? - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 12. Aug. 2009 17:54 <-- editieren / zitieren --> Unities abgeben:
|
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 13. Aug. 2009 12:27 <-- editieren / zitieren --> Unities abgeben:
Moin. Ich habs mal hardcoded geschrieben.. und den Fehler gefunden. Es fehlte ein "\" hinter dem gewünschten Ordner. Ansonsten funktionupselt das jetzt.. allerdings bricht er nun das restliche Programm ab.. sowas doofes. Viele Grüße, Fabi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 13. Aug. 2009 12:31 <-- editieren / zitieren -->
Hi Fabi, Zitat: allerdings bricht er nun das restliche Programm ab.. sowas doofes.
Was wird abgebrochen? Läuft die Schleife nach dem ersten Document-Open nicht mehr weiter? Oder kommt eine (neue) Fehlermeldung? Heikel könnte sein, wenn Du das VBA aus einem ThisDrawing-Objekt startest, das Du nachher (oder im Lauf) schließt, darum war meine Frage, ob Du ein Doc offen hast, wenn Du Deinen Code startest bzw. was bei der Prüfung des Objekts 'Documents' drinsteht (ob's überhaupt initialisiert ist). - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 13. Aug. 2009 12:53 <-- editieren / zitieren --> Unities abgeben:
Ich hatte ein Doc offen. Allerdings führte das dazu, daß er dieses Doc mitverwursten wollte, ich dort aber keine Polylinie anklicken konnte; danahc ist es abgestürzt. jetzt habe ich nach der Auswahlabfrage für die Polylinie noch eine Überprüfung drin:
Code: On Error Resume Next ThisDrawing.Utility.GetEntity Ent, Inspkt, Chr(10) & "Polylinie wählen: " If Err.Number Then Exit Sub End If
sie sorgt jetzt, nachdem ich das automatische Öffnen der Dateien eingebaut habe dafür, daß das Programm die Sub beendet. Wenn ich die Überprüfung auskommentiere, funktioniert es, ACad hängt sich allerdings nach Bearbeitung der letzten Datei auf. Ich konnte in dem Fall auch nicht überprüfen, ob wirklich alles richtig bearbeitet wurde.Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 13. Aug. 2009 12:55 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 13. Aug. 2009 12:58 <-- editieren / zitieren -->
Hi, Zitat: ACad hängt sich allerdings nach Bearbeitung der letzten Datei auf
...viele Dateien öffnen und schliessen mag AutoCAD (und auch andere nicht), egal ob Word oder AutoCAD - 5000 Dateien öffnen, darauf zugreifen und wieder schliessen ist der Tod für Windows und dessen Memory-Verwaltung. Du kannst aber (empfehle ich bei der Abhandlung solcher Dinge grundsätzlich) ein Log-File mitschreiben, am Anfang einer Zeichnung fügst Du eine Zeile mit Dateiname ein (ev. mit Datum/Uhrzeit), dann LogFile schliessen. An Ende der Zeichnungsbehandlung eine weitere Zeile mit Fehlermeldungen oder Erfolg. In diesem Fall könntest Du auch erkennen, ob die letzte Datei ordnungsgemäß abgehandelt wurde und AutoCAD erst danach gecrashed ist oder während der letzten Datei. - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 13. Aug. 2009 16:47 <-- editieren / zitieren -->
Hi, Zitat: Vll. muß ich wirklich vom ThisDrawing weg. Wie mache ich das aber am besten?
...sorry, da haben sich unsere Antworten überkreuzt und damit ist mir dieser Beitrag entkommen. Du kannst einmal auf das Application-Objekt referenzieren mit dim tAcadApp as AcadApplication set tAcadApp = ThisDrawing.Application oder der noch weiter entfernte Weg: set tAcadApp = GetObject(,"AutoCAD.Application") Und wenn Du nicht viel in der Zeichnung machen mußt, dann kannst Du von 'ganz aussen' kommen und z.B. Excel starten, dort in den VBA-Editor und mit zweitem oberen Weg auch Zugriff auf AutoCAD bekommen. Dieser Weg hätte den Vorteil, dass Du z.B. alle 100 Zeichnungen das AutoCAD schliessen und neu starten kannst. Dieser Weg hat den Nachteil, dass der Zugriff auf Elemente/Eigenschaften der Zeichnung im AutoCAD deutlich langsamer ist. Viel Erfolg, - alfred - ------------------ www.hollaus.at |
Fabi143 Mitglied Student
Beiträge: 18 Registriert: 11.08.2009 Windows Xp Professional SP3;Athlon64 X2 6000+;Radeon X1550 64-bit; AutoCAD 2010, vba enabler
|
erstellt am: 13. Aug. 2009 19:48 <-- editieren / zitieren --> Unities abgeben:
Hmm.. Da das mit dem automatischen Öffnen der Dateien nicht klappt, ich aber thematisch mit meiner Studienarbeit eigentlich weit genug gekommen bin, habe ich mich entschlossen, das aufzugeben und meine bisherigen Ergebnisse zu verarbeiten. Danke an Alfred für die vielen Antworten :-) Fabi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |