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

Forumthread: Labelerstellen an definierter Position

Labelerstellen an definierter Position
18.10.2016 09:38:07
Uwili
Hallo Liebe Leute.
Ich versuche in einer Userform per Mausklick ein Label zu setzen. An genau die gleiche Stelle, wie der Mauszeiger.
Leider scheinen die - nennen wir es mal - "Einheiten" der Werte der Cursorposition nicht mit den "Einheiten" zusammen zu passen, die ich für das Erstellen des Labels nutze. Folglich erscheint das Label nicht an der Mauszeigerposition sondern sondern - je weiter ich in Y und X von der linken oberen Ecke wegklicke umso weiter nach rechts und unten versetzt...
Um welche Einheiten handelt es sich: Pixel? mm? Inch? Excelintern? und wie kann ich diese Umrechen?
Hier der Code zum Ermitteln der Cursorposition:
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type 
Sub mousemove()
Dim pTargetPoint As POINTAPI
Dim lRetVal As Long
If main.Left  0 And main.Top  0 Then
main.Left = 0
main.Top = 0
main.Repaint
End If
lRetVal = GetCursorPos(pTargetPoint)
main.lbl_posx.Caption = pTargetPoint.X
main.lbl_posy.Caption = pTargetPoint.Y
posx = pTargetPoint.X
posy = pTargetPoint.Y
End Sub

Und hier der Code zum setzen des Labels:
Private Sub lbl_transparent_Click()
Dim thema As msforms.Label
Set thema = Me.Controls.Add("Forms.Label.1")
With thema
.Left = posx
.Top = posy
.Caption = "Mein Label"
End With
End Sub

Hat jemand eine Idee?
VG Uwe
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Labelerstellen an definierter Position
18.10.2016 11:07:19
Mullit
Hallo,
probiers mal so:
Option Explicit

Private Declare Function GetCursorPos Lib "user32.dll" ( _
    lpPoint As POINTAPI) As Long
    
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Sub UserForm_Click()
Static slngCount As Long
Dim udtCursorPos As POINTAPI
Call GetCursorPos(udtCursorPos)
slngCount = slngCount + 1
With Me.Controls.Add(bstrProgID:="Forms.Label.1", Name:="Label" & slngCount, Visible:=True)
    .Left = udtCursorPos.X * 0.75 - Left
    .Top = udtCursorPos.Y * 0.75 - Top
    .Caption = "Label" & slngCount
    .BackColor = IIf(slngCount Mod 2, vbRed, vbBlue)
End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
AW: Labelerstellen an definierter Position
18.10.2016 12:22:05
Daniel
Hi
welches Event nutzt du denn um den Mausklick und seine Postion auszulesen?
wenn du das MouseUp-Event der Userform verwendest, müsste dieses dir die X- und Y-Koordinaten des Mausklicks zur Vefügung stellen.
Diese Koordinaten haben die Linke obere Ecke der Userform als 0-Punkt und sollten ohne Umrechnung als Koordinaten für dein Label verwendet werden können

Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
Dim thema As msforms.Label
Set thema = Me.Controls.Add("Forms.Label.1")
With thema
.Left = X
.Top = Y
.Caption = "Mein Label"
End With
End Sub
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Label an definierter Position in Excel UserForms erstellen


Schritt-für-Schritt-Anleitung

  1. Mausposition ermitteln: Du kannst die aktuelle Position des Mauszeigers mit der GetCursorPos-Funktion ermitteln. Implementiere den folgenden Code in deiner UserForm:

    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
  2. Position speichern: Verwende das MouseMove-Event, um die Position zu speichern:

    Private Sub UserForm_MouseMove()
        Dim pTargetPoint As POINTAPI
        GetCursorPos pTargetPoint
        posx = pTargetPoint.X
        posy = pTargetPoint.Y
    End Sub
  3. Label erstellen: Im Click-Event eines Buttons oder Labels kannst du nun an der ermittelten Position ein neues Label erstellen:

    Private Sub lbl_transparent_Click()
        Dim thema As msforms.Label
        Set thema = Me.Controls.Add("Forms.Label.1")
        With thema
            .Left = posx
            .Top = posy
            .Caption = "Mein Label"
        End With
    End Sub

Häufige Fehler und Lösungen

  • Label erscheint an falscher Position: Wenn das Label nicht an der erwarteten Position erscheint, könnte es an unterschiedlichen Einheiten (z.B. Pixel vs. Punkte) liegen. Überprüfe, ob du die korrekte Umrechnung verwendest. Eine gängige Umrechnung ist posx * 0.75 und posy * 0.75.

  • Event nicht erkannt: Stelle sicher, dass du das richtige Event verwendest. Das MouseUp-Event sollte dir die korrekten X- und Y-Koordinaten liefern.


Alternative Methoden

Eine andere Methode, um die Position des Labels zu bestimmen, ist das direkte Auslesen der Koordinaten im MouseUp-Event:

Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim thema As msforms.Label
    Set thema = Me.Controls.Add("Forms.Label.1")
    With thema
        .Left = X
        .Top = Y
        .Caption = "Mein Label"
    End With
End Sub

Diese Methode benötigt keine Umrechnung und funktioniert direkt mit den Koordinaten der UserForm.


Praktische Beispiele

Hier sind zwei Beispiele, um Labels an der Cursorposition zu erstellen:

  1. Einfaches Click-Event: Das oben gezeigte Beispiel, bei dem das Label beim Klick auf einen Button gesetzt wird.

  2. Erstellen von Labels bei MouseUp: Wie im MouseUp-Event gezeigt, wird das Label direkt an der Position des Mausklicks erstellt.


Tipps für Profis

  • Styling von Labels: Du kannst die Farben und Schriftarten der Labels anpassen, um ein ansprechenderes Design zu erzielen.

  • Interaktive Elemente: Füge Ereignisse hinzu, um auf Benutzerinteraktionen zu reagieren, z.B. das Ändern des Textes beim Klicken auf das Label.

  • Dynamische Positionierung: Wenn du mehrere Labels erstellst, überlege dir einen Mechanismus, um die Positionen zu verwalten, damit sie sich nicht überlappen.


FAQ: Häufige Fragen

1. Warum funktioniert das Label nicht an der gewünschten Position? Es könnte an der Verwendung von unterschiedlichen Koordinatensystemen liegen. Stelle sicher, dass du die Umrechnung korrekt vornimmst.

2. Kann ich die Größe des Labels während der Erstellung anpassen? Ja, du kannst die Eigenschaften .Width und .Height des Labels im Code festlegen, um die Größe anzupassen.

3. Welche Excel-Version ist erforderlich? Der angegebene Code wurde in Excel 2010 (Office 12) getestet, sollte aber auch in späteren Versionen funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige