Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Zugriff auf iPropertiy mit Dateiname

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
Autor Thema:   Zugriff auf iPropertiy mit Dateiname (416 mal gelesen)
Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 03. Jul. 2020 11:55    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


iPropertiy-Tabelle_01.JPG

 
Ich beginne mich gerade erst mit VBA zu beschäftigen, bin also noch Anfänger. Bitte also etwas Nachsicht.

Ich möchte auf den Dateinamen (ohne Pfad) der gerade geöffneten Inventordatei zugreifen, d.h. sie als String in eine Variable einlesen.
Leider kann ich die entsprechende iProperty (im Reiter "Allgemein" oben der erste Eintrag) nicht unter ThisApplication.ActiveDocument finden.

Alternativ habe ich ThisApplication.ActiveDocument.DisplayName verwendet. Das funktioniert erst mal, aber wenn das Inventorteil im Baum umbenannt wurde, dann entspricht der Eintrag nicht mehr dem Dateinamen.

Ich hoffe, ich habe es nachvollziehbar erklärt und es findet sich jemand, der die Lösung kennt.


.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 03. Jul. 2020 14:12    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

Ich habe etwas herumprobiert.
Man kann ThisApplication.ActiveDocument.DisplayName auf den eigentlichen Dateinamen zurücksetzen, indem man "" zuweist.
Wenn der alte Name (Umbenennung) noch benötigt wird, kann man in vorher in einer temporären Variable zwischensichern und später zurückschreiben.

Das funktioniert einigermaßen. Inventor ignoriert aber nach dem Zurückschreiben in der Umbenennung manche Endungen ( "XXXXX.ipt" wird zu "XXXXX" )

Ich finde sowieso solche Umbenennungen ungünstig und vermeide sie. Dennoch ist es eben nicht ganz sauber.

Ein Zugriff auf den Dateinamen ohne über ThisApplication.ActiveDocument.DisplayName zu gehen, wäre mir also lieber.


.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


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

Beiträge: 1612
Registriert: 15.11.2006

Windows 10 x64, Inventor 2020

erstellt am: 03. Jul. 2020 18:41    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 Frankx 10 Unities + Antwort hilfreich

Hallo

Dafür nimmt man eigentlich die gängigen Funktionen zum Bearbeiten von Strings und schnippelt sich den Dateinamen aus dem FullDocumentName.
Hier und hier wären schonmal passende Ansätze.

------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 03. Jul. 2020 21:53    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 Hinweise. Ich mache ja was ähnliches.
Ich möchte Pfad und Dateinamen getrennt in jeweils einzelne Variablen als String.

Bislang löse ich das so:

Sub Ersetzen()

    Dim eString As String
    eString = ThisApplication.ActiveDocument.FullDocumentName
    ' Eingabestring = gesamter Pfad + Dateiname
    MsgBox ("Eingabestring: " & eString)
   
    Dim tempString As String
    tempString = ThisApplication.ActiveDocument.DisplayName
    ' Inhalt von DisplayName wird zwischgespeichert
   
    ThisApplication.ActiveDocument.DisplayName = ""
    ' DisplayName wird auf Dateinamen zurück gesetzt
   
    Dim dString As String
    dString = ThisApplication.ActiveDocument.DisplayName
    ' Suchstring = Dateiname
    MsgBox ("Dateiname: " & dString)
   
    Dim aString As String
    ' Ausgabestring
    aString = Replace(eString, "\" & dString, "")
    ' Ausgabestring = Dateipfad ohne Dateiname und ohne "\" am Ende
    MsgBox ("Dateipfad: " & aString)
   
    ThisApplication.ActiveDocument.DisplayName = tempString
    ' DisplayName wird auf alten zwischengespeichertem Inhalt zurück gesetzt

End Sub


Das funktioniert so weit, aber scheint mir noch etwas umständlich und ist nicht ganz sauber, da das Zurückschreiben u.U. nicht korrekt erfolgt.
Ich werde mal die verlinkten Beispiele begutachten, oder jemand hat noch eine bessere Idee.

.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9566
Registriert: 01.12.2003

AutoCAD 200x, Civil, LDD, MDT, ARD, ACA(ADT)
Inventor AIP 4-11,200x
WinXP, W2K

erstellt am: 05. Jul. 2020 01:16    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 Frankx 10 Unities + Antwort hilfreich

Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 05. Jul. 2020 20:20    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 den Tipp. Ich werde mir das in Ruhe anschauen.


.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bkrüger
Mitglied
Konstrukteur


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

Beiträge: 39
Registriert: 14.09.2014

Win10 IV2018 Vault2018-WG

erstellt am: 07. Jul. 2020 15:15    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 Frankx 10 Unities + Antwort hilfreich

Hallo,
wie man den Fullname auseinandernimmt:
Code:

Sub Dateinamensplit()
Dim sDateiName As String ' Dateiname
Dim sPfadName As String ' Pfadname
Dim sFullName As String 'kompletter (full-) Name

If ThisApplication.ActiveDocument Is Nothing Then Exit Sub 'Raus, wenn keine Datei geöffnet ist
sFullName = ThisApplication.ActiveDocument.FullFileName ' kompletten Namen holen
If sFullName = "" Then Exit Sub ' Raus wenn Datei ungespeichert (dann ist fullfilename leer, bzw. filesavecounter=0)
'Dateiname steht nach dem letzten slash
sDateiName = Right(sFullName, Len(sFullName) - InStrRev(sFullName, "\")) 'holt den Dateinamen
sPfadName = Left(sFullName, InStrRev(sFullName, "\")) ' holt den Pfad

'Debugausgabe ins Direktfenster (ggf. Strg+G zur Anzeige):
Debug.Print sFullName
Debug.Print sPfadName
Debug.Print sDateiName

End Sub



Anmerkungen: In ThisApplication.ActiveDocument.FullFileName ist der komplette Dateinamen zu finden.
Displayname bezeichnet den im Browser (oder anderweitig, bspw. in der dwf-Ausgabe) angezeigten Namen - dieser kann vom Benutzer verändert werden und hat auf den Dateinamen keinen Einfluß.

Oben ist das letzte Zeichen des Pfades der Backslash "\", sollte das nicht gewünscht sein, dann

Code:

sPfadName = Left(sFullName, InStrRev(sFullName, "\")-1)

 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bkrüger
Mitglied
Konstrukteur


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

Beiträge: 39
Registriert: 14.09.2014

Win10 IV2018 Vault2018-WG

erstellt am: 07. Jul. 2020 15:37    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 Frankx 10 Unities + Antwort hilfreich

Hallo Frank,
FullDocumentName beinhaltet auch - in spitzen Klammern eingeschlossen - die aktive Detailgenauigkeit.
Displayname auch - hier allerdings in runde Klammern eingeschlossen.

Da wir es aber auf den Datei- und nicht auf einen Anzeigenamen abgesehen haben, wäre die passendere Stelle
ThisApplication.ActiveDocument.FullFileName, um Pfad- und Dateinamen daraus zu setzieren. 
etwas sperrig (und ohne jegliche Überprüfung auf irgendwas):

Code:

DateiName = Right(ThisApplication.ActiveDocument.FullFileName, Len(ThisApplication.ActiveDocument.FullFileName) - InStrRev(ThisApplication.ActiveDocument.FullFileName, "\"))
Pfad = Left(ThisApplication.ActiveDocument.FullFileName, InStrRev(ThisApplication.ActiveDocument.FullFileName, "\"))

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 07. Jul. 2020 16: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

Bei mir funktioniert sowohl ThisApplication.ActiveDocument.FullFileName als auch ThisApplication.ActiveDocument.FullDocumentName
Ich benutze aktuell die Split-Funktion:

Sub Test2()
    Dim sFullFileName As String
    sFullFileName = ThisApplication.ActiveDocument.FullFileName
    Dim oArray() As String
   
    oArray = Split(sFullFileName, "\")
    ' Feld wird gefüllt, Trennung durch "\"
   
    Dim sFileName As String
    sFileName = oArray(UBound(oArray))
    ' Nur das letzte Feld beinhaltet den Dateinamen
   
    MsgBox ("Dateiname: " & sFileName)
       
    Dim sPfad As String
    ' Ausgabestring
    sPfad = Replace(sFullFileName, "\" & sFileName, "")
    ' Ausgabestring = Dateipfad ohne Dateiname und ohne "\" am Ende
   
    MsgBox ("Dateipfad: " & sPfad)
End Sub


Zwischenzeitlich hatte ich eine Variante, bei der ich den Eingabestring reversiert habe, dann das erste "\" gesucht und den String dort getrennt. Zum Schluss beide Teilstrings wieder reversiert.
Da kannte ich die UBound-Funktion noch nicht. Bin ja noch blutiger Anfänger.


.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bkrüger
Mitglied
Konstrukteur


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

Beiträge: 39
Registriert: 14.09.2014

Win10 IV2018 Vault2018-WG

erstellt am: 07. Jul. 2020 16:41    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 Frankx 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Frankx:
Bei mir funktioniert sowohl ThisApplication.ActiveDocument.FullFileName als auch ThisApplication.ActiveDocument.FullDocumentName


Es ist aber nicht dasselbe. Beim Fulldocumentname hängt bei einer iam evtl. noch die Detailgenauigkeit dran

Zitat:

Ich benutze aktuell die Split-Funktion:

Warum?
Was lässt sich über die gesuchten Elemente Dateiname und Pfad in einem String, der beides enthält (also der FullFilename ist),
sicher sagen?
Der Pfad endet mit dem letzten Backslash, und der Dateiname fängt nach dem letzten Backslash an.
Also ermittelt man mit instrrev genau dessen Position. Vor der Pos. ist der Pfad, danach der Dateiname.

Zitat:

Zwischenzeitlich hatte ich eine Variante, bei der ich den Eingabestring reversiert habe, dann das erste "\" gesucht und den String dort getrennt. Zum Schluss beide Teilstrings wieder reversiert.
Da kannte ich die UBound-Funktion noch nicht. Bin ja noch blutiger Anfänger.

Macht nix, wir haben alle irgendwie mal angefangen.
Dabei ist das Forum hier auch bzgl. VBA sehr hilfreich, da eine wahre Fundgrube.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 08. Jul. 2020 08:57    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

Zitat:
Original erstellt von bkrüger:
Hallo Frank,
FullDocumentName beinhaltet auch - in spitzen Klammern eingeschlossen - die aktive Detailgenauigkeit.
Displayname auch - hier allerdings in runde Klammern eingeschlossen.

Da wir es aber auf den Datei- und nicht auf einen Anzeigenamen abgesehen haben, wäre die passendere Stelle
ThisApplication.ActiveDocument.FullFileName, um Pfad- und Dateinamen daraus zu setzieren. 
etwas sperrig (und ohne jegliche Überprüfung auf irgendwas):

Code:

DateiName = Right(ThisApplication.ActiveDocument.FullFileName, Len(ThisApplication.ActiveDocument.FullFileName) - InStrRev(ThisApplication.ActiveDocument.FullFileName, "\"))
Pfad = Left(ThisApplication.ActiveDocument.FullFileName, InStrRev(ThisApplication.ActiveDocument.FullFileName, "\"))


Das ist eine sehr kompakte Variante. Allerdings hängt hier beim Pfad immer noch das "\" am Ende dran. Das auch noch weg zu bekommen ist aber kein Problem.

Mir reicht vorerst der Dateiname.

Wieder was gelernt.

.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Frankx
Mitglied



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

Beiträge: 10
Registriert: 08.01.2019

Inventor Professional

erstellt am: 08. Jul. 2020 09:08    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

Zitat:
Original erstellt von bkrüger:

Es ist aber nicht dasselbe. Beim Fulldocumentname hängt bei einer iam evtl. noch die Detailgenauigkeit dran


Danke für den Hinweis. Ich habe den Unterschied getestet und erst jetzt richtig begriffen. Das ist ein wichtiger Punkt, da es u.U. zu Ausgabefehlern oder Programmabbruch führen kann.


.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bkrüger
Mitglied
Konstrukteur


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

Beiträge: 39
Registriert: 14.09.2014

Win10 IV2018 Vault2018-WG

erstellt am: 08. Jul. 2020 15:53    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 Frankx 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Frankx:

Das ist eine sehr kompakte Variante. Allerdings hängt hier beim Pfad immer noch das "\" am Ende dran. Das auch noch weg zu bekommen ist aber kein Problem.
.


Man muss es ja nicht weg bekommen - man schneidet einfach ein Zeichen früher ab:

Code:

Pfad = Left(ThisApplication.ActiveDocument.FullFileName, InStrRev(ThisApplication.ActiveDocument.FullFileName, "\")-1)

Ich verwende Pfadnamen innerhalb meiner Scripte immer mit abschließenden Backslash, macht sich einfacher wenn man sich Pfade und Namen zusammentackert. Ist aber letztlich Geschmackssache.

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)2020 CAD.de | Impressum | Datenschutz