Ich habe eine UserForm einer MonthView, die erfolgreich geöffnet wird, wenn ich in den angegebenen Bereich von Zellen klicke und dieser SO-Thread gab mir das grundlegende Skript. Es funktioniert, aber es scheint das UserForm nicht dorthin zu bringen, wo ich es erwarten würde.
Hier ist das aktuelle Skript (das ich in einem bestimmten Arbeitsblatt platziert habe), um das UserForm zu öffnen, wenn ich auf eine Zelle im Bereich B3:C2000
:
Frage 1: Ich habe die Eigenschaft UserForm StartUpPosition auf 0 - Manual
gesetzt - ist das korrekt?
Frage 2: Wenn ich zum ersten Mal nach dem Öffnen der Arbeitsmappe auf eine Zelle im angegebenen Bereich klicke, wird das Benutzerformular immer in der oberen linken Ecke des Bildschirms geöffnet. Warum?
Frage 3: Wenn ich auf eine beliebige Zelle im angegebenen Bereich klicke, wird für alle Klicks nach dem ersten die UserForm relativ zu der vorherigen Zelle geöffnet, die aktiv war, anstelle von der, die ich gerade angeklickt habe. Wie öffne ich es relativ zu der Zelle, auf die gerade geklickt wurde, statt relativ zur vorherigen aktiven Zelle?
Frage 4: Warum scheint das untere Ende des UserForms statt des oberen ausgerichtet zu sein?
Nachdem ich die folgenden Schritte gemacht habe:
1 - Klicken Sie auf Zelle C15
2 - UserForm wird geöffnet
3 - Benutzerformular schließen
4 - Klicken Sie auf Zelle 16
5 - UserForm wird geöffnet
Das sehe ich:
BEARBEITEN: Hier ist das Ergebnis nach der Implementierung von J. Garths Lösung (und Ändern der Offset-Eigenschaft zu (0, 2):
)Frage 1: Ich habe die Eigenschaft UserForm StartUpPosition auf 0 gesetzt - Manuell - ist das korrekt? Ja, das ist richtig. Im folgenden Code setze ich diese Eigenschaft im Code.
Frage 2: Wenn ich zum ersten Mal nach dem Öffnen der Arbeitsmappe auf eine Zelle im angegebenen Bereich klicke, wird das Benutzerformular immer in der oberen linken Ecke des Bildschirms geöffnet. Warum? Ich denke, die Antwort darauf hängt etwas mit Frage Nr. 3 zusammen. Das scheint ein Standard-Speicherort für das zu öffnende Formular zu sein. Die Art, wie Sie den Code jetzt haben, versucht die oberen und linken Koordinaten im Worksheet_SelectionChange
-Ereignis zu setzen, funktioniert nicht, weil die Koordinaten nie wirklich gesetzt werden. Die Einstellung der Koordinaten muss in das Benutzerformularinitialisierungsereignis verschoben werden.
Frage 3: Wenn ich auf eine beliebige Zelle im angegebenen Bereich klicke, wird für alle Klicks nach dem ersten das UserForm relativ zu der vorherigen Zelle geöffnet, die aktiv war, anstelle der gerade aktiven Zelle. Wie öffne ich es relativ zu der Zelle, auf die gerade geklickt wurde, anstatt relativ zur vorherigen aktiven Zelle? Dieses Problem hängt auch damit zusammen, dass der Code an der falschen Stelle ist. Wie oben erwähnt, muss die Koordinierungseinstellung in dem Benutzerformular-Initialisierungsereignis stattfinden. Aus Gründen, warum es sich auf die vorherige aktive Zelle bezieht, würde ich annehmen, dass die aktive Zelle erst dann geändert wird, wenn das Ereignis zum Ändern der Arbeitsblattauswahl abgeschlossen ist. Da Sie also versuchen, die Koordinaten innerhalb dieses Ereignisses zu setzen (d. H. Vor dem Ende des Ereignisses), erhalten Sie die zuvor aktive Zelle. Auch hier wird das Problem durch Verschieben des Codes an den richtigen Ort behoben.
Frage 4: Warum scheint das untere Ende des UserForms anstelle des oberen ausgerichtet zu sein? Es scheint einen Unterschied zwischen der Definition von "top" zu geben, wenn es um Zellen (Bereiche) geht vs Benutzerformulare. Der obere Teil der Zelle wird von der ersten Zeile aus gemessen, während der obere Teil des Benutzerformulars scheinbar von oben in der Excel-Anwendung gemessen wird. Wenn also in activecell.top und userform.top beide gleich 144 sind, sind sie unterschiedliche Positionen auf dem Bildschirm. Dies liegt daran, dass das obere Ende der aktiven Zelle 144 Punkte von der ersten Zeile der Excel-Tabelle entfernt ist, während das obere Ende des Benutzerformulars 144 Punkte vom oberen Rand der Excel-Anwendung entfernt ist (dh oben im Excel-Fenster), was höher ist auf dem Bildschirm, weil der Startpunkt (oben im Excel-Fenster) höher ist als der Startpunkt für activecell.top (erste Zeile in der Tabelle). Wir können dies anpassen, indem wir die Höhe des Benutzerformulars plus die Höhe der aktiven Zelle der oberen Koordinate hinzufügen.