Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1384to1388
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
Inhaltsverzeichnis

InputBox mit Sternchen in Excel2013 64bit-Version

InputBox mit Sternchen in Excel2013 64bit-Version
09.10.2014 05:07:36
Kasimir
Hallo an die Helferlein!
Ich habe da ein Problem. Ich habe hier im Forum vor gewisser Zeit ein Makro gefunden, das mi die Eingabe in einer InputBox als Sternchen darstellt. Nun möchte ich diesen Code in Excel 2013 64bit verwenden. Mir wurde beim 1. Starten ein Fenster eingeblendet, aus dem hervor ging, dass die Declare-Anweisung um ein PtrSafe-Atribut erweitert werden muss. Das habe ich nun getan und es werden beim Starten keine Fehler mehr angezeigt. Nachfolgend mal mein jetziger Code:
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (  _
_
ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadID As Long) As Long
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" ( _
ByVal hHook As Long) As Long
Private Declare PtrSafe Function CallNextHookEx Lib "user32" ( _
ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long
Private Declare PtrSafe Function GetWindowThreadProcessId Lib "user32" ( _
ByVal hWnd As Long, _
ByRef lpdwProcessId As Long) As Long
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
#Else
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" ( _
ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadID As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" ( _
ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" ( _
ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" ( _
ByVal hWnd As Long, _
ByRef lpdwProcessId As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
#End If
Private Const WH_KEYBOARD = 2
Private Const HC_ACTION = 0
Private Const EM_SETPASSWORDCHAR = &HCC
Dim hHook As Long
Dim hThread As Long
Dim hWnd As Long
Dim IsHooked As Boolean
Sub test_inputboxhook()
'   Ein String der Passwort übernimmt.
Dim strPwd As String
'   Den Hook setzen.
SetKeyboardHook
'   Aufruf einer InputBox und einlesen des Passwortes.
strPwd = InputBox("Bitte geben Sie den Code ein:")
'   Den Hook entfernen.
RemoveKeyboardHook
'   Ausgabe/Weiterverarbeitung des Passwortes.
MsgBox strPwd
End Sub
Public Sub SetKeyboardHook()
If Not IsHooked Then
hWnd = GetForegroundWindow
hThread = GetWindowThreadProcessId(hWnd, 0)
If hThread Then _
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf WndKeyBoardProc, 0, hThread)
If hHook Then _
IsHooked = True
End If
End Sub
Public Sub RemoveKeyboardHook()
Dim RetVal As Long
RetVal = UnhookWindowsHookEx(hHook)
IsHooked = False
End Sub
Public Function WndKeyBoardProc(ByVal uCode As Long, ByVal wParam As Long, ByVal lParam As Long) _
_
_
_
As Long
If uCode >= 0 Then
Select Case uCode
Case HC_ACTION
Call SendMessage(FindWindowEx(GetForegroundWindow, 0, "Edit", ""), _
EM_SETPASSWORDCHAR, 42, lParam)
Case Else
'           Tue nichts ...
End Select
End If
WndKeyBoardProc = CallNextHookEx(hHook, uCode, wParam, lParam)
End Function

Wenn ich nun aber das Makro zum Aufruf der InputBox aufrufe erhalte ich die Fehlermeldung „Fehler beim Kompilieren: Typen unverträglich“ und es wird mir im Makro „SetKeyboardHook()“ in der Zeile
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf WndKeyBoardProc, 0, hThread)
der Text
AddressOf WndKeyBoardProc
blau markiert. Ich weiß jetzt ehrlich gesagt nicht, was daran falsch ist, da der Code ja in anderen Excelversionen funktioniert. Kennt von Euch vielleicht jemand das Problem oder hatte dies ebenfalls schon mal und kann mir sagen, was da schief läuft? Wäre super.
Jedenfalls schon mal besten Dank für die Unterstützung,
Kasimir

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: InputBox mit Sternchen in Excel2013 64bit-Version
09.10.2014 08:18:28
Luschi
Hallo Kasimir,
'WndKeyBoardProc' ist eine Funktion, die aber in Deinem Code fehlt.
Nähere Informationen siehe hier:

http://books.google.de/books?id=Vt-8LH-d1R8C&pg=PA327&lpg=PA327&dq=%22AddressOf+WndKeyBoardProc%22&source=bl&ots=RldDRhP_uP&sig=unAELU25z1p47qza-d4Ftc6I5JA&hl=de&sa=X&ei=sBQ2VI6VOcLMyAOgvYLYCw&ved=0CCcQ6AEwAQ#v=onepage&q=%22AddressOf%20WndKeyBoardProc%22&f=false
Gruß von Luschi
aus klein-Paris

Anzeige
AW: InputBox mit Sternchen in Excel2013 64bit-Version
09.10.2014 11:09:30
Kasimir
Hallo Luschi!
Danke Dir für Deine Antwort. Diese Funktion fehlt aber auch in der Version, die unter der 32bit-Version funktioniert. Somit müsste das doch auch in der 64bit-Version laufen oder ist die 64bit-Version dahingehend empfindlicher?
Nochmals Danke,
Kasimir

AW: InputBox mit Sternchen in Excel2013 64bit-Version
09.10.2014 12:02:04
Luschi
Hallo Kasimir,
in der Excel 2013-Vba-Online-Hilfe steht:

AddressOf procedurename
The required procedurename specifies the procedure whose address is to be passed. It must represent a procedure in a standard module module in the project in which the call is made.
Frei übersetzt heißt das:
- nach 'AddressOf' ist ein Prozedurname erforderlich, welche in einem Standardmodul definiert sein muß
Etwas weiter wird dann noch beschrieben, daß nach 'AddressOf' auch eine Funktion aus einer Dll genutzt werden kann, welche per 'Declare' vorher bekannt gemacht wurde.
Da das aber nicht mit einer einzigen dll-Funktion zu schaffen ist, wird diese Standard-ModulFunktion 'WndKeyBoardProc' dazwischen geschalten.
Hier mal mein 32-bit-Beispiel: https://www.herber.de/bbs/user/93050.xlsm
Aufruf der Inputbox erfolgt, wenn man versucht die AM zu speichern!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: InputBox mit Sternchen in Excel2013 64bit-Version
09.10.2014 13:58:47
Kasimir
Hallo Luschi!
danke Dir für die erneute Hilfe, aber den Code, den Du in der Datei benutzt, habe ich ja bereits und der funktioniert leider nicht in 64bit, auch nicht nach der Umstellung mit PtrSafe.
Gruß
Kasimir

155 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige