|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | 
|  |  | 
|  | Exklusives EDU-Programm für RTX PRO Blackwell, eine Pressemitteilung 
 | 
| Autor | Thema:  Fehler abfangen: Masse via VB Script auslesen (1607 /  mal gelesen) | 
 | Sven Lucht Mitglied
 Mathematiker
 
 
      Beiträge: 4Registriert: 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.ApplicationSet 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: 685Registriert: 20.02.2010
 Inventor 2014 64bit SP2Vault 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: 575Registriert: 23.04.2013
 Inventor 2013/2015Windows 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: 4Registriert: 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: 685Registriert: 20.02.2010
 Inventor 2014 64bit SP2Vault 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: 575Registriert: 23.04.2013
 Inventor 2013/2015Windows 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: 4Registriert: 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 |