Auftragsprogrammierung

Projektanfrage über Web Formular   per Online-Formular 
Projektanfrage über E-Mail  Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
Projektanfrage per Telefon  +49 (0)151 / 164 55 914
Projektanfrage weitere Informationen  weitere Informationen 

Sie benötigen Hilfe oder Unterstützung? Nutzen Sie für Ihre Anfrage unser Online-Formular, senden Sie uns eine Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!  oder rufen Sie uns einfach an.

Referenzen

 Bosch 
  T-Systems
  Hagebau
  Siemens
 Areva  VW
 Haufe-Lexware  British American Tobacco
  nagel group farbe

MessageBox individuell am Bildschirm positionieren

MessageBoxen standardmäßig in der Bildschirm-Mitte angezeigt. In manchen Fällen mag es sinnvoll erscheinen, die MessageBox an einer anderen Bildschirmposition auszugeben.

Das ist aber gar nicht so einfach. Dies lässt sich nur unter Einbeziehung von Windows-Funktionalitäten lösen.

Erfassen Sie bitte folgenden VBA-Code in einem leeren Code-Modul:

Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOACTIVATE = &H10
Public Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5
Public hHook As Long
Public MsgBoxPosX As Integer
Public MsgBoxPosY As Integer
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Function WinProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then
SetWindowPos wParam, 0, MsgBoxPosX, MsgBoxPosY, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE
UnhookWindowsHookEx hHook
End If
WinProc = False
End Function

Function msg(msgText As String, msgButton As Long, msgTitel As String, ByVal xPos As Long, ByVal yPos As Long)
'** Dimensionierung der Variablen
Dim hInst As Long
Dim XLInst As Long
Dim Thread As Long

'** Werte übergeben
MsgBoxPosX = xPos
MsgBoxPosY = yPos

XLInst = FindWindow("xlmain", vbNullString)
hInst = GetWindowLong(XLInst, GWL_HINSTANCE)
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, hInst, Thread)

'** Ausgabe des Messagebox Textes
MsgBox msgText, msgButton, msgTitel, 0, 0
End Function

Dem oben stehenden VBA-Code muss nun beim Aufruf die gewünschte X- und Y-Position zur Anzeige der MessageBox übergeben werden. Zur Vereinfachung kann der X- und Y-Wert direkt im Tabellenblatt angegeben werden, siehe Abbildung1. Damit entfällt die Anpassung des Codes bei Änderung der beiden Werte.

 
Abb. 1

Gestartet wird die Funktion über die Schaltfläche "MessageBox" aufrufen. Damit die Funktion korrekt aufgerufen wird, müssen Sie der Schaltfäche folgenden Code zuweisen.

Sub Aufruf_MsgBox()
'** Dimensionierung der Variablen
Dim x
Dim y

With ActiveSheet
  '** Prüfen, ob gültige X und Y Werte eingetragen wurden
  If IsNumeric(.Range("B4")) And IsNumeric(Range("B5")) Then
    x = .Range("B4").Value
    y = .Range("B5").Value
    dummy = msg("Ich bin positioniert wurden", vbInformation, "Hinweis", x, y)
  Else
    MsgBox "Erfassen Sie bitte gültige numerische X- und Y-Achsen-Werte", vbCritical, "Hinweis"
    .Range("B4").Value = 100
    .Range("B5").Value = 100
  End If
End With
End Sub

Sobald Sie nun auf die Schaltfläche klicken, wird die UserForm nahe am rechten Rand und im oberen Drittel des Fensters ausgegeben, siehe Abbildung 2.


Abb. 2

Die Beispieldatei können Sie über den folgenden Link herunterladen.

 

 

Drucken E-Mail

Relevante Artikel

Projektanfrage

 Sie benötigen eine Auftragsprogrammierung?
 Oder suchen Unterstützung bei der 
 Lösungsfindung?

  Nutzen Sie unser Anfrageformular

  Jetzt anrufen unter 0151 / 164 55 914

 Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein! Projektanfrage per Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein! senden

  Weitere Informationen

sitepanel question2

P
R
O
J
E
K
T
A
N
F
R
A
G
E
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Bestätigung erklären Sie sich mit der Verwendung von Cookies auf Excel-Inside Solutions einverstanden.
Weitere Informationen Ok