Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel 32 / 64- Bit

Forumthread: Excel 32 / 64- Bit

Excel 32 / 64- Bit
14.11.2022 08:27:27
Thomas
Hallo!
Habe folgendes Problem:
Ich soll eine Adressdatei erstellen, die mehrere Personen an verschiedenen Windows- und Excel- Versionen benützen.
Das Problem ist, daß einige mit der Maske (UserForm) wenig anfangen können, da ihre Bildschirmauflösung zu klein ist.
Nun habe ich Folgendes hier im forum gefunden, was auch sehr gut klappt:
Das gehört in das Initialize Ereignis deiner Userform
Option Explicit

Private Sub UserForm_Initialize()
Me.Width = ScreenResolution(1)
Me.Height = (ScreenResolution(1) / 4) * 3
End Sub
'Das gehört in ein normales Modul
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Enum ScreenArgs
HORIZONTAL
VERTIKAL
End Enum

Public Function ScreenResolution(HV As ScreenArgs) As Long
If HV = 0 Or HV = 1 Then ScreenResolution = GetSystemMetrics(HV)
End Function
Das Problem ist nur, daß die Funktion für die 32-Bit- Version geschrieben ist, was eben bei anderen Rechnern Fehler macht.
Ich habe es damit versucht, möchte Excel aber nicht:
#If VBA7 And Win64 Then
Public Declare PtrSafe Function GetSystemMetrics Lib "User32" (ByVal nIndex As LongLong) As LongLong
#Else
Public Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long
#End If
Public Enum ScreenArgs
Horizontal
VERTIKAL
End Enum

Public Function ScreenResolution(HV As ScreenArgs) As Long
If HV = 0 Or HV = 1 Then ScreenResolution = GetSystemMetrics(HV)
End Function
Wenn mir bitte jemand helfen könnte, wäre ich sehr dankbar!
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel 32 / 64- Bit
14.11.2022 10:38:12
volti
Hallo Thomas,
es genügt, wenn Du hier das Schlüsselwort PtrSafe einsetzt.
PS: Der Typ Longlong (ist für diese Funktion aber eh falsch) kann auch nur bei 64-Bit Office eingesetzt werden und wird in der Praxis auch nur für einige wenige API-Funktionen genutzt. Für 32-Bit Office müsste LongPtr genommen werden.
Code:


Private Declare PtrSafe Function GetSystemMetrics Lib "user32" ( _ ByVal nIndex As Long) As Long

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Excel 32 / 64- Bit
14.11.2022 11:02:30
Thomas
Es Funktioniert!!! Herzlichen Dank, Karl- Heinz!!!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Excel 32 vs 64 Bit: UserForms und Bildschirmauflösungen anpassen


Schritt-für-Schritt-Anleitung

  1. UserForm initialisieren: Füge den folgenden Code in das Initialize-Ereignis deiner UserForm ein.

    Private Sub UserForm_Initialize()
       Me.Width = ScreenResolution(1)
       Me.Height = (ScreenResolution(1) / 4) * 3
    End Sub
  2. Funktion zur Bildschirmauflösung deklarieren: Lege im Modul den folgenden Code an.

    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    
    Public Enum ScreenArgs
       HORIZONTAL
       VERTIKAL
    End Enum
    
    Public Function ScreenResolution(HV As ScreenArgs) As Long
       If HV = 0 Or HV = 1 Then ScreenResolution = GetSystemMetrics(HV)
    End Function
  3. Anpassung für 32-Bit und 64-Bit: Verwende den folgenden Code, um sicherzustellen, dass die Funktion sowohl in 32-Bit als auch in 64-Bit Umgebungen funktioniert.

    #If VBA7 And Win64 Then
       Public Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As LongLong) As LongLong
    #Else
       Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    #End If
    
    Public Enum ScreenArgs
       Horizontal
       VERTIKAL
    End Enum
    
    Public Function ScreenResolution(HV As ScreenArgs) As Long
       If HV = 0 Or HV = 1 Then ScreenResolution = GetSystemMetrics(HV)
    End Function

Häufige Fehler und Lösungen

  • Fehler bei der Funktion GetSystemMetrics: Wenn deine Funktion nicht funktioniert, überprüfe, ob du das Schlüsselwort PtrSafe verwendest, insbesondere wenn du in einer 64-Bit-Version von Excel arbeitest.

  • Typenkonflikte: Der Typ LongLong ist nur für 64-Bit Office geeignet. Stelle sicher, dass du LongPtr für 32-Bit Office verwendest, um Fehler zu vermeiden.


Alternative Methoden

Du kannst auch die Application.Width und Application.Height Eigenschaften verwenden, um die Größe deiner UserForm dynamisch anzupassen, je nach Bildschirmauflösung. Dies kann besonders nützlich sein, wenn du die Bildschirmauflösung abfragen möchtest, ohne die API-Funktion GetSystemMetrics zu verwenden.


Praktische Beispiele

Ein praktisches Beispiel könnte das Erstellen eines Formulars sein, das sich automatisch an die Bildschirmgröße anpasst. Hier ist ein einfacher Code:

Private Sub UserForm_Initialize()
    Me.Width = Application.Width * 0.8
    Me.Height = Application.Height * 0.8
End Sub

Dies stellt sicher, dass die UserForm 80% der Bildschirmbreite und -höhe einnimmt, was für die meisten Benutzer angenehm ist.


Tipps für Profis

  • Verwende Debug.Print, um Werte während der Ausführung zu überprüfen. So kannst du schnell erkennen, ob die Bildschirmauflösung korrekt ermittelt wird.

  • Berücksichtige bei der Gestaltung deiner UserForm die verschiedenen Bildschirmauflösungen und DPI-Einstellungen. Das Anpassen der Größe ist nicht nur für die Benutzerfreundlichkeit wichtig, sondern auch für die Zugänglichkeit.


FAQ: Häufige Fragen

1. Wie kann ich herausfinden, ob ich Excel 32 oder 64 Bit verwende? Du kannst dies überprüfen, indem du zu Datei > Konto > Über Excel gehst. Dort findest du die Version und ob sie 32 oder 64 Bit ist.

2. Was passiert, wenn ich den Typ LongLong in einer 32-Bit-Version verwende? Es kann zu Laufzeitfehlern kommen, da LongLong nicht unterstützt wird. Stelle sicher, dass du Long oder LongPtr für 32-Bit verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige