| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Fehler abfangen: Masse via VB Script auslesen (1369 / mal gelesen)
|
Sven Lucht Mitglied Mathematiker
Beiträge: 4 Registriert: 18.01.2016
|
erstellt am: 18. Jan. 2016 21:03 <-- editieren / zitieren --> Unities abgeben:
Hallo allerseits, ich bin neu im Forum und auch noch neu im Umgang mit Inventor, insbesondere der Makroprogrammierung. Ich versuch gerade aus einer Excel Tabelle mittels VB Script die Masse aus einer Reihe von .ipt Dateien auszulesen. Das Script funktioniert im Prinzip, aber ich hab es aus Zeitdruck und mangelnder Erfahrung schlampig programmiert, so dass es sehr fehleranfällig ist. Deshalb würde ich gerne eine vernünftige error handling einfügen. Ich brauche dazu aber Hilfe. Ich habe schon in diesem Forum und im Netz allgemein gesucht, aber komme nicht wirklich voran. Hier der relevante Code: Dim iv As Inventor.Application Set iv = CreateObject("Inventor.Application") Dim myDoc As Inventor.Document Dim path As String Do While i <= o path = Worksheets(1).Cells(i,SUCHSPALTE).Value 'liest ipt Dateiname aus Liste aus On Error GoTo Err Set myDoc = iv.Documents.Open(path,True) m = myDoc.ComponentDefinition.MassProperties.Mass Worksheets(1).Cells(i, AUSGABESPALTE).Value = m myDoc.Close Err: i = i + 1 Application.Wait (Now + 0.000001) Loop Die Probleme sind: 1. Wenn Dateien zwar existieren, aber irgendwie beschädigt sind, sich nicht öffnen lassen, hängt das Script unendlich lange daran fest, wirft immer wieder OLE-Fehlermeldungen. Kann ich da ein Delay o.ä. einfügen, damit er nach x Sekunden zur nächsten Datei springt? Der OnError Block bringt leider nichts. 2. Wenn das Script durchgelaufen ist und ich die Excel Datei beende, gibt es manchmal Dutzende Inventorfehlermeldungen: Prozess nicht richtig beendet. Schließe ich die Inventordateien oder Instanzen nicht richtig? 3. Ich habe einen kleinen Delay am Ende jedes Schleifendurchlaufs eingeführt, da das Script dann runder lief. Ich habe aber keine Ahnung warum. 4. Eine Abfrage, ob die zu öffnende Datei existiert, gehört da natürlich auch noch hin. Das kann ich selbst ergänzen, war bis jetzt nicht nötig, da die Liste im gleichen Script erstellt wird und somit aktuell ist. Gut ist das natürlich nicht Vielen Dank schonmal, falls jemand helfen mag. Insbesondere Punkt 1 krieg ich nicht in den Griff.
[Diese Nachricht wurde von Sven Lucht am 18. Jan. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 19. Jan. 2016 07:11 <-- editieren / zitieren --> Unities abgeben: Nur für Sven Lucht
Hi Sven Ich kann dir bei deinem Problem nicht so wirklich zu einer komplett Lösung helfen aber hätte da einige Vorschläge. Bei
Code:
Set myDoc = iv.Documents.Open(path,True)
Öffnet er es ja jedes mal SICHTBAR in Inventor, wenn du es auf False setzt macht er das im hintergrund, bringt die möglicherweise auch noch ein Zeitersparnis. Code:
Set myDoc = iv.Documents.Open(path,False)
Was ist "o" für eine Endbedingung?
Code:
Do While i <= o
Ob die Datei existiert kannst du damit prüfen:
Code:
Public Function FileFolderExists(strFullPath As String) As Boolean 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: Check if a file or folder exists On Error GoTo EarlyExit If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True EarlyExit: On Error GoTo 0 End Function
Was auch nicht interessant wäre ist zu Punkt 1 warum eine Datei beschädigt ist? Wenn du herausbekommst was das Problem ist, möglicherweise ein Dateiatribut dann könntest du das vorher prüfen vor dem Open Vorgang somit bleibt er gar nicht erst hängen.
------------------ Grüße aus Wien Philipp Email: Base64 Encoded: cGhpcHNfOTJAeWFob28uZGU=
[Diese Nachricht wurde von axi92 am 19. Jan. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 19. Jan. 2016 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für Sven Lucht
Zu Punkt 2 hätte ich vielleicht einen Ansatz. Kann es sein, dass Inventor das Script noch nicht zu Ende abgearbeitet hat, weil die letzte Zelle, die du ausliest eine leere Zelle ist? Das würde dann bedeuten, dass Inventor versucht eine Datei zu öffnen, während du aber das Bezugsdokument in Excel schließt. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven Lucht Mitglied Mathematiker
Beiträge: 4 Registriert: 18.01.2016
|
erstellt am: 19. Jan. 2016 09:17 <-- editieren / zitieren --> Unities abgeben:
Danke Euch beiden schonmal. Ich bin jetzt einen großen Schritt weiter. Danke für die FileExists Function und den Hinweis mit dem "False". Läuft jetzt deutlich schneller. o ist die letzte beschriebene Zeile. Ich habs nochmal angesehen: da wird keine Leerzeile ausgelesen. Vielleicht ist das eine Nachwirkung von Problem 1. Wenn ich die defekten Dateien öffne, gibt es folgende Fehlermeldung: "Beim Initialisieren der Anwendung sind Fehler aufgetreten. Verzeichnis "H:" konnte nicht erstellt werden" Ich werde mal mit meinen Kollegen, die das System in den letzten Jahren betreut haben, reden um den fehlerhaften Verweis, o.ä. zu korrigieren. Lieber wäre mir aber, wenn mein Script für die Zukunft für solche Fälle gewappnet wäre. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 19. Jan. 2016 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für Sven Lucht
Ich verstehe die Meldung nicht wirklich: "Beim Initialisieren der Anwendung sind Fehler aufgetreten. Verzeichnis "H:" konnte nicht erstellt werden" Wenn du das Excel file öffnest kommt von Excel selbst die Meldung? Was ist das Verzeichnis "H:"? Ist das ein Netzlaufwerk? Wenn ja existiert das bei dir auch? ((Aus dem Grund verwende ich lieber UNC-Pfade die sind bei jedem gleich.)) ------------------ Grüße aus Wien Philipp Email: Base64 Encoded: cGhpcHNfOTJAeWFob28uZGU= Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 19. Jan. 2016 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für Sven Lucht
Wie ist denn o definiert? Wie bekommt o denn seinen "Inhalt"? Und ansonsten hätte ich die gleichen Fragen gestellt, wie der geschätzte Philipp ------------------ MFG Chris [Diese Nachricht wurde von Chris 31 am 19. Jan. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven Lucht Mitglied Mathematiker
Beiträge: 4 Registriert: 18.01.2016
|
erstellt am: 19. Jan. 2016 17:23 <-- editieren / zitieren --> Unities abgeben:
Danke für die erneuten Antworten. Das ist sehr hilfreich! Das o gibt die letzte beschriebene Zeile an. Zur Zeit belegt ich die Variable aber mit einer Nutzereingabe, weil der Code sonst nie bis zum Ende durchläuft, sondern sich vorher an einer defekten Datei aufhängt. Das hab ich zu Testzwecke erstmal so gemacht. Ich kann 100% ausschließen, dass das eine Fehlerquelle ist. Die Fehlerangabe mit dem Pfad H: war allerdings in der Tat Quatsch und der Grund war wie vermutet, dass ich es von einem anderen Rechner gestartet habe. Ich nehme den Tipp mit den UNC-Pfaden aber auf und implementiere das (siehe unten). Danke! Der tatsächliche Fehler lautet beim manuellen Öffnen der Datei: "Es wurde ein falsches Argument festgestellt" "Fehler beim Öffnen einer Speicherung in Datenbank \\Server...... ... .ipt Die Speicherung in Datenbank \\Server...... ... .ipt konnte nicht geöffnet werden" Inventor hängt sich dann auf. Die Pointe kommt jetzt: Ich habe mal manuell einige Dateipfade durch UNC-Pfade ersetzt... und siehe da: das Errorhandling greift (der Existenzcheck der Datei nicht - aber das sollte er ja auch nicht) und die defekten Dateien werden einfach übersprungen. Keine Ahnung warum. Die normalen Laufwerkspfade funktionieren bei den 2000+ Dateien ja perfekt. Nur bei den defekten nicht. Keine Ahnung warum eine andere Adressierung hier hilft, aber sie tut es. *Verneige mich in Ehrfurcht*
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |