VBA 64 bits

Status
Niet open voor verdere reacties.

TonyLa

Gebruiker
Lid geworden
22 apr 2020
Berichten
19
Beste redders in nood.
Mijn oude pc (7 jaar) heeft de geest gegeven.
Daarop draaide een Excel programma (Scorebord)met macro en vba foutloos.
Dit moet een 2 beeps geven als een bepaalde cel gevuld wordt, en 1 beep wanneer een andere cel wordt gevuld.
Nu heb ik me een nieuwe aangeschaft rn werkt voornoemde programma niet meer.
Waarschijnlijk zit de fout in het feit dat de nieuwe pc een 64-bits is, en het programma geschreven is op 32-bits pc.
Nu zou dit programma natuurlijk moeten kunnen draaien op 32 en 64 bits.
Bij het starten van een opdracht krijg ik de melding zoals hier onder is meegegeven.
Hopelijk kunnen jullie me op de goede weg helpen.
TonyLa

Computerfout;
De code in dit project moet worden bijgewerkt voor gebruik op 64-bits systeem.
Controleer de instructies, werk ze bij en markeer ze met het kenmerk PtrSafe.


Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Dim oldValue

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next

Set KeyCells = Range("A38")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

If oldValue = "" And KeyCells <> "" Then
Beep 900, 500
Beep 900, 500
End If
End If

On Error Resume Next

Set KeyCells = Range("A40")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

If oldValue = "" And KeyCells <> "" Then
Beep 900, 500

End If
End If

End Sub
 

Bijlagen

  • Sreen shot.docx
    43,4 KB · Weergaven: 59
Het gaat niet om Windows 64-bit maar om Office.
Vervang die functie declaratie door dit om zowel 32- als 64 bit Office te ondersteunen:
Code:
#If VBA7 Then
    Private Declare PtrSafe Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Boolean
#Else
    Private Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal Frq As Long, ByVal Dur As Long) As Boolean
#End If
 
Laatst bewerkt:
Beste Edmoor,
Heb uw voorstel uitgeprobeerd, maar de lijn achter Else blijft rood.
Misschien doe ik nog iets verkeerd?

#If VBA7 Then
Private Declare PtrSafe Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Boolean
#Else
Private Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal Frq As Long, ByVal Dur As Long) As Boolean
#End If
Dim oldValue

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next

Set KeyCells = Range("A38")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

If oldValue = "" And KeyCells <> "" Then
Beep 900, 500
Beep 900, 500
End If
End If

On Error Resume Next

Set KeyCells = Range("A40")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

If oldValue = "" And KeyCells <> "" Then
Beep 900, 500

End If
End If

End Sub
 
Laatst bewerkt:
Dat er een rode regel blijft klopt.
Maar omdat het om een Compiler Directive gaat zit dat niks in de weg.
Die moet je zelfs gewoon laten staan.
Bij een 32-bit Office installatie zal je zien dat de andere regel rood is.
De code is gewoon goed.

Kennelijk heb je het dus nog niet getest.

PS:
Als je hier code plaatst, zet deze dan in codetags.
Zie de link in mijn handtekening.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan