Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Ericolum am August 31, 2015, 11:08:53

Titel: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am August 31, 2015, 11:08:53
Hallo Leute,

ich hoffe ihr könnt mir weiterhelfen. Folgender VBA-Code funktioniert soweit, muss aber erweitert werden.

Private Sub Befehl4_Click()
  Dim scanText As String
  Dim PfadDateiNameGG  As String
 
    If (Text1) <> "" Then
       scanText = Text1  'eingeskannter Text
       PfadDateiNameGG = Dir(TextGG & "*" & scanText & ".pdf") ' ------TextGG=Dateiort; '*'=Erstelldatum,interessiert      aber nicht; scanText = eingescannter Text --> alles zusammen ergibt den Dateinamen------
   
           If (PfadDateiNameGG) <> "" Then
             FollowHyperlink (TextGG & PfadDateiNameGG) ' ----ruft die Datei auf *.pdf, hier müsste die aktuellste Version gefunden werden
   
           Else
             MsgBox "Kein Teil mit dem DMC = " & scanText & " gefunden!"
           End If

     Else
       MsgBox "Bitte DMC einscannen!"
     End If
   
  Me!Text1.SetFocus

End Sub

Ich baue mir aus einem eingescannten DMC (Datamatrixcode) und einerm Dateispeicherort einen Dateinamen zusammen und öffne diesen.

Problem: Es öffnet immer das zuerst angelegte PDF, ich möchte aber immer das aktuellste haben.

Dateinamen als Beispiel siehe Anhang!
 
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: MaggieMay am August 31, 2015, 14:54:38
Hi,
Zitat'*'=Erstelldatum,interessiert      aber nicht
das ist ja wohl nicht zutreffend, denn du willst ja die Datei mit dem jüngsten Datum öffnen, da bleibt dir wohl nichts anderes übrig, als auch das Datum mit einzubeziehen.

Ich hätte dazu folgenden Vorschlag für dich:
    Dim strTimeStamp As String, strFileName As String
    If Me!Text1 <> "" Then
        scanText = Me!Text1  'eingeskannter Text
        PfadDateiNameGG = Dir(TextGG & "*" & scanText & ".pdf")
        Do While PfadDateiNameGG <> ""
            If Mid(PfadDateiNameGG, 1, 18) > strTimeStamp Then
                strTimeStamp = Mid(PfadDateiNameGG, 1, 18)
                strFileName = PfadDateiNameGG
            End If
            PfadDateiNameGG = Dir
        Loop
        If strTimeStamp <> "" Then
             FollowHyperlink (TextGG & strFileName)
        Else
             MsgBox "Kein Teil mit dem DMC = " & scanText & " gefunden!"
        End If
    Else
        MsgBox "Bitte DMC einscannen!"
    End If

Dazu müssen Monat und Tag allerdings zwingend zweistellig (mit führender 0) formatiert sein.
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am August 31, 2015, 15:15:14
Danke erstmal,

aber die Formatierung des Dateinamens lässt sich leider nicht ändern bzw. ist zwingend so vorgegeben. Könnte man nicht das Erstelldatum in den Dateieigenschaften abfragen?
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: MaggieMay am August 31, 2015, 16:22:18
Zitatlässt sich leider nicht ändern bzw. ist zwingend so vorgegeben
Das ist ziemlich blöd, weil man die Strings dann nicht vergleichen kann. Die Bestandteile von Datums- und Zeitwerten schreibt man grundsätzlich mit führenden Nullen.

Außerdem gibt es keine Handhabe, die Tages- und Stundenzahl voneinander zu trennen.
Beispiel:
2015-8-212_20_3ist das jetzt der 21.8. 2:20 Uhr oder der 2.8. 12:20 Uhr???

Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am September 01, 2015, 07:31:27
Deshalb dachte ich man kann den Dateinamen vernachlässigen und das Erstelldatum vom Windowsdateisystem irgendwie abfragen und vergleichen. Gibt es da keine Möglichkeit den neuesten auszuwählen?
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: daolix am September 01, 2015, 12:36:34
Hallo
versuch
Call CreateObject("Wscript.shell").Run("cmd /c dir LW:\Path\" & "*" & scanText & ".pdf /T:C /O:-D /b | clip", 0, True)
With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard
If Len(.gettext) Then Debug.Print Split(.gettext, vbCrLf)(0)
End With

Anpassen musst du LW:\Path\" & "*" & scanText & ".pdf als auch T:C da ich nicht weiss was du nun willst, Änderungsdatum oder Erstellungsdatum
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am September 01, 2015, 12:56:57
Ich möchte "einfach" die neueste (bezogen auf Erstelldatum) PDF öffnen die mit der Bezeichnung (im Beispiel _SMT....) vorhanden ist. Der Rest wird nicht beachtet.

Nochmal zur Erklärung:

es gibt einen Meßmaschine dort werden Werkstücke Messtechnisch erfasst und jeweils das Protokoll abgelegt. Mein Code von Anfangs (rot) liest dieses Teil ein (mittels DMC Scanner) und öffnet das dazugehörige Protokoll. Der Code nimmt nun aber immer das erste PDF was er findet und öffnet dieses. Dahinter liegen aber noch mehr Protokolle mit anderen Datumsangaben, aber mit gleicher Seriennummer. Man müsste den Ordner anders herum auslesen, sodas es dann automatisch den letzten nimmt.

Den Dateinamen gibt eine Meßmaschine vor, dieser kann nicht verändert werden.   
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: daolix am September 01, 2015, 13:20:29
Ist schon klar, nur windows kennt bei den Dateinamen drei Daten: Erstellungsdatum, Letzter Zugriff, Letzter schreibzugriff(Änderungsdatum). Überschrift deines Threads als auch letzte Posts unterscheiden sich daher.
Oben gezeigter Code listet pdf's mit neusten Erstellungsdatum zuerst.
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am September 01, 2015, 13:23:51
Sorry habe das oben nicht ganz klar beschrieben. Ich möchte das Erstellungsdatum haben. Und Windows nimmt leider immer nur dass was wahrscheinlich zu erst steht und das ist nicht das aktuellste. 
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: daolix am September 01, 2015, 13:54:13
VBA-Dir ja, beim DOS'en-Dir kann man es wie gezeigt steuern, das die neusten oben stehen.
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am September 01, 2015, 14:06:01
Tut mir leid das versteh ich nicht. Kannst du das bitte genauer beschreiben?
Zitat--> VBA-Dir ja, beim DOS'en-Dir kann man es wie gezeigt steuern, das die neusten oben stehen.
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: daolix am September 01, 2015, 14:19:49
Du hast in deinem Code oben (geschrieben August 31, 2015, 11:08:53) die VBA-Funktion DIR verwendet.
Ich habe in meinem gezeigten Code (Heute 01.09.2015 um 12:36:34) hingegen den DOS-befehl Dir verwendet. Hierbei kann man Parameter übergeben mit denen die Ausgabe gesteuert werden kann
/T:C --> Anzeige ErstellungsDatum
/O:-D --> Sortierung nach Datum, hier die neusten zuerst,  bei /O:D sie ältesten zuerst.
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: MaggieMay am September 01, 2015, 14:33:39
Hi,

ich hätte hierzu noch folgendes beizutragen:
Private Sub Befehl4_Click()
    Dim scanText As String
    Dim DateiNameGG  As String
    Dim TimeStamp As Date, strFileName As String
    Dim Fso As Object, File As Object
    If Me!Text1 <> "" Then
        scanText = Me!Text1  'eingeskannter Text
        DateiNameGG = Dir(textgg & "*" & scanText & ".pdf")
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Do While DateiNameGG <> ""
            Set File = Fso.GetFile(textgg & DateiNameGG)
            If File.DateCreated > TimeStamp Then
                TimeStamp = File.DateCreated
                strFileName = DateiNameGG
            End If
            DateiNameGG = Dir
        Loop
        If strFileName <> "" Then
             FollowHyperlink (textgg & strFileName)
        Else
             MsgBox "Kein Teil mit dem DMC = " & scanText & " gefunden!"
        End If
    Else
        MsgBox "Bitte DMC einscannen!"
    End If
    Me!Text1.SetFocus           ' wozu?
    Set File = Nothing
    Set Fso = Nothing
End Sub
Titel: Re: FollowHyperlink mit Änderungsdatum verknüpfen
Beitrag von: Ericolum am September 02, 2015, 10:21:13
@ MaggieMay --> Code hat auf Anhieb funktioniert! Super danke!

das .SetFocus wird am Ende gesetzt damit der Focus wieder auf dem Einlesefeld steht, um die Eingabe ohne weiteres klicken auf den Bildschirm zu vereinfachen.