Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
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
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Userform verschieben

Userform verschieben
08.06.2007 22:03:00
Jörg
Hallo zusammen,
habe eine nicht modale Userform. Wie kann ich erreichen, dass diese nie die aktive Zelle
in meinem Tabellenblatt verdeckt? Ich meinr so, wie Commandbars, die auch "ausweichen",
wenn mann eine Zelle anklickt.
Grüße Jörg

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform verschieben
08.06.2007 23:07:37
Daniel
hi
du mußt im Modul "DieseArbeitsmappe" ein Event-gesteuertes Makro schreiben, in der einfachsten Form mal so:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim l As Single, t As Single
t = 10
l = 20
If userform1.Visible = True Then
userform1.Top = ActiveCell.Top + t
userform1.Left = ActiveCell.Left + ActiveCell.Width + l
End If
End Sub


Problem bei der Sache sind die Versatzfaktoren t und l, da sich .TOP und .LEFT der aktiven Zelle auf das Excel-Fenster beziehen, diese Werte der Userform allerdings auf Bildschirm-Koordinaten.
da musst du halt noch etwas rumprobieren.
Außerdem solltest du noch eine Fallunterscheidung einbauen, wenn die Userform nicht mehr nach rechts, sondern nach links ausweichen soll.
aber ein bisschen was zum tüfteln will ich dir auch noch lassen.
Gruß, Daniel

Anzeige
AW: Userform verschieben
08.06.2007 23:17:00
Matthias
Hallo Jörg,
Du die .Top und .Left-Eigenschaften des Userforms sind ja absolut (zum Bildschirm), die Wert der Zelle ermittelst du am Besten so:
Left = Application.Left + ActiveWindow.Left + ActiveCell.Left + 25
Top = Application.Top + ActiveWindow.Top + ActiveCell.Top + 138
Die Werte 25 und 138 sind wahrscheinlich vom Windows-Design abhängig, wobei der Wert 138 auch stark von der Höhe der Symbolleisten abhängt (2 Reihen, 3 Reihen...). Wie man diese Höhe in VBA ermittelt, hab ich nicht rausbekommen.
Gruß Matthias

AW: Userform verschieben
08.06.2007 23:27:41
Daniel
Hallo
auch die Position und Höhe der Commandbars kann man abfragen mit:
Applicaton.Commandbars(i).Top
Application.Commandbars(i).Height
da lässt sich schon was zusammenbasteln (allerdings können die Commandbars auch unter dem Fenster erscheinen oder frei auf dem Fenster sein, also aufpassen).
vielleicht gibts ja irgendwie in den System-Tiefen ne API-Funktion oder was ähnliches, mit der sich das leichter abfragen lässt, aber da habe ich keinen Schimmer von.
Gruß, Daniel

Anzeige
Nicht umsetzbar mangels Kenntniss!
08.06.2007 23:49:19
Jörg
Hallo,
ich kann eure Tipps mangels VBA-Kenntnissen nicht umsetzen.
Wenn ich das richtig verstehe, geht das mit exceleigenen Mitteln gar nicht?
Grüße Jörg

AW: Nicht umsetzbar mangels Kenntniss!
09.06.2007 00:03:49
Daniel
Doch, geht schon mit Excel-eigenen mitteln, ist aber ein bisschen aufwendig.
wenn du immer mit einem Maximierten Fenster arbeitest, tut es für den Versatz auch ein FIX-Wert, du musst halt ein bisschen rumprobieren, was für dich optimal ist.
Gruß, Daniel

AW: Nicht umsetzbar mangels Kenntniss!
09.06.2007 14:07:36
Jörg
Hallo,
kann das nicht selbst umsetzen, gibts da nicht was einfaches mit API oder so?
Grüße Jörg

AW: Nicht umsetzbar mangels Kenntniss!
09.06.2007 14:12:23
Josef
Hallo Jörg,
"was einfaches mit API oder so" gibt's nicht. Hier gibt's eine Lösung die recht gut dokumentiert ist.
Ist aber in englisch. http://www.cpearson.com/excel/FormPosition.htm
Gruß Sepp

Anzeige
AW: Nicht umsetzbar mangels Kenntniss!
09.06.2007 14:49:02
Jörg
Hallo Sepp,
alles sehr schön, nur das, was ich möchte, ist nicht dabei.
Userform soll sich wie eine Commandbar verhalten, also ausweichen, wenn ich eine Zelle
anklicke die teilweise verdeckt ist.
Grüße Jörg

AW: Nicht umsetzbar mangels Kenntniss!
09.06.2007 15:24:00
Josef
Hallo Jörg,
das geht aber nicht! Man könnte das möglicherweise programmieren, aber sicher nicht ohne erheblichen Aufwand und ich bezweifle, das jemand das nur so aus Spaß machen wird.
Was wird den in deinem UF angezeigt? Vielleicht kannst du ja eine Symbolleiste dafür nehmen.
Gruß Sepp

Anzeige
Hat noch jemand eine Idee?
09.06.2007 17:35:52
Jörg
Grüße Jörg

AW: Hat noch jemand eine Idee?
09.06.2007 18:41:20
K.Rola
Hallo,
wenn du bis nach 20:00 Uhr warten kannst, poste ich ein Beispiel.
Gruß K.Rola

AW: Hat noch jemand eine Idee?
09.06.2007 20:33:00
Jörg
Hi,
ich warte auch gern länger.
Grüße Jörg

AW: Hat noch jemand eine Idee?
09.06.2007 21:46:55
K.Rola
Hallo,
tschuldige, ist etwas später geworden.
Beispiel einer Minimalvariante, die sich aber, falls nötig, leicht erweitern läßt:
https://www.herber.de/bbs/user/43128.xls
Gruß K.Rola

AW: Hat noch jemand eine Idee?
09.06.2007 22:09:03
Jörg
Hallo K.Rola,
danke, so reicht das, Hauptsache die Userform verdeckt nicht die selektierte Zelle.
Grüße Jörg

Anzeige
Vergessen, Thema erledigt. oT
09.06.2007 22:41:00
Jörg
oT

AW: Userform verschieben
09.06.2007 19:46:45
Daniel
Hallo
mit diesen Makros kann man mit Bordmitteln eine Userform an der aktiven Zelle ausrichten:
bei den festen Parametern muß man noch ein bisschen rumprobieren, das hängt auch davon ab, welche Schriftgrössen und Rahmenbreiten man in Windows eingestellt hat, da hab ich leider keine Anhnung von, wie man das abfragt.
was auch noch nicht ganz passt, sind die Commandbars, je mehr ich einfüge, um so weiter läuft die Userfrom nach unten weg. bei 2en stimmts irgendwie.

Sub UF_Positionieren()
Dim x(6) As Long
Dim y(7) As Long
x(1) = Application.Left
x(2) = ActiveWindow.Left
x(3) = ActiveCell.Left
x(4) = ActiveCell.Width
x(5) = Breite_Befehlszeilen
x(6) = ActiveWindow.VisibleRange.Cells(1, 1).Left
x(0) = x(1) + x(2) + x(3) + x(4) - x(6)
UserForm1.Left = x(0) + 25
y(1) = Application.Top
y(2) = ActiveWindow.Top
y(3) = ActiveCell.Top
y(4) = ActiveCell.Height
y(5) = -10 * Application.DisplayFormulaBar
y(6) = Höhe_Befehlszeilen()
y(7) = ActiveWindow.VisibleRange.Cells(1, 1).Top
y(0) = y(1) + y(2) + y(3) + y(4) + y(5) + y(6) - y(7)
UserForm1.Top = y(0) + 40
End Sub



Function Höhe_Befehlszeilen() As Long
Dim i As Long
Dim CBar As CommandBar
For Each CBar In Application.CommandBars
If CBar.Visible And CBar.Position = msoBarTop Then
Höhe_Befehlszeilen = WorksheetFunction.Max(Höhe_Befehlszeilen, CBar.Top + CBar.Height)
End If
Next
End Function



Function Breite_Befehlszeilen() As Long
Dim i As Long
Dim CBar As CommandBar
For Each CBar In Application.CommandBars
If CBar.Visible And CBar.Position = msoBarLeft Then
Breite_Befehlszeilen = WorksheetFunction.Max(Breite_Befehlszeilen, CBar.Left + CBar. _
Width)
End If
Next
End Function


ansonsten hoffe ich, ich habe alles brücksichtigt, Korrekturen und ergänzungen sind gerne willkommen.
Gruß, Daniel

Anzeige
AW: Userform verschieben
09.06.2007 20:36:00
Jörg
Hallo,
danke, aber wie löse ich das aus? Ich will ja nicht immer einen Button klicken müssen.
Grüße Jörg

AW: Userform verschieben
09.06.2007 21:08:00
Daniel
Hallo
hatte ich im ersten Post schon beschrieben:
folgendes Makro im Modul "DieseArbeitsmappe"

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
call uf_positionieren
End Sub


(oder eben den Inhalt des Makros direkt hier reinschreiben)
Gruß, Daniel

AW: Userform verschieben
09.06.2007 21:29:14
Jörg
Hi,
jetzt hab ich es. ist nicht ganz so das Wahre. Wenn ich weit rechts oder unten klicke,
verschwindet die Userform und ich muss weiter oben klicken damit sie wieder erscheint.
Dann klebt die Userform an der selektierten Zelle, ich möchte aber nur, das sie ausweicht
um nicht die selektierte Zelle zu verdecken. Wenn ich also in eine Zelle klicke, die sowieso
nicht verdeckt wird, soll die Userform bleiben, wo sie ist und nicht der Zelle folgen.
Grüße Jörg

Anzeige
AW: Userform verschieben
10.06.2007 14:15:17
Daniel
Hi
ich habe mir das damals gebastelt, um genau das zu erreichen (also das die Userform immer neben der aktiven Zelle steht.
zumindest weist du jetzt, wie du die Koordinaten der aktvien Zelle im gleichen Bezugssystem berechnen kannst wie die Koordinaten der Userform, um damit dann entsprechend deinen Wünschen selber was zu basteln.
Gruß, Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige