Option Explicit
Option Private Module
' --------------------------------------------------------- 
 ' Funktion fktGetTempFileName 
 ' Eingestellt von: Andre Schau 
 ' Datum: 5. Juno 2012 
 ' Kommentar: Funktion zur Ermittlung eines freien 
 '            Dateinamens 
 ' Parameter: Name des Verzeichnis, optional Prefix 
 '            fuer Dateiname (max. 3 Zeichen) 
 ' Rückgabe:  Dateiname 
 ' 
 ' weitere benoetigte Programme und Funktionen 
 ' API-Funktion: GetTempFileName 
 ' Aufruf:   Beispiel siehe Sub callGetTempFileName() 
 ' Hinweis:  GetTempPath zur Ermittlung des TempPath 
 ' --------------------------------------------------------- 

Declare Function GetTempFileName Lib "kernel32" _
        Alias "GetTempFileNameA" (ByVal lpszPath As String, _
        ByVal lpPrefixString As String, ByVal wUnique As _
        Long, ByVal lpTempFileName As String) As Long
'Konstante fuer maximale Laenge der Pfadangabe 
Const MAX_PATH = 260
        
Private Sub callGetTempFileName()
'Variablendeklartion 
'String 
Dim TempFile$
   'Tempfile ermitteln, Parameter ist User's TempPath. 
   'Siehe API GetTempPath 
   TempFile = fktGetTempFileName("D:\Test\")
   'Wenn TempFile = "" dann 
   If TempFile = "" Then
     'Meldung ausgeben, kein Name ermittelbar 
     MsgBox "Name fuer Temporaere Datei konnte nicht ermittelt werden."
   'Oder (Wenn TempFile nicht "") 
   Else
     'Meldung mit Name ausgeben 
     MsgBox "Name fuer Temporaere Datei: " & TempFile
   'Ende Wenn TempFile = "" dann 
   End If
End Sub

Private Function fktGetTempFileName(strTempDir As String, _
                 Optional strPref As String = "~TF") As String
'Variablendeklartion 
'Long 
Dim Result&
'String 
Dim Buff$
'Wenn uebergebenes strTempDir leer, dann Funktion verlassen 
'Hinweis: Verzeichnis muss existieren! 
If strTempDir = "" Then Exit Function
'Leerstring bilden 
Buff = Space$(MAX_PATH)
'temporaeren Dateiname mit API ermitteln 
'Result ergibt Laenge des Dateinamens 
'bea: Funktion liefert CHR(0) am Ende 
'     des Dateinamens 
'Hinweis: strPref max. 3 Zeichen! 
Result = GetTempFileName(strTempDir, strPref, 0&, Buff)
'Wenn Laenge des Namens (Result) = 0 dann Funktion verlassen 
If Result = 0 Then Exit Function
'tatsaechliche Laenge des Namens ermitteln 
Result = InStr(1, Buff, Chr(0))
'Wenn Laenge des Namens (Result) > 0 dann 
If Result > 0 Then
  'buff auf Pfadangabe kuerzen und als 
  'Funktionsergebnis zurueckgeben 
  fktGetTempFileName = Left$(Buff, Result - 1)
'Oder (Wenn Laenge des Namens (Result) = 0) 
Else
  'buff als Funktionsergebnis zurueckgeben 
  fktGetTempFileName = Buff
'Ende Wenn Laenge des Namens (Result) > 0 dann 
End If
End Function