Tipp 1.21 - TMP Datei erstellen

Wie kann ich eine temporäre Arbeitsdatei erstellen?

Mit dieser Funktion können Sie eine temporäre Arbeitsdatei erstellen. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: DeleteFile, GetTempPath, GetTempFileName

Beispiel:

Option Explicit
 
Public Declare Function DeleteFile _
    Lib "kernel32" Alias _
    "DeleteFileA" _
    (ByVal lpFileName As String) _
    As Long
Public Declare Function GetTempPath _
    Lib "kernel32" Alias _
    "GetTempPathA" _
    (ByVal nBufferLength As Long, _
    ByVal lpBuffer As String) _
    As Long
Public 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
 
Public Function GetTempFile( _
                Optional sExtension As String = vbNullString, _
                Optional bKillFile As Boolean = True) _
                As String
  '// -----------------------------------------------------
  '// Methode:   | Temporäre Arbeitsdatei erstellen
  '// -----------------------------------------------------
  '// Parameter: | sExtension (optional)
  '//            | - alternative Dateiendung
  '//            | bKillFile (optional)
  '//            | - die Datei wird gelöscht
  '// -----------------------------------------------------
  '// Rückgabe:  | kompletter Pfad der temporären
  '//            | Arbeitsdatei
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  Const csPREFIX  As String = "$$_"
 
  Dim sTmpFile    As String
  Dim sBuffer     As String
  Dim sTmpDir     As String
  Dim lResult     As Long
 
  sBuffer = VBA.String(260, 0)
  GetTempPath Len(sBuffer), sBuffer
  sTmpDir = VBA.Left$(sBuffer, _
                      VBA.InStr(sBuffer, vbNullChar) - 1)
 
  sBuffer = VBA.String(260, 0)
  GetTempFileName sTmpDir, csPREFIX, 0, sBuffer
  sTmpFile = VBA.Left$(sBuffer, _
                       VBA.InStr(sBuffer, vbNullChar) - 1)
  If bKillFile Then Call DeleteFile(sTmpFile)
  If Len(sExtension) > 0 Then
    sTmpFile = Left$(sTmpFile, _
                     InStrRev(sTmpFile, ".")) + sExtension
  End If
  GetTempFile = sTmpFile
 
End Function