foutmelding 453

Status
Niet open voor verdere reacties.

kamphuis11

Gebruiker
Lid geworden
24 mrt 2018
Berichten
42
Hoi,

Ik maak gebruik van een access bestand waar een inlog/rechten gedeelte bij zit. Het inloggen gaan in cominatie met het windows naam en wachtwoord (dwz; je logt in met je windows accountnaam en het windows wachtwoord). Het werkt goed op meerdere machines, alleen op mn werklaptop en desktop op werk krijg ik de volgende foutmelding.

Fout 453 tijdens uitvoeren:
Kan ingangspunt van DLL GetWindowLongA in User 32 niet vinden


Ik heb ook op google gekeken, kom ik niet iets tegen waardoor ik snap waarom het niet werkt.

Ligt dit aan access of is er iets niet goed met de windows instalatie van mn werkcomputers (domein)?

Heeft iemand hier kennis van?Capture1.JPG
 
En wat wordt er getoond als je op Foutopsporing klikt?
 
Die functie declaraties zijn voor 64-bit Office.
Heb je dat ook inderdaad?
 
De laptop is 64 bits. (zie bijlage) Hetzelfde als de apparaten waar het wel op werkt. Ik weet niet waar dit probleem in zit. Capture3.JPG

Is ms access corrupt oid of is het iets qua instellingen dat mn werkgever niet toestaat?
 
Mijn vraag was of je Office 64- of 32-bit is.
Dat staat los van je Windows installatie.
Als je niet weet waar dat te vinden is kan je deze even uitvoeren:
Code:
Sub eTest()
    #If Win64 Then
        MsgBox "Office is 64-bit"
    #Else
        MsgBox "Office is 32-bit"
    #End If
End Sub
 
Laatst bewerkt:
sorry ... ik las het niet goed. Ik heb gekeken en het is 32 bits. Daar zit dus hoogstwaarschijnlijk het probleem. Is dit aan te passen in het programmatuur van het access bestand dat zowel 32 als 64 bits hier gebruik van kan maken?
 
De declaratie van de API functies is, zoals ik al zei, specifiek voor Office 64-bit.
Hoe je het kan controleren liet ik al zien.
De declaraties voor 64-bit Office zijn dus zo in orde.
Voor 32-bit Office kan je in dit geval eenvoudig het woord PrtSafe verwijderen.

Dus om beide te ondersteunen kan je dit doen:
Code:
#If Win64 Then
    [COLOR="#008000"]'Declaraties voor 64-bit Office[/COLOR]
#Else
    [COLOR="#008000"]'Declaraties voor 32-bit Office[/COLOR]
#End If

Als er ergens nog LongPtr staat wijzig je dat voor de 32-bit declaratie in Long.
 
Laatst bewerkt:
Je maakt het jezelf bepaald niet makkelijk door met meerdere Office versies te werken; bestanden zijn in beginsel niet uitwisselbaar. Bovendien zit er geen enkel voordeel in de 64 bits versie t.o.v. de 32 bits. OK, je houdt mensen zoals edmoor uit de kroeg en van de straat met dit soort vragen. Is ook wat waard :).
 
Ook zonder vragen als deze kom ik nooit in een kroeg, maar misschien moeten wij eens samen een biertje pakken ;)
 
De declaratie van de API functies is, zoals ik al zei, specifiek voor Office 64-bit.
Hoe je het kan controleren liet ik al zien.
De declaraties voor 64-bit Office zijn dus zo in orde.
Voor 32-bit Office kan je in dit geval eenvoudig het woord PrtSafe verwijderen.

Dus om beide te ondersteunen kan je dit doen:
Code:
#If Win64 Then
    [COLOR="#008000"]'Declaraties voor 64-bit Office[/COLOR]
#Else
    [COLOR="#008000"]'Declaraties voor 32-bit Office[/COLOR]
#End If

Als er ergens nog LongPtr staat wijzig je dat voor de 32-bit declaratie in Long.

Is er nog een bepaalde plek waar ik dit stukje code hoor te zetten? Erg bedankt voor je advies!
 
Is er nog een bepaalde plek waar ik dit stukje code hoor te zetten? Erg bedankt voor je advies!
Bovenin :). Daar waar je de declaraties dus hebt staan. Overigens prima dat je mijn opmerking om niet met twee verschillende Office versies te werken negeert. Je zult er ongetwijfeld een goede reden voor hebben om ze wél naast elkaar te gebruiken.
 
Het is niet dat ik je negeer ... ik ben blij met de tips. Ik heb hier niet veel verstand van en ben aan het uitzoeken hoe jullie dit bedoelen. Voor jou is dit misschien gesneden koek :) en daarom zullen mijn vragen misschien raar zijn (?).

Ik zit nu met een "dingetje" Ik heb een super tof Access bestand wat ik voor mn werk wil gebruiken. Het inlog/rechten gedeelte is dus voor Office 64 bit machines, echter draaien de computers op mn werk op Office 32 bit.

Wat bedoel je pressies met bovenin?

Dankjewel
 
Kijk eens waar de declaraties nu staan... Die zijn dus voor een Office64 versie. Daar moet je dus twee varianten maken, op de manier zoals is aangegeven.
Je zet dus de regel #If Win64 Then erboven, de rest er onder. Dan heb je het eerste deel van de declaraties in het Win64 stuk staan, en maak je onder de #Else en boven de #End If de Win32 declaraties.
 
Om het toch maar compleet te maken heb ik je plaatje door een OCR gehaald om het niet allemaal te hoeven overtypen en er dit van gemaakt.
De 32-bit declaratie zal in een 64-bit Office helemaal rood worden weergegeven. Daar hoef je je niets van aan te trekken.

Testen mag je zelf doen, want ik weet zo niet of de OCR wel helemaal goed gegaan is.
Plaats anders je document.
Code:
Option Explicit

Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIHIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000
Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED

[COLOR="#008000"]'Voor 64-bit Office ---------------------------------------------[/COLOR]
#If Win64 Then
    Private Declare PtrSafe Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" (ByVal hWnd As Long, _
        ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    
    Private Declare PtrSafe Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" (ByVal hWnd As Long, _
        ByVal nIndex As Long) As Long
    
    Private Declare PtrSafe Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, ByVal hWndlnsertAfter As Long, _
         ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
         ByVal cy As Long, ByVal wFlags As Long) As Long

[COLOR="#008000"]'Voor 32-bit Office ---------------------------------------------[/COLOR]
#Else
    Private Declare Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" (ByVal hWnd As Long, _
        ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    
    Private Declare Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" (ByVal hWnd As Long, _
        ByVal nIndex As Long) As Long
    
    Private Declare Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, ByVal hWndlnsertAfter As Long, _
         ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
         ByVal cy As Long, ByVal wFlags As Long) As Long
#End If

Sub HideAccessCloseButton()
    Dim hWndAccessApp As Long
    Dim IngStyle As Long
    
    IngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
    IngStyle = IngStyle And Not WS_SYSMENU
    Call SetWindowLong(hWndAccessApp, GWL_STYLE, IngStyle)
    Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan