Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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

Userform anpassen

Userform anpassen
15.06.2020 22:50:24
Stephan
Hallo
bitte um Hilfe bei der Erstellung eies Makros.
Es soll folgendes können:
Wenn man was in die Zelle "A2" schreiben will, soll eine Userform aufgehen und sich so positionieren, dass die Textbox der Userform genau über der Zelle liegt. Der User soll dort reinschreiben. Die Größe der Textbox soll ungefähr der Zelle angepasst werden, falls möglich. Nach Schließen der UF soll der Wert der Textbox zu "A2" übertragen werden. Dazwischen kommt dann noch was anderes, aber erst will ich das mal machen.
Habe ein Beispiel mit meinen Versuchen angehängt, bei dem einiges nicht funktioniert und ich bei der Größenapassung und Rückübertragung anstehe.
https://www.herber.de/bbs/user/138324.xlsm
Der Textbox-Eintrag soll aber nicht innerhalb des UF-Aufrufs in "A2" kopiert werden, sondern im aufrufenden Sub. Denn die UF soll dann auch noch für andere Zwecke aufrufbar sein, später mal.
Wenn ich das mal habe, dann bin ich ein gutes Stück weiter gekommen.
Gruss Stephan T.

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

Betreff
Datum
Anwender
Anzeige
AW: Userform anpassen
16.06.2020 07:51:02
Klaus
Hallo Stephan,
das wird aber viel gebastel. Ich glaube nicht dass das den Aufwand wert ist - lass die Userform doch einfach mittig aufgehen! Die Benutzer sind nicht SO blöd, die checken schon dass sie gerade Zelle A2 angewählt haben. Und selbst wenn du es hinbekommst, dann funktioniert es bei dir an einem Single-Monitor mit Fullscreen-Excel ... der nächste benutzt es an einem double-Splitscreen Monitor, hat als drittes noch den Laptop-Monitor und noch dazu Excel im Fenstermodus, schon wird alles ad absurdum geführt.
Wenn du dich trotzem dran versuchen willst, hier ein paar Ideen:
debug.print range("A2").top
debug.print range("A2").left
ergibt den wert, den Zelle A2 von oben / vom linken Rand entfernt ist. Bei Spalte A ist die Entfernung nach links natürlich immer 0. Die Werte sind relativ zum Excelfenster.
debug.print Userform1.left
debug.print Userform1.top
ergibt das gleiche für die Userform, aber relativ zum Monitor
Userform1.Move(50,30)
bewegt die Userform 50 Pixel nach links und 30 Pixel nach oben. Für rechts und unten einfach Minuswerte eintragen.
Jetzt musst du die Userform nur noch passend links zum A2-Feld platzieren .... Viel Spaß beim ausprobieren!
LG,
Klaus
Anzeige
AW: Userform anpassen
16.06.2020 12:45:41
volti
Hallo Klaus,
ich hatte auch mal kurz dran rumprobiert.
Wie Du schon schreibst, wird die Userform auf dem Screen positioniert. Die Pixelauflösung des Screen ist auch nicht die gleiche, wie die, die ich z.B. von Excel für die Position des Feldes A2 erhalte.
Mein Ansatz war, über GetWindowRect die Position des Excelfensters zu erhalten und relativ von dort die Feldposition zu bekommen. Aber das ganze hängt dann auch noch von den eingeblendeten Überschriften, Eingabeleiste, Ribbonhöhe, ausgebendeten Zeilen und Scrolling und ggf. Zoom usw. ab.
Also Stephan, sehr viel Aufwand für eine unsichere Sache.
viele Grüße
Karl-Heinz
Anzeige
AW: Userform anpassen
16.06.2020 15:39:22
Stephan
OK, dann lass ich es eben. Vorerst zumindest.
Bin nur darauf gekommen, weil das UF am Laptop-Schirm auftaucht, obwol das Excel im angehängten Schirm zu sehen ist.
Vielen Dank. LG, Stephan
AW: Userform anpassen
17.06.2020 06:47:10
Klaus
Bin nur darauf gekommen, weil das UF am Laptop-Schirm auftaucht, obwol das Excel im angehängten Schirm zu sehen ist.
Sag das doch gleich. Da hat Nepomuk mir einen Code für gezaubert - frag mich aber nicht was der macht :-) In ein Modul:
'CODE erstellt von Nepomuk @ herber-Forum!
Option Explicit
Private Declare Function EnumDisplayMonitors Lib "user32.dll" ( _
ByVal hdc As Long, _
ByRef lprcClip As Any, _
ByVal lpfnEnum As Long, _
ByVal dwData As Long) As Long
Private Declare Function GetMonitorInfoA Lib "user32.dll" ( _
ByVal hMonitor As Long, _
ByRef lpmi As MONITORINFO) As Long
Private Declare Function MonitorFromWindow Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal dwFlags As Long) As Long
Private Type RECT
lngLeft As Long
lngTop As Long
lngRight As Long
lngBottom As Long
End Type
Private Type MONITORINFO
cbSize As Long
rcMonitor As RECT
rcWork As RECT
dwFlags As Long
End Type
Private Const MONITOR_DEFAULTTONEAREST As Long = &H2
Private ludtRect As RECT
Public Sub MoveUserform(ByRef probjUserform As Object)
Call EnumDisplayMonitors(ByVal 0&, ByVal 0&, AddressOf Read_Monitor, ByVal 0&)
With probjUserform
Call .Move((ludtRect.lngLeft + ludtRect.lngRight) * 0.75 / 2 - .Width / 2, (ludtRect. _
lngBottom + ludtRect.lngTop) * 0.75 / 2 - .Height / 2)
End With
End Sub
Private Function Read_Monitor( _
ByVal pvlngMonitor As Long, _
ByVal pvlngHdcMonitor As Long, _
ByRef prudtlprcMonitor As RECT, _
ByVal pvlngdwData As Long) As Long
Dim udtMonitorInfo As MONITORINFO
udtMonitorInfo.cbSize = Len(udtMonitorInfo)
Call GetMonitorInfoA(pvlngMonitor, udtMonitorInfo)
If MonitorFromWindow(Application.hwnd, MONITOR_DEFAULTTONEAREST) = pvlngMonitor Then
'ludtRect = udtMonitorInfo.rcMonitor
ludtRect = udtMonitorInfo.rcWork
Read_Monitor = 0
Else
Read_Monitor = 1
End If
End Function

In die Userform:
Private Sub UserForm_Initialize()
Call MoveUserform(Me)
End Sub
Ist nur ein Monitor aktiv, macht das Script gar nichts. Sind mehrere Monitore aktiv, erscheint die Userform mittig auf dem Screen, auf dem Excel aktiv ist.
LG,
Klaus M.
Anzeige
AW: Userform anpassen
17.06.2020 10:01:52
Stephan
Hallo Klaus,
danke für diesen Code.
Klingt gut. Werde ihn erforschen.
Gruß, Stephan

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige