Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

In Verzeichnis das File mit höchster Revision | Herbers Excel-Forum


Betrifft: In Verzeichnis das File mit höchster Revision von: ChrisW
Geschrieben am: 11.01.2012 14:13:01

Hallo Leute,

Folgendes Problem:

Ich rufe mit meinem Makro eine Datei aus einem Verzeichnis auf mit dem folgenden Namen:

"DateiRev23.xlsx"

Ich kenne die aktuelle Revisionsnummer (hier "23") nicht, was bisher jedoch egal war, da es nur eine Datei mit dem Namen "DateiRev??.xlsx" in diesem Verzeichnis gab und die Vorgänger Revision aus dem Verzeichnis gelöscht wurde.
Ich konnte den Namen also folgendermaßen ermitteln:

strFile = Dir("C:\SpezielleDaten\DateiRev??.xlsx", vbNormal)

Jetzt ist es aber so, das die Vorversionen alle im Verzeichnis verbleiben, d.h. es gibt die Datei "DateiRev20.xlsx", "DateiRev21.xlsx", "DateiRev22.xlsx", "DateiRev23.xlsx" im gleichen Verzeichnis.

Wie kann ich den Namen der letzten= höchsten Revision mit VBA ermitteln, um diese letzte revisionierte Datei dann öffnen zu können?

Vielen Dank für Eure Hilfe

Chris

  

Betrifft: Dateiname der letzten Rev.Nr. per UDF anzeigen von: NoNet
Geschrieben am: 11.01.2012 14:24:26

Hallo Chris,

eine ganz simple Lösung ist die, die Dateien in einer eigenen UDF zu ermitteln - hier ein Beispiel :

Sub Testen()
    'Zeigt die letzte Revisionsnr. der Datei an :
    MsgBox strLetzteDatei("C:\SpezielleDaten\DateiRev??.xlsx")
End Sub

Function strLetzteDatei(strFileSpec As String)
    Dim strA As String, strD As String, strT As String
    
    strD = Split(strFileSpec, "\")(UBound(Split(strFileSpec, "\")))
    
    Do
        If strT = "" Then
            strA = Dir(strFileSpec)
        Else
            strA = Dir
        End If
        
        If UCase(strA) Like UCase(strD) Then
            strT = strA
        Else
            strA = ""
        End If
    Loop Until strA = ""
    
    strLetzteDatei = strT
End Function
Gruß, NoNet


  

Betrifft: Funktioniert (wie immer) von: ChrisW
Geschrieben am: 11.01.2012 14:41:37

Hallo NoNet,

Super Klasse,
Wie gewohnt eine präzise, schnelle und vor allem einfache aber geniale Lösung.
Ich sollte mich mal gezielter mit "Functions" auseinandersetzen ;c)

Vielen Dank


Chris


  

Betrifft: Warum heißt die UDF strLetzteDatei, ... von: Luc:-?
Geschrieben am: 11.01.2012 23:26:22

…NoNet,
wo ihr Ergebnis doch gar nicht explizit As String vereinbart wird? ;->
Manche würden dann ja fncLetzteDatei schreiben, was ich zumindest bei UDFs für den TabBlattEinsatz besonders ulkig finde. Keiner möge mir hier was von UN erzählen, denn das ist das mitnichten, nur die von den WinPgmierern erfundene ziemlich sinnfreie Verballhornung derselben. Im Sinne des ursprgl Erfinders ist das ohnehin zumeist nicht (da wären es auch nur 2 Buchstaben!) und schon gar nicht im Sinne der Clear-Code-Anhänger.;-)
Gruß Luc :-?


  

Betrifft: @Luc: Function Test1 bis Test999 .... von: NoNet
Geschrieben am: 12.01.2012 13:02:34

Hey Luc,

ja tatsächlich : Woher kommt denn das str im UDF-Namen ;-)) ?

Damit streut man dem strebsamen User doch "Sand in die Augen" ;-)...

Ich musste mir ja einen neuen UDF-Namen ausdenken (Test1() bis Test999() sind leider schon belegt :->) und als Abgrenzung zu datLetzteDate() fiel mir (unkreativerweise) nur strLetzteDatei() ein.

Über die UN kann man denken wie man möchte - sie schaden ja grundsätzlich nicht und sind zumindest zur Unterschedung zu Schlüsselwörtern als Variablen- oder UDF-Namen nützlich (ganz grauenhaft und garantiert nicht dienlich finde ich es, wenn jemand ROW oder CELLS oder SHEET als Variablenname verwendet !!). Im Laufe der Zeit entwickelt wohl jeder seinen Stil (dieser kann sich auch verändern - wenn auch nur schwerlich) - und solange es keine strikten Vorgaben gibt (ich habe früher in COBOL74/85 programmiert, dort mussten die Codezeilen an Pos. 8 beginnen und ALLES musste genauestens deklariert werden !), kann sich der Programmierer ja "austoben" (nur bitte keinen "Spaghetti-Code" !!) wie er will.....


In diesem Sinne : Ciao, NoNet


  

Betrifft: Na, dann, weiter so u.auf ein Neues! ;-) Gruß owT von: Luc:-?
Geschrieben am: 12.01.2012 14:03:31

:-?


  

Betrifft: Apropos Spaghetti, NoNet; da gibt's ja auch ... von: Luc:-?
Geschrieben am: 13.01.2012 19:56:26

…Pgmme auf dem Markt, die machen das absichtlich aus einem beliebigen ordentl PgmCode. Nennt man Obfuszieren! In der Folge entsteht sog CrunchCode, der es Pw-Hackern und Dekompilierern schwer machen soll, den Code zu verstehen, was ja normalerweise die Voraussetzung für seine Assimilation in eigene Entwicklungen wäre. Übrigens bringt VBA von Hause aus 'ne Fkt mit, mit deren Hilfe so Einiges verschleiert wdn kann. Das wird natürlich in der VBE-Hilfe nicht erwähnt — muss man also selber drauf kommen! ;-)
Aber die PgmierEleven sollen es natürlich erst mal ordentlich lernen…
Gruß Luc :-?


Beiträge aus den Excel-Beispielen zum Thema "In Verzeichnis das File mit höchster Revision"