none
Screen-Pixel auch für ältere Windows-Excel-Versionen einsetzbar?

    Frage

  • Liebe Foristen,

    am 02.Febr. 2018 habe ich hier unter dem Titel die Frage gestellt: "Wie stelle ich per Excel-VBA die gerade aktuelle Monitorauflösung fest?". Stefan Krömer hat mir für mein aktuelles Problem schnell und präzise helfen können. Das Listing kann dort nachgesehen werden. Es läuft bei unter Windows 10 und Excel 2013 anstandslos.

    Nun habe ich versuchsweise das Listing auch mit früheren Windows- und Excel-Versionen konfrontiert (ich hätte gern eine Lösung, die bis Windows 2000 und Excel 97 herunter einsetzbar ist).

    Für meine Versuche besitze ich noch zwei ältere Rechner, die beide unter Windows XP betrieben werden. Auf einem der älteren Rechner läuft Excel 2003, auf dem anderen Excel 2002. Beide Altrechner sind vom Netz abgetrennt. Schon mit Windows XP/Excel 2003 erhielt ich eine Fehlermeldung nach unterem Muster. Lieber Stefan Krömer, lässt sich deine Lösung auch für diese Anforderung modifizieren?

    Im Voraus schon jetzt vielen Dank!

    Grüsse von Ganzon

    Link Fehlermeldung mit Info der VBA-Hilfe:

    Link:  https://1drv.ms/b/s!Amg_s6hAJo10hQoMjJjQj0SYHulr

    Montag, 5. Februar 2018 14:54

Alle Antworten

  • Da braucht man nichts modifizieren, es sei denn für Office in 64-bit...

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx

    Das geht ab 2000 aufwärts, steht ganz unten.

    Änder die Deklaration wieder auf Private zurück, so wie Stefan es gezeigt hat, dann geht das auch.

    Andreas.

    #If Win64 Then
    Private Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    #Else
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    #End If
    Private Const SM_CXSCREEN = 0
    Private Const SM_CYSCREEN = 1
    
    Sub GetScreenResolution()
      MsgBox "Bildschirmauflösung: " & _
      GetSystemMetrics(SM_CXSCREEN) & "x" & GetSystemMetrics(SM_CYSCREEN)
    End Sub

    Donnerstag, 8. Februar 2018 10:54
  • Hallo Andreas,

    besten Dank für deine Version. Aber nun bin ich mehrfach irritiert. Zur Tatsache gehört, dass das Listing von Stefan Krömer bei mir unter Windows 10 mit Excel 2013 funktioniert, also ohne If Win64-Schleife. Meine Frage war doch, was man daran modifizieren kann, damit auch ältere Windows-/Excel-Versionen darunter laufen. Denn Stefans Listing läuft schon nicht mehr unter Windows XP/Excel 2003/Excel2002; noch ältere habe ich deshalb nicht mehr versucht. Es erfolgt bei XP die MS-Fehlermeldung mit dem Hinweis, auf Private Declare zu verzichten und es mit Property-Anweisungen zu versuchen (Geräteprogrammierung ist absolut neu für mich).

    Meinen aktuellen Rechner habe ich darüber hinaus mit folgenden Stichworten zur Versionsklärung von Windows 10 zu bewegen versucht und folgende widersprüchliche Auskünfte erhalten:

    1.) Cortana-Suchfeld --> Eingabe Windows-Version --> prüfe 32-Bit oder 64-Bit --> Info --> Gerätespezifikation liefert unter Systemtyp: 64-bit operating system, X64 besed processor

    2.) Auf gleicher Seite erscheint unter Windows-Version:.Edition: Windows 10 Pro ....Version:..1709.....Betriebssystembuild:  16299.192

    3.) Abfrage VBA unter WinVersion liefert:...Windows (32-Bit) NT:.00

    Was habe ich jetzt wirklich? 32-bit oder 64 bit? Und wie komme ich meinem Wunsch näher, möglichst viele der älteren Windows-/Excel-Versionen mit einem VBA-Code abzufragen?

    Viele herzliche Grüsse von Ganzon

    zu 3.) WinVersion = Application.Operatingsytem = Windows (32-Bit) NT:.00
    • Bearbeitet Ganzon Freitag, 9. Februar 2018 09:36 Ergänzung
    Donnerstag, 8. Februar 2018 21:42
  • Es erfolgt bei XP die MS-Fehlermeldung mit dem Hinweis, auf Private Declare zu verzichten und es mit Property-Anweisungen zu versuchen (Geräteprogrammierung ist absolut neu für mich).

    Das liegt aber an Dir und nicht bei XP oder sonstwas. Das der Code nicht zu modifizieren ist hatte ich schon gesagt und den Rest auch.

    Nimm den Code von oben wie er ist und lass ihn laufen.

    Der Rest steht in dem MSDN-Artikel und wenn Du diese Art der Programmierung willst, dann musst Du Dich da reinlesen. Auch solltest Du in der VBA-Hilfde nachlesen was es mit Declare und Lib auf sich hat.

    Routinen aus externen DLL's aufzurufen kann schwerwiegende Folgen haben, bis hin zum Absturz.

    Das ganze ich keine übliche VBA Progamierung, sondern quasi ein Überbleibsel aus VB was man netterweise drin gelassen hat. Innerhalb einer Application braucht es in der Regel keine weiteren DLLs.

    Außerdem ist Dir wohl nicht klar das es 32-bit und 64-bit Tasks gibt, nicht böse sein, aber ich hab nicht die Zeit Dir das im einzelnem alles zu erklären. RTFM wie man so schön sagt. :-)

    Im übrigen bist Du bei heutigen System etwas spät dran, ich hab hier 2 Monitore vor der Nase und es gibt auch Systeme mit noch mehr Monitoren die auch unterschiedliche Auflösungen haben.

    https://msdn.microsoft.com/en-us/library/windows/desktop/dd162610%28v=vs.85%29.aspx

    Andreas.
    Freitag, 9. Februar 2018 11:16
  • Hallo Andreas,

    besten Dank für deine ausführliche Antwort. Natürlich weiss ich, dass es für Laien gefährlich sein kann, unbedarft sich auf unbekannte Programmiertechniken einzulassen. Deshalb habe ich ja auch die Frage ins Forum gestellt und mit der Antwort von Stefan für meine aktuelle Konfiguration ein funktionierendes Listing erhalten. Soweit ein Teilerfolg.

    Den Rest werde ich bestimmt auch noch hinkriegen. Ich bin niemandem böse, sondern nur jedem dankbar, der zu gestellten Fragen sachdienlich antwortet. Danke für deinen Link.

    Gruss von Ganzon

    Samstag, 10. Februar 2018 16:01