Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Fehler abfangen: Masse via VB Script auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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

Sehen Sie sich das Profil von Sven Lucht an!   Senden Sie eine Private Message an Sven Lucht  Schreiben Sie einen Gästebucheintrag für Sven Lucht

Beiträge: 4
Registriert: 18.01.2016

erstellt am: 18. Jan. 2016 21:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von axi92 an!   Senden Sie eine Private Message an axi92  Schreiben Sie einen Gästebucheintrag für axi92

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Sven Lucht 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Chris 31 an!   Senden Sie eine Private Message an Chris 31  Schreiben Sie einen Gästebucheintrag für Chris 31

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Sven Lucht 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von Sven Lucht an!   Senden Sie eine Private Message an Sven Lucht  Schreiben Sie einen Gästebucheintrag für Sven Lucht

Beiträge: 4
Registriert: 18.01.2016

erstellt am: 19. Jan. 2016 09:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von axi92 an!   Senden Sie eine Private Message an axi92  Schreiben Sie einen Gästebucheintrag für axi92

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Sven Lucht 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Chris 31 an!   Senden Sie eine Private Message an Chris 31  Schreiben Sie einen Gästebucheintrag für Chris 31

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Sven Lucht 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von Sven Lucht an!   Senden Sie eine Private Message an Sven Lucht  Schreiben Sie einen Gästebucheintrag für Sven Lucht

Beiträge: 4
Registriert: 18.01.2016

erstellt am: 19. Jan. 2016 17:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz