• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Excel / VBA applicatie werkt niet meer in O 2021

Status
Niet open voor verdere reacties.

Duke14

Nieuwe gebruiker
Lid geworden
14 jul 2023
Berichten
3
Hallo forumleden, ik heb wil een exceldocument openen waarin een vba applicatie is gebouwd. Het werkte voorheen inOffice 2007 maar niet meer in 2021. Er wordt aangegeven: 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. In het betreffende werkblad is deze tekst met rood aangegeven:

Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" ( _
pOpenfilename As OPENFILENAME) As Long

Kan iemand mij op het goede spoor zetten ? Houd er svp rekening mee dat ik onhandig ben op dit gebied.
Dank Duke
 
Vervang
Code:
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
                                           Alias "GetOpenFileNameA" ( _
                                           pOpenfilename As OPENFILENAME) As Long
Door
Code:
#If VBA7 Then
    Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias _
            "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
      
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As LongPtr
        hInstance As LongPtr
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As LongPtr
        lpfnHook As LongPtr
        lpTemplateName As String
    End Type
  
#Else

    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
            "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
      
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
#End If
bron: https://jkp-ads.com/articles/apideclarations.asp
 
Laatst bewerkt:
Code:
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( pOpenfilename As OPENFILENAME) As Long
Is onnodig ingewikkeld.
Code:
Application.FileDialog(msoFileDialogFilePicker)
Doet hetzelfde en is niet afhankelijk van 32bit of 64bit.

Vervang alle code in module Blad1(Verwerk) door
Code:
Option Explicit

Private Sub cmdSelectExport_Click()

    Dim lThisWorkbook As Workbook
    Dim lExportWorkbook As Workbook

    Dim sWorkbooksOpen As String

    Set lThisWorkbook = ThisWorkbook

    Worksheets("Vragen").Range("I2:I100").Value = ""

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Filters.Add "LimeSurvey export (*.xls)", "*.xls"
        .InitialFileName = ThisWorkbook.Path
        .Title = "Selecteer het LimeSurvey exportbestand"
        If .Show Then
            sWorkbooksOpen = .SelectedItems(1)
            Workbooks.Open (sWorkbooksOpen)
            Set lExportWorkbook = ActiveWorkbook
            If MsgBox("Het bestand is geselecteerd." & Chr(10) & "Klik OK om het bestand te verwerken.", vbInformation + vbOKCancel) = vbOK Then
                lExportWorkbook.Worksheets(1).Range("D2:BZ2").Copy
                lThisWorkbook.Worksheets("Vragen").Range("I2").PasteSpecial xlPasteValues, , , True
                lExportWorkbook.Close
            Else
                lExportWorkbook.Close
            End If
            Worksheets("Resultaat").Activate
            MsgBox ("Bestand is succesvol verwerkt")
        End If
    End With

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan