• 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.

VBA wijziging naar office 365 functie werkt niet meer

Status
Niet open voor verdere reacties.

carloschouw

Gebruiker
Lid geworden
15 jun 2015
Berichten
225
Goedemorgen,

Recent heeft er een omzetting van Office 2016 naar Office 365 plaatsgevonden waardoor er een VBA functie niet meer werkt. De code waar het om gaat is:

Code:
Public Function InputBoxDK(Prompt As String, Optional Title As String, _
    Optional Default As String, _
    Optional Xpos As Long, _
    Optional Ypos As Long, _
    Optional Helpfile As String, _
    Optional Context As Long) As String
     
    Dim lngModHwnd As Long, lngThreadID As Long
     
    On Error GoTo ExitProperly
    lngThreadID = GetCurrentThreadId
    lngModHwnd = GetModuleHandle(vbNullString)
     
    hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
    If Xpos Then
        InputBoxDK = InputBox(Prompt, Title, Default, Xpos, Ypos, Helpfile, Context)
    Else
        InputBoxDK = InputBox(Prompt, Title, Default, , , Helpfile, Context)
    End If
     
ExitProperly:
    UnhookWindowsHookEx hHook
     
End Function

Dit is een code die een wachtwoord input vraagt om cellen vrij te geven voor schrijfrechten.

Deze foutmelding ontvang ik sinds de omzetting naar 365:

Compileerfout: een variabele is niet gedefinieerd. Foutverwijzing is naar deze regel lngThreadID = GetCurrentThreadId

Iemand een idee hoe ik dit kan verhelpen?
 
Ik krijg 'm hier: GetModuleHandle
Heb je alle declaraties wel in orde? Voor 64 bits heb je andere nodig (PtrSafe) dan bij 32 bits.
 
Hier krijg je de declaraties wel mee op orde, maar daarmee ben je er nog niet, want je roept ze aan met parameters die je niet meegeeft of niet hebt.
Code:
''#If Win64 Then
#If VB7 Then
    Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long
    Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" _
        (ByVal lpModuleName As String) As LongPtr
    Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
        (ByVal idHook As Long, ByVal lpfn As LongPtr, _
        ByVal hmod As LongPtr, ByVal dwThreadId As Long) As LongPtr
    Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" _
        (ByVal hhk As LongPtr) As Long
#Else
    Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long
    Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" _
        (ByVal lpModuleName As String) As Long
    Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
        (ByVal idHook As Long, ByVal lpfn As Long, _
        ByVal hmod As Long, ByVal dwThreadId As Long) As Long
    Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" _
        (ByVal hhk As Long) As Long
#End If
 
Dank voor het meedenken en jullie hulp!

Ik kom er niet goed uit, blijf foutmeldingen krijgen. Ik probeer ondertussen een andere oplossing die geen 365 foutmelding meer geeft alleen krijg ik hem niet lekker werkend.




Code:
Private Sub CommandButton1_Click()

Dim name As String
name = Application.InputBox("Please enter password")
If Len(name) = "" Then Exit Sub
MsgBox "Wrong password", vbCritical
If Len(name) = "TEST" Then
End If

     TextBox1.Enabled = True
     TextBox2.Enabled = True

            Exit Sub
 
End Sub


Bedoeling is dat wanneer men een fout wachtwoord ingevuld heeft een msgbox verschijnt "fout wachtwoord", inputbox verdwijnd om opnieuw op te starten of de inputbox wordt "reset" Wanneer je het juiste wachtwoord ingevuld het (wachtwoord TEST) worden TextBox 1 en 2 omgezet naar True.

Ik krijg een foutmelding in deze stap: If Len(name) = "" Then Exit Sub

Wat doe ik verkeerd?
 
maak van If Len(name) = "" Then Exit Sub

eens If Len(name) = 0 Then Exit Sub
 
Dat werkt inderdaad! Die stap gaat nu goed alleen zit er geen check op een juiste wachtwoord, ik krijg een foutmelding op dit deel

Code:
MsgBox "Wrong password", vbCritical
If Len(name) = "TEST" Then

Wanneer ik een verkeerd wachtwoord invoer volgt wel de msgbox "wrong password" maar dan gevolgd met een VBA foutmelding en verwijst naar dit deel van de code. Dit geldt óók wanneer ik een GOED wachtwoord invul
 
Len(name) = “test” gaat ook fout
Het geeft altijd een nummer terug. Len weglaten daar dus
 
Laatst bewerkt:
Dat werkt inderdaad, géén foutmeldingen meer!

Echter wanneer ik géén of een verkeerde wachtwoord invul dan gaat TextBox 1 en 2 beide op .True terwijl dat alleen maar zou moeten (mogen) wanneer je het juiste wachtwoord ingevuld hebt
 
Ik heb het uiteindelijk werkend gekregen. Dit is de code geworden:

Code:
Private Sub CommandButton1_Click()

Dim name As String
name = Application.InputBox("Please enter password")
If (name) = "" Then Exit Sub
If (name) <> "TEST" Then
MsgBox "Wrong password", vbCritical

Else

     TextBox1.Enabled = True
     TextBox2.Enabled = True

            Exit Sub
 
End If

End Sub

Bedankt voor jullie steun!
 
Code:
Sub M_snb()
   Do
   Loop Until InputBox("WW", "overbodig") = "snb"

   MsgBox "mooi zo", , " "

   TextBox1.Enabled = True
   TextBox2.Enabled = True
End Sub
 
Fijn snb!

Het verschil tussen de "oude" code en deze nieuwe is dat de oude een ******* aangeeft tijdens invoer van het wachtwoord. Met de nieuwe code heb je dit niet, je ziet het in te voeren wachtwoord. Het werkt maar het liefst zou ik wel de ***** willen blijven behouden maar dat lukt niet via office 365 en de oude code
 
Gebruik een userform. Geen 64 bit problemen en wel ***.
 

Bijlagen

  • UserformAskingForPassword.xlsm
    24 KB · Weergaven: 14
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan