| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| 3DEXPERIENCE Conference 2024 | München |
Autor
|
Thema: Dateiname (2354 mal gelesen)
|
Catler Mitglied
Beiträge: 23 Registriert: 15.11.2005
|
erstellt am: 04. Mrz. 2006 15:01 <-- editieren / zitieren --> Unities abgeben:
An alle VBA'ler folgende Zeile im Visual Basic > Dateiname = modeldoc.GetPathName < gibt mir den Dateinamen mit Pfad aus. Ich würde aber gerne nur den Dateinamen haben. Und wenn es geht ohne DateiTyp UND wenn es geht nur bis zu einen UNTERSTRICH. Aus folgenden Ergebniss: > D:\Eigene Dateien\SW-Projekte\Test_0815.sldprt < hätte ich gerne nur: > Test < Besten Dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 04. Mrz. 2006 20:00 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Hi und so kanns gehen .... Dim fName As String fName = "D:\Eigene Dateien\SW-Projekte\Test_0815.sldprt" Dim bName As String Dim zName As String Dim fso As Object Set fso = CreateObject("Scripting.FilesystemObject") bName = fso.GetBaseName(fName) Dim xPos As Integer xPos = InStr(1, bName, "_") If xPos > 0 Then zName = Left(bName, xPos - 1) Else zName = bName End If Debug.Print zName Gruß Micha ------------------ http://classicvb.org/petition/ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Catler Mitglied
Beiträge: 23 Registriert: 15.11.2005
|
erstellt am: 05. Mrz. 2006 16:31 <-- editieren / zitieren --> Unities abgeben:
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 06. Mrz. 2006 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
oder so Code:
'... dim record as variant '... 'Hier von Micha geklaut: dim fName as string Dim fso As Object'... 'Hier von Micha geklaut: fName = "D:\Eigene Dateien\SW-Projekte\Test_0815.sldprt" Set fso = CreateObject("Scripting.FilesystemObject") bName = fso.GetBaseName(fName) 'jetzt hast du "Test_0815.sldprt" 'und jetzt kommts: Record = split(bName,"_") Debug.print Record(0) ' ergibt "Test" Debug.print Record(1) ' ergibt "0815.sldprt"
Wenn kein "_" enthalten ist, dann gibt Record(0) den ganzen Text zurück, Record(1) gibts dann nicht. ------------------ Klaus www.al-ko.com >> Unbedingt hier klicken!!! << privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003
|
erstellt am: 06. Mrz. 2006 18:17 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
... oder so, weils lustig ist;-) Code:
Sub x() Dim re As Object, s$ Set re = CreateObject("vbscript.regexp") re.pattern = "\w:.*\\(.*?)(?:_|\.).*" s = "D:\Eigene Dateien\SW_Projekte\Test_0815.sldprt" Debug.Print re.Replace(s, "$1") End Sub
Gruss Nancy
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 06. Mrz. 2006 18:57 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Jo nicht schlecht <insert CREDITS4REGEXPRESSION> , hab noch einen : Debug.Print Mid(fName, InStrRev(fName, "\") + 1, InStrRev(fName, "_") - InStrRev(fName, "\") - 1) <grinz> muss nur ein _ und \ vorhanden sein ... Gruß Micha
------------------ http://classicvb.org/petition/ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003
|
erstellt am: 06. Mrz. 2006 21:26 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
das wird ja richtig sportlich hier ... :-) Okay, auch noch einen Oneliner - in Anlehnung an Klaus - mehr fällt mir dann glaube aber nimmer ein;-) Code:
Debug.Print Split(Split(s, "\")(UBound(Split(s, "\"))), "_")(0)
Sollte ich jemals Probleme mit Strings/Dateinamen/Pfaden haben, komm' ich wieder her und nehm die SuFu im SW-Brett;-)lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 07. Mrz. 2006 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Zitat: Original erstellt von startrek: das wird ja richtig sportlich hier ... :-) Okay, auch noch einen Oneliner - in Anlehnung an Klaus - mehr fällt mir dann glaube aber nimmer ein;-)
Code:
Debug.Print Split(Split(s, "\")(UBound(Split(s, "\"))), "_")(0)
Sollte ich jemals Probleme mit Strings/Dateinamen/Pfaden haben, komm' ich wieder her und nehm die SuFu im SW-Brett;-)lg Nancy
einer geht noch .... lalala Debug.Print Split(Replace(s, "_", "\"), "\")(UBound(Split(Replace(s, "_", "\"), "\")) - 1) <nur leicht abgewandelt>
------------------ http://classicvb.org/petition/ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 07. Mrz. 2006 10:45 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Hallo Ich würde mich auch gerne sportlich beteiligen, doch leider funktioniert bei mir nichts von all dem. Habe ein Makro erstellt mit dem ersten Text, erhalte sofort eine Fehlermeldung in Zeile Set fso = CreateObject("Scripting.FilesystemObject") Bitte um Hilfe Gruß einweg [list][/list][/IMG] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 07. Mrz. 2006 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 07. Mrz. 2006 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
beim ausführen bringt er sofort Laufzeitfehler 429 Objekterstellung durch Activex-Komponente nicht möglich. wenn ich auf debuggen klicke zeigt er mir im Makro die Zeile Set fso = CreateObject gelb an. Wo steckt der Fehler oder sind in meinem Programmeinstellungen irgendwelche Fehler. Mfg einweg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 07. Mrz. 2006 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 07. Mrz. 2006 18:18 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Hi noch ein kleiner Nachtrag zum Link von Stefan.... CreateObject ... Es gibt mehrere Wege wie man(n) z.b.: eine Windows Komponente anbinden kann. 1. Setze eine Referenz unter VBA auf eine Komponente hat den Vorteil das man eine Syntax Vervollständigung vom VBA Editor bekommt. Nachteil: Wenn jmd die Komponente nicht hat dann kann das Makro 'meistens' nichteinmal gestartet werden... 2. CreateObject Nachteil: wenn keine Referenz eingebunden wurde hat man keine Syntaxunterstützung Vorteil: man kann damit überprüfen ob diese Komponente überhaupt existiert (<insert> auch mal bei GetObject in der VBA Hilfe nachschauen <\insert> ) 3. WinAPI´s (nur für Erfahrene VBA'ler) geeignet ... Für 2. und 3. gilt: man muss wissen was man tut! + Funktionen die man benutzen will muss man kennen! ebenso deren Parameter. Wenn die Meldung 429 auftaucht, dann ist diese Komponenten nicht auf dem entsprechenden Rechner vorhanden, oder nicht Registriert ... (Manche Admins benennen diese ganz gerne um ... in unserem Fall wshom.ocx aus dem system32 Verz.) ........................ Wenn ihr mal Referenzen verwendet - oder einfach nur mal so schauen wollt- ob da was Interessantes bei ist .. geht hin und bindet einen Verweis ein -> drückt im VBA Editor mal F2 und ihr seht alle Funktionen die man verwenden kann.. Gruß Micha ------------------ http://classicvb.org/petition/ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 08. Mrz. 2006 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Vielen Dank für Euere Hilfe. Leider komme ich damit auch nicht weiter. VBA ist angehakt und ein Verweis, der sich löschen lässt ist auch nicht vorhanden. Wshom.ocx habe ich bei den Verweisen auch schon aktiviert. Geht auch nicht. Vielleicht hat noch jemand einen anderen Tipp. Besten Dank mfg Einweg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 08. Mrz. 2006 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 08. Mrz. 2006 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 08. Mrz. 2006 11:49 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 08. Mrz. 2006 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 09. Mrz. 2006 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Hi Das es an der SW Installation liegt ist eher Unwahrscheinlich, Es könnte zwar sein glaub ich aber nicht zu 100%... Die Funktion CreateObject wird vom VBA bereitgestellt das wäre auch das einzige was SW betrifft. Das Scripting.FilesystemObject ist von MS .. Kopiere die Funktion einfachmal in deinen Excel oder Word VBA Editor und schau ob dort die gleiche Meldung erscheint.. entferne nur vorher das Set swApp = SldWorks.App.... aus der Sub Main Gruß Micha ------------------ http://classicvb.org/petition/ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 10. Mrz. 2006 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 10. Mrz. 2006 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Klaro ... Installiere den Windows Scripting Host nocheinmal neu (siehe Beitrag + Link oben)... Ansonten würd ich mal mit dem Admin reden ... Gruß Micha Zitat: Original erstellt von einweg: Hallo, habe das Makro in Word VBA Editor kopiert und die gleiche Fehlermeldung erhalten. Laufzeitfehler 429 ... Kann ich jetzt noch irgendwas tun? Gruß einweg
------------------ http://classicvb.org/petition/ Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rigobert Mitglied Konstrukteur
Beiträge: 239 Registriert: 21.11.2001 SWX 2017x64-Edition SP 4.1
|
erstellt am: 10. Mrz. 2006 12:26 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
Hallo, nochmal zurück zum sportlichen Teil: Am kürzesten erscheint mir : Debug.Print "Test" Gruß Andreas und schönes WE ------------------ [Diese Nachricht wurde von Rigobert am 10. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
einweg Mitglied
Beiträge: 7 Registriert: 07.03.2006
|
erstellt am: 10. Mrz. 2006 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für Catler
|