2016-08-02 102 views
-1

的意外标识符我已经删除了以下全局变量。这些将被模块使用。VBa编译错误:私人类型**** EMID

但是在“私有类型**** EMID”行我得到一个编译错误:预期的标识符。 我从来没有使用过这些声明。你能建议需要做什么吗?

'- 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 
'--------------------------------------------------------------------------------------------------------- 

回答

0

您需要删除星号。

EMID和ITEMIDLIST是自定义数据类型不是全局变量。

这里是你的代码是这样做的:

变量PIDL作为类型ITEMIDLIST被传递的ByRef作为参数传递给它在动态链接库(DLL)中发现的Win32函数SHGetSpecialFolderLocation:shell32.dll中。该函数将从pidl变量中检索和/或设置值。在这种情况下,它正在设置它的值。

'- 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 
'--------------- 

我会用一个FileSystemObject的GetTempName Method代替API调用的。

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

谢谢Thomas。我脱掉了****,它的工作! – Nash

+0

欢迎您。感谢您的复选标记! – 2016-08-04 15:49:07