Hallo Luc,
Waarschijnlijk werkt dit voor jou scherm, maar ik wil het universeel bruikbaar maken.
Met de code die AI je gegeven heeft, berekend op jou scherm, zal de UF wel netjes in de hoek tegen G1 aan staan. Met dezelfde code en mijn scherm staat de Form veel te hoog. Nu, ik ben er al bijna een week mee bezig, en weet dat het heel complex is. MS is complex. Excel is complex op gebied van plaatsbepaling, die voor alles andere waarden heeft.
Als het enkel voor jou goed moet zijn, dan voeg je de 2 macro's samen en zet een macro in This Workbook.
Verwijder de macro's:
Public Sub OpenMuntenForm()
Public Sub HerpositioneerMuntenForm()
Plaats deze in de plaats.
Public Sub OpenMuntenForm()
' Oude instantie volledig verwijderen
On Error Resume Next
Unload frmMunten
Set frmMunten = Nothing
On Error GoTo 0
' Nieuwe instantie maken
Set frmMunten = New frmMunten
' Tonen
frmMunten.show vbModeless
Dim cel As Range
Dim x As Double, y As Double
' Controleer of het formulier wel geladen is
If frmMunten Is Nothing Then Exit Sub
' De referentiecel (bijvoorbeeld de cel naast je tabel)
Set cel = Sheets("Lijst 2€ alfabetisch").Range("H1")
' Gebruik ActiveWindow om de positie van de cel op het scherm te bepalen
' Dit compenseert voor scrollen en zoom-niveau
x = ActiveWindow.PointsToScreenPixelsX(cel.Left * (ActiveWindow.Zoom / 99))
y = ActiveWindow.PointsToScreenPixelsY(cel.Top * (ActiveWindow.Zoom / 207))
' Omdat VBA UserForms in "punten" rekenen en niet in pixels,
' moeten we de schermresolutie omzetten (standaard 0.75 factor)
' We trekken hier de gewenste marge vanaf (bijv. 99 voor links en 207 voor top)
frmMunten.StartUpPosition = 0 ' Handmatige positie toestaan
frmMunten.Left = (x * 0.75) + 180
frmMunten.Top = (y * 0.75) + 10
End Sub
In
ThisWorkbook plaats je deze code om de macro te starten als Excel opent:
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:01"), "OpenMuntenForm"
End SubKnop1 en Knop2 mag je verwijderen.
Laat maar weten of de UF nog steeds goed staat in jou werkblad.
Bedenkingen:- Dat de code handmatig juist is, komt door de handmatige instelling.
- Je factor 0,75 bij de uiteindelijke plaatsberekening van de UF mag je weglaten, vervangen door
3,75 of 100, er zal niets veranderen. Probeer maar eens:
frmMunten.Left = x + 180
frmMunten.Top = y + 10
Je zal geen verschil zien bij het opslaan en opnieuw starten.
- Verander de breedte van een kolom, en je UF staat niet meer op zijn plaats (tegen "H1" aan).
- Rechtsklik in het Lint, en kies voor "Het lint samenvouwen". Je UF staat nu veel te laag.
- Ook wordt de positie van de UF niet aangepast aan het zoomniveau.
Verander het Zoomniveau maar eens tot 90% of 50%, je UF blijft op dezelfde plaats staan.
- Scrollen kan je sowieso, altijd. Een UF beweegt niet mee tijdens scrollen ook zonder correctie.
Dus de UF volgt je cel "H1" niet, je hebt hem handmatig zo ingesteld.
En dat is niet "echt" de bedoeling.
Maar, als het voor jou goed is zo dan kan je hem gebruiken. Als je de code dan opkuist, dan zal de UF nog steeds op zijn zelfde plaats staan.
Of, probeer deze opgekuistte code eens op een reserve-copie:
Public Sub OpenMuntenForm()
Dim cel As Range
Dim x As Double, y As Double
On Error Resume Next
Unload frmMunten
Set frmMunten = Nothing
On Error GoTo 0
Set frmMunten = New frmMunten
frmMunten.show vbModeless
Set cel = Sheets("Lijst 2€ alfabetisch").Range("H1")
x = ActiveWindow.PointsToScreenPixelsX(cel.Left)
y = ActiveWindow.PointsToScreenPixelsY(cel.Top)
frmMunten.Left = (x * 0.75) + 180
frmMunten.Top = y + 10
End SubAlles zal bij het oude blijven.
Laat me iets weten (en vertrouw AI niet !!!!)
Groeten,

SoftAid
