freestyler2
Gebruiker
- Lid geworden
- 5 mrt 2008
- Berichten
- 63
Ik heb een Excel bestand waarin een VBA script zit welke bestandsnamen (in bulk) kan aanpassen. Recentelijk is Office 365 geïnstalleerd en nu krijg ik een compileerfout:
"De code in dit project moet worden bijgewerkt voor gebruik op 64-bits systemen. Controleer de instructies, werk ze bij en markeer ze met het kenmerk PtrSafe."
Het betreft de volgende VBA code:
De code welke wordt aangemerkt als onjuist is in rood gemarkeerd.
Wie kan mij verder helpen met een oplossing voor deze compileerfout?
Ik heb inmiddels de oplossing zelf gevonden, toch bedankt voor het meedenken iedereen
https://docs.microsoft.com/en-us/of...ween-the-32-bit-and-64-bit-versions-of-office
Om andere met dezelfde foutmelding ook te helpen, dit is de oplossing:
"De code in dit project moet worden bijgewerkt voor gebruik op 64-bits systemen. Controleer de instructies, werk ze bij en markeer ze met het kenmerk PtrSafe."
Het betreft de volgende VBA code:
Code:
Option Explicit
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
'32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Function GetDirectory(Optional Msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
' Root folder = Desktop
bInfo.pidlRoot = 0&
' Title in the dialog
If IsMissing(Msg) Then
bInfo.lpszTitle = "Select a folder."
Else
bInfo.lpszTitle = Msg
End If
' Type of directory to return
bInfo.ulFlags = &H1
' Display the dialog
x = SHBrowseForFolder(bInfo)
' Parse the result
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
GetDirectory = Left(Path, pos - 1)
Else
GetDirectory = ""
End If
End Function
De code welke wordt aangemerkt als onjuist is in rood gemarkeerd.
Code:
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Wie kan mij verder helpen met een oplossing voor deze compileerfout?
Ik heb inmiddels de oplossing zelf gevonden, toch bedankt voor het meedenken iedereen

https://docs.microsoft.com/en-us/of...ween-the-32-bit-and-64-bit-versions-of-office
Om andere met dezelfde foutmelding ook te helpen, dit is de oplossing:
Code:
#If VBA7 Then ' VBA7
Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Type BROWSEINFO
hOwner As LongPtr
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As LongPtr
lParam As LongPtr
iImage As Long
End Type
#Else ' Downlevel when using previous version of VBA7
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
#End If
Sub TestSHBrowseForFolder()
Dim bInfo As BROWSEINFO
Dim pidList As Long
bInfo.pidlRoot = 0&
bInfo.ulFlags = &H1
pidList = SHBrowseForFolder(bInfo)
End Sub
Option Explicit
'32-bit API declarations
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Function GetDirectory(Optional Msg) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
' Root folder = Desktop
bInfo.pidlRoot = 0&
' Title in the dialog
If IsMissing(Msg) Then
bInfo.lpszTitle = "Select a folder."
Else
bInfo.lpszTitle = Msg
End If
' Type of directory to return
bInfo.ulFlags = &H1
' Display the dialog
x = SHBrowseForFolder(bInfo)
' Parse the result
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
GetDirectory = Left(Path, pos - 1)
Else
GetDirectory = ""
End If
End Function
Laatst bewerkt: