SendKeys

Status
Niet open voor verdere reacties.

rmanders1945

Gebruiker
Lid geworden
26 feb 2016
Berichten
15
Hoi,
ik zou graag een antwoord willen hebben op onderstaand probleem.
Ik heb dankzij jullie geweldige Helpmij site onderstaande oplossing in een excel doc gezet.

Code:
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    
Sub SetNumLockOn()
    Dim NumLockState As Boolean
    Let NumLockState = CBool(GetKeyState(vbKeyNumlock) And 1)
    If Not NumLockState Then
        SendKeys "{NUMLOCK}", True
    End If
End Sub



Binnen Office 2017 werkt dit prima, echter binnen Office 2019 krijg ik de volgende foutcode:


https://docs.microsoft.com/nl-nl/of...elp/compile-error-in-hidden-modulemodule-name

Is hier een oplossing voor?
Ik ben bijzonder benieuwd.
Alvast bedankt voor de genomen moeite.
Rob
 
Office 2017?
En de fout gaat dus over een Module en toon je niet je module informatie er bij.
Heb je Office 2019 32- of 64-bit?
 
Laatst bewerkt:
Sorry voor de onvolledige info.
De module waarin het wordt aangeroepen is:

Code:
[CODE]1
Sub FaktEmailenAlsPDF3()

Dim Bestand As String
Dim OutApp As Object
Dim OutMail As Object

Set OutlookApp = CreateObject("Outlook.Application")

Sheets("Aantekeningen").Unprotect

Sheets("Aantekeningen").Range("N13").Value = 0 '' als er iets fout gaat wordt het 1


directory = Sheets("Aantekeningen").Range("N5").Value

emailadres = "" & Sheets("VerkoopFaktuur").Range("E10").Value ''emailadres
naamlid = Sheets("VerkoopFaktuur").Range("E7").Value ''voornaam en achternaam

Filename = directory & " " & naamlid & " "


Bestand = Filename & ".pdf"

ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=Bestand


Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next

With OutMail
.To = emailadres
.CC = ""
.BCC = ""
.Subject = "Faktuur "
.Body = "Faktuur"
.Attachments.Add Bestand

.Display
Application.Wait (Now + TimeValue("0:00:02"))
Application.SendKeys "%z" '' z voor nederlandse versie outlook s voor engelse versie
'' .Send
End With

On Error GoTo fout

Kill Bestand
GoTo verder


fout:
MsgBox " niet verzonden ! "

Set OutMail = Nothing
Set OutApp = Nothing

Sheets("Faktuur").Select
Sheets("Aantekeningen").Range("C1").Value = 1

verder:

Call SetNumLockOn

End Sub[/CODE]
 
Laatst bewerkt door een moderator:
Dat is geen module, dat is een Sub.
En m'n vraag over je Office 2019 versie?
 
Heeft het te maken met "outlook redemption", dat je een veiligheids melding krijgt dat iets of iemand, wat met outlook wil versturen?
 
Code:
[COLOR="#FF0000"]#If VBA7 Then
    Declare PtrSafe Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#Else[/COLOR]
    Declare Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
[COLOR="#FF0000"]#End If[/COLOR]
    
Sub SetNumLockOn()
    Dim NumLockState As Boolean
    Let NumLockState = CBool(GetKeyState(vbKeyNumlock) And 1)
    If Not NumLockState Then
        SendKeys "{NUMLOCK}", True
    End If
End Sub
De rode code zorgt voor de 64-bit.
 
als ik betreffende code toevoeg dan blijft onderstaand script rood kleuren :

Declare PtrSafe Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer

Hoe los ik dit op ?
 
De rode kleur vormt geen probleem als de rest van de code klopt.
Haal wel alle beveiligingen weg die er zijn, beveiligingen maken meer kapot dan je lief is in deze fase.
 
Laatst bewerkt:
Sorry,
ik had de # niet overgenomen.

Lijkt of dit nu wel geaccepteerd wordt.
Ik ga dit zo snel mogelijk testen.
Hopelijk heb ik morgen daar een antwoord op.
In ieder geval nu alvast hartelijk dank voor de zeeeer snelle reactie.
Groetjes,
Rob
 
Staat de code in Module1?
Verander alle "Declare" eens in "Public declare"
Plaats anders een voorbeeldbestandje dat werkt makkelijker.
 
Is goed,
Daarom staat code in code-blokken zodat iedereen makkelijk kan kopieeren en plakken ;)
De code is universeel voor 32-bit en 64-bit, daar zorgen de #-compiler-directives voor.
 
Laatst bewerkt:
het gaat om de 64 bits versie.
En dat wilde ik om bovenstaande functie declaratie dus weten.
Een Module is trouwens de container waar je Subs en Functions in staan.
 
Hoi experts,

alles lukt nu fantastisch !

Geweldig dat jullie zo snel het probleem hebben opgelost, waarvoor heel veel dank.

Hartelijke groet,
Rob
 
Mooi zo :)

Ik ben trouwens wel benieuwd naar de reden waarom je Application.SendKeys "%z" gebruikt in plaats van .Send
 
Edmoor,

heb het ergens van internet gekopieerd.
Maar heeft deze wijziging ook consequenties betreffende mijn huidige programma of maakt dat niet veel verschil ?
Groetjes,
Rob
 
Voor je code maakt de wijziging niet uit.
Zoals al eerder gezegd zorgt die wijziging er voor dat je document in zowel 32- als 64-bit Office zal werken.

Tevens heb je nu geleerd dat die # tekens er echt in horen en dat het zgn. compiler directives zijn.
De #If VBA7 is True als het 64 bit is en False als het 32 bit is.
Dit bepaalt dus welk deel van de code wordt uitgevoerd.
 
Laatst bewerkt:
hoi experts,

is me nu allemaal duidelijk geworden.
Nogmaals allen bedankt voor de genomen moeite.

Groetjes,
Rob
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan