Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Userform Maximieren &Tastatur öffnen
11.11.2020 23:54:43
Excelaner
Hi ihr Experten,
ich möchte, dass man Userform sich in Vollbild öffnet (12.3 Zoll), wie krieg ich das idealerweise gelöst?
Aktuell habe ich das so gelöst, sieht dann aber alles etwas verschoben aus, nicht wirklich schön:
With Userform1
.Height = Application.Height
.Width = Application.Width
End With
Dann möchte ich, dass die Surface Bildschirmtastatur immer geöffnet bleibt, oder zumindest wenn nicht möglich, dass immer die Tastatur automatisch geöffnet wird, wenn man auf ein Textfeld klickt.
Danke euch vorab!

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 08:20:40
Nepumuk
Hallo Excelaner,
Userform in Bildschirmgröße mit anpassen der Controls:
Option Explicit

Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long
Private Declare PtrSafe Function GetDesktopWindow Lib "user32.dll" () As LongPtr
Private Declare PtrSafe Function GetDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function ReleaseDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal hdc As LongPtr) As Long
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" ( _
    ByVal hdc As LongPtr, _
    ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN As Long = 0&
Private Const SM_CYSCREEN As Long = 1&
Private Const LOGPIXELS_X As Long = 88&
Private Const LOGPIXELS_Y As Long = 90&

Private Sub CommandButton1_Click()
    Call Unload(Object:=Me)
End Sub

Private Sub UserForm_Activate()
    
    Dim sngWidth As Single, sngHeight As Single
    
    sngWidth = Width
    sngHeight = Height
    
    Left = 0
    Top = 0
    
    Width = GetSystemMetrics(SM_CXSCREEN) * GetResolution(LOGPIXELS_X)
    Height = GetSystemMetrics(SM_CYSCREEN) * GetResolution(LOGPIXELS_Y)
    
    Zoom = Fix(Application.Min(Width / sngWidth, Height / sngHeight) * 100)
    
End Sub

Private Function GetResolution(ByVal pvlngLogPixel As Long) As Single
    
    Dim lngptrhWndDesk As LongPtr, lngptrhDCDesk As LongPtr
    Dim lnglogPixel As Long
    
    lngptrhWndDesk = GetDesktopWindow()
    lngptrhDCDesk = GetDC(lngptrhWndDesk)
    
    lnglogPixel = GetDeviceCaps(lngptrhDCDesk, pvlngLogPixel)
    
    Call ReleaseDC(lngptrhWndDesk, lngptrhDCDesk)
    
    GetResolution = 72 / lnglogPixel
    
End Function


Bildschirmtastatur öffnen / schließen:
Option Explicit

Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As LongPtr
Private Declare PtrSafe Function Wow64EnableWow64FsRedirection Lib "kernel32.dll" ( _
    ByVal Enable As Boolean) As Boolean
Private Declare PtrSafe Function IsWow64Process Lib "kernel32.dll" ( _
    ByVal hProcess As LongPtr, _
    ByRef Wow64Process As LongPtr) As Long
Private Declare PtrSafe Function GetCurrentProcess Lib "kernel32.dll" () As LongPtr

Private Const SW_SHOWNORMAL As Long = 1

Public Sub LoadScreenKeyboard()
    Dim lngptrIsWow64 As LongPtr, lngptrProcess As LongPtr
    lngptrProcess = GetCurrentProcess
    Call IsWow64Process(lngptrProcess, lngptrIsWow64)
    If lngptrIsWow64 = 0 Then
        Call ShellExecuteA(Application.hwnd, "open", "osk.exe", vbNullString, "C:\Windows\System32\", SW_SHOWNORMAL)
    Else
        Call Wow64EnableWow64FsRedirection(False)
        Call ShellExecuteA(Application.hwnd, "open", "osk.exe", vbNullString, "C:\Windows\System32\", SW_SHOWNORMAL)
        Call Wow64EnableWow64FsRedirection(True)
    End If
End Sub

Public Sub UnloadScreenKeyboard()
    Dim objWMIService As Object, objProcessList As Object, objProcess As Object
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'osk.exe'")
    For Each objProcess In objProcessList
        Call objProcess.Terminate
    Next
    Set objProcessList = Nothing
    Set objWMIService = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 09:28:28
Excelaner
Hi Nepumuk,
vielen lieben Dank für den Code!!!
Funktioniert prima!!!
Nur mal eine "NicoToHave" Frage, wäre es auch möglich, die Touchtastaur von Surface zu öffnen statt diese Bildschirmtastatur?
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 09:33:37
Nepumuk
Hallo Excelaner,
ich habe kein Surface, daher kenne ich die nicht.
Gruß
Nepumuk
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 10:22:10
Excelaner
Hi Nepumuk,
danke dir. Hab jetzt aber doch noch eine Frage, wo füge ich denn optimalerweise deine Codes ein?
Ich habe das mit dem Maximieren direkt in den Userform und das mit Tastatur in ein Modul gepackt, welches ich dann über Call aufrufe.
Jetzt funktionieren aber bestimmte Sachen nicht mehr, die bisher funktioniert hatten. Das liegt an dem Code für Maximieren denke ich, wie muss ich den platzieren?
Danke dir!!!
Anzeige
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 10:24:24
Nepumuk
Hallo Excelaner,
das hast du schon richtig eingefügt. Was funktioniert nicht mehr und wie äußert sich das?
Gruß
Nepumuk
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 10:28:38
Excelaner
direkt nach dem Code für das Maximieren kommt das
Private Sub cmdSpeichern_Click()
'Prüft ob alle Daten vollständig sind
If Me.txtName.Value = "" Then
MsgBox "Bitte alle Felder ausfüllen!", _
vbExclamation, "Achtung!"
Cancel = True
End If
.... geht noch weiter
aber "Cancel" wird gelb markiert und es steht, Variable nicht definiert
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 10:33:21
Nepumuk
Hallo Excelaner,
das Click-Event hat keinen Parameter "Cancel". Lösch die Zeile die hat keinen Sinn.
Im Modul des UserForms steht nun als erste Zeile "Option Explicit" das zwingt dich alle Variablen zu deklarieren. Nicht deklarierte Variablen werden angemeckert.
Gruß
Nepumuk
Anzeige
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 10:39:32
Excelaner
Ok stimmt, denn ich habe weiter unten tatsächlich eine Variable, und jetzt kommt auch die gleiche Meldung.
Wie muss ich die denn deklarieren?
Danke für deine Geduld mit mir!!
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 10:43:42
Nepumuk
Hallo Excelaner,
Beispiel:
Dim MeineVariable As Datentyp
Ich kenn deine Variable nicht und auch nicht ob es eine Zahl, ein Text oder ein Objekt ist. Das musst du bei "Datentyp" angeben.
Gruß
Nepumuk
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 11:00:54
Excelaner
Danke dir Nepumuk! Das ist doch wahre Liebe :)
Wünsche dir einen wunderschönen Tag!
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 12:23:16
Excelaner
Ok eine letzte Frage :)
Wie kann ich die Größe der Tastatur ändern? Gehr das überhaupt? Und eventuell noch dass die rechten Funktionstasten nicht angezeigt werden?
Anzeige
AW: VBA Userform Maximieren &Tastatur öffnen
12.11.2020 13:02:59
Nepumuk
Hallo Excelaner,
nicht das ich wüsste. Ich habe schon mal versucht darauf zuzugreifen, klappt aber nicht.
Gruß
Nepumuk

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige