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

code bijwerken voor 64-Bit

Status
Niet open voor verdere reacties.

bkoppers

Gebruiker
Lid geworden
11 jan 2011
Berichten
110
Hopelijk kan iemand mij helpen,

ik heb een Klassenmodules met onderstaande code, echter op een andere computer krijg ik nu de melding

Compileerfout:

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


Kan iemand mij uitleggen wat ik precies moet doen, alvast bedankt.


Code:
Option Explicit


' 32-bit API declaration
Private Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long


' 16-bit API declaration
 Private Declare Function GetSystemMetrics16 Lib "user" Alias "GetSystemMetrics" (ByVal nIndex As Integer) As Integer

Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1


Property Get SchermBreedte()
Dim vidWidth As Integer
    If Left(Application.Version, 1) = 5 Then
'       16-bit Excel
        vidWidth = GetSystemMetrics16(SM_CXSCREEN)
    Else
'       32-bit Excel
        vidWidth = GetSystemMetrics32(SM_CXSCREEN)
    End If
    SchermBreedte = vidWidth '+ 0.5 * Application.Left
End Property

Property Get SchermHoogte()
    Dim vidHeight As Integer
    If Left(Application.Version, 1) = 5 Then
'       16-bit Excel
        vidHeight = GetSystemMetrics16(SM_CYSCREEN)
    Else
'       32-bit Excel
        vidHeight = GetSystemMetrics32(SM_CYSCREEN)
    End If
    SchermHoogte = vidHeight
End Property
 
Code:
#If Win64 Then
    [COLOR="#008000"]' 64-bit API declaration[/COLOR]
    Private Declare PtrSafe Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
#Else
    [COLOR="#008000"]' 32-bit API declaration[/COLOR]
    Private Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
#End If
 
Kan veeel simpeler met:

Code:
Sub M_snb()
  For Each it In GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
     MsgBox "Breedte : " & it.ScreenwidtH & vbLf & "Hoogte: " & it.screenheight
  Next
End Sub
 
Laatst bewerkt:
Die eerste werkt prima op 64-Bit Office.
 
Laatst bewerkt:
@Edm

Bedankt !
Ben ik ook weer een hoop wijzer: en heb de tweede versie daarom maar verwijderd.
 
Laatst bewerkt:
Heb ik jou ook eens wat wijzer gemaakt ;)
 
Allemaal bedankt voor jullie antwoorden


ik heb het opgelost door "Private Declare Function" te wijzigen in "Private Declare PtrSafe"
 
Als je doet wat ik in #3 liet zien werkt het voor zowel 32- als 64-bit Office.
En met wat er in #4 staat heb je er helemaal geen omkijken naar.
 
Laatst bewerkt:
Ach ja, waarom zouden we het eenvoudig te onderhouden doen.
 
Als je doet wat ik in #3 liet zien werkt het voor zowel 32- als 64-bit Office.
En met wat er in #4 staat heb je er helemaal geen omkijken naar.

Ik heb je oplossing uit #3 gebruikt, dankjewel voor je input.

Zou je mij willen uitleggen hoe ik #4 moet gebruiken
 
In de klassemodule:

Verwijder alle code

Gebruik vervolgens: zie de bijlage

Terzijde: waarom je hiervoor een klasse zou gebruiken is mij een raadsel.
Een simpele Function volstaat.
Code:
Sub M_snb()
   MsgBox "breedte: " & F_scherm(0)
   MsgBox "hoogte: " & F_scherm(1)
End Sub

Function F_scherm()
  For Each it In GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
     F_scherm = Array(it.screenwidth, it.screenheight)
  Next
End Function
 

Bijlagen

  • __Class_scherm_snb.xlsb
    14,3 KB · Weergaven: 11
Laatst bewerkt:
Dit is meer een gevalletje van " Goed gejat is beter dan slecht zelf bedacht" :eek:

ik heb deze klasse ooit eens gevonden op internet voor een userform in fullscreen te krijgen ongeacht welk beeldscherm gebruikt wordt.
Als je daar een betere oplossing voor hebt, hoor ik het graag. want als ik nu jou bovengenoemde code gebruik, wordt mijn userform maar 120pix x 29pix :confused:
 
Laatst bewerkt door een moderator:
Laat ons niet raden en plaats je bestand.
 
Waarom niet zo:
Code:
Private Sub UserForm_Initialize()
    With Application
        .WindowState = xlMaximized
        Width = .Width
        Height = .Height
    End With
End Sub
 
Waarom niet zo:
Code:
Private Sub UserForm_Initialize()
    With Application
        .WindowState = xlMaximized
        Width = .Width
        Height = .Height
    End With
End Sub

Dit lijkt perfect te werken, ook op een laptop scherm wat eerder een probleem was, dankjewel.
 
En als je wilt dat je Excelwindow niet ook vergroot wordt is dit misschien wel beter:
Code:
Private Sub UserForm_Initialize()
    With Application
        wstate = .WindowState
        .WindowState = xlMaximized
        Width = .Width
        Height = .Height
        .WindowState = wstate
    End With
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan