2016-08-02 1 views
-1

Ich habe die folgenden globalen Variablen deklariert. Diese werden von einem Modul verwendet.VBa Kompilierfehler: AUSGEZEICHNETER IDENTIFIZIERER für private Typ **** EMID

Allerdings in der Zeile "Private Type **** EMID" bekomme ich einen Kompilierfehler: Erwartete Kennung. Ich habe diese Deklarationen noch nie zuvor benutzt. Können Sie mir bitte vorschlagen, was zu tun ist?

'- to get Explorer folder 
Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _ 
    (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long 
Const CSIDL_WINDOWS = &H24 
'--------------------------------------------------------------------------------------------------------- 
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ 
    (ByVal pidl As Long, ByVal pszPath As String) As Long 
'--------------------------- 
Private Type ****EMID 
    cb As Long 
    abID As Byte 
End Type 
'--------------------------- 
Private Type ITEMIDLIST 
    mkid As ****EMID 
End Type 
'--------------------------------------------------------------------------------------------------------- 

Antwort

0

Sie müssen die Sternchen entfernen.

EMID und ITEMIDLIST sind Benutzerdefinierte Datentypen nicht globale Variablen.

Hier ist, was Ihr Code tut:

Eine Variable PIDL Als Typ ITEMIDLIST wird ByRef als Parameter an die Win32-Funktion SHGetSpecialFolderLocation geleitet wird, die in dem Dynamic Link Library (DLL) gefunden wird: shell32.dll. Die Funktion ruft Werte von der pidl-Variablen ab und/oder setzt sie. In diesem Fall werden die Werte festgelegt.

'- to get Explorer folder 
Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _ 
    (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long 
Const CSIDL_WINDOWS = &H24 
'--------------------------------------------------------------------------------------------------------- 
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ 
    (ByVal pidl As Long, ByVal pszPath As String) As Long 
'--------------------------- 
Private Type EMID 
    cb As Long 
    abID As Byte 
End Type 
'--------------------------- 
Private Type ITEMIDLIST 
    mkid As EMID 
End Type 
'--------------- 

würde ich GetTempName Method der einen Filesystem anstelle der API-Aufrufe verwenden.

Function getTempFileName() As String 
    Const TemporaryFolder = 2 
    Dim fso 
    Set fso = CreateObject("Scripting.FileSystemObject") 

    getTempFileName = fso.GetSpecialFolder(TemporaryFolder).Path & "\" & fso.GetTempName 

    Set fso = Nothing 
End Function 
+0

danke Thomas. Ich nahm den **** und es hat funktioniert !! – Nash

+0

Ihre Begrüßung. Danke für das Häkchen! –