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

ActiveX-Buttons bildschirmunabhängig positionieren?

ActiveX-Buttons bildschirmunabhängig positionieren?
04.03.2024 11:54:50
Eisi
Hallo zusammen,

ich habe mehrere ActiveX-Buttons und mit nachfolgendem Code versuche ich den Button an der selben Position zu halten.
Mir fällt aber gerade auf, wenn ich die Exceloberfläche auf meinem Laptop sehe, dann bleibt der Button da wo er sein soll.
Wenn ich aber auf meinen großen Bildschirm gehe, dann verschiebt sich der Button deutlich nach oben, sodass ich diesen
nicht mehr sehen kann.
Ich habe schon zig Varianten probiert kein Weg führt dazu, dass der Button immer an der gleichen Position bleibt.
Ich habe schon LÖsungen wie hier auf die Zeile bezogen verwendet, oder auf den Bildschirmrand bezogen. Die dritte Variante
fällt mir gerade nicht ein.
Hat jemand eine Lösung die immer funktioniert?
Danke schön.

VG
Eisi :-)



' Positioniere den Button relativ zur Blattgröße
With btn
.Top = kalkulationSheet.Rows(1702).Top 'Zeile in der Button steht
.Left = kalkulationSheet.Columns(4).Left 'Spalte in der der Button steht
.Width = 120
.Height = 25.5
End With

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveX-Buttons bildschirmunabhängig positionieren?
04.03.2024 16:32:06
UweD
Hallo


evtl. kannst du ja mit einem Faktor arbeiten, der von der Bildschirmgröße ( Fenstergröße ) abhängig ist.

nur mal so eine Idee, wobei die von mir angegebenen Werte völlig wahllos gewählt sind

    BSHöhe = Application.Height

BSBreite = Application.Width

Select Case BSHöhe
Case Is = 400
fh = 0.6
Case Is = 600
fh = 0.8
Case Is = 750
fh = 0.9
Case Is > 750
fh = 1
End Select

Select Case BSBreite
Case Is = 1200
fb = 0.6
Case Is = 1400
fb = 0.8
Case Is = 1900
fb = 0.9
Case Is > 1900
fb = 1
End Select


' Positioniere den Button relativ zur Blattgröße
With btn
.Top = fh * kalkulationSheet.Rows(1702).Top 'Zeile in der Button steht
.Left = fb * kalkulationSheet.Columns(4).Left 'Spalte in der der Button steht
.Width = 120
.Height = 25.5
End With




LG UweD

Anzeige
AW: ActiveX-Buttons bildschirmunabhängig positionieren?
04.03.2024 17:01:58
Eisi
Hallo Uwe,

herzlichen dank, sehr interessanter Ansatz, ist mir ganz neu.
Da hätte ich noch zwei Fragen:
a) wieviel Varianten an Bildschirmen soll ich denn festlegen, bzw. gibt es?
b) Oder könnte man nicht per VBA die aktuelle Bildschirmgröße ermitteln und diese Variable dann in Deinen Code einsetzen?

Danke schön.

LG
Eisi :-)
AW: ActiveX-Buttons bildschirmunabhängig positionieren?
07.03.2024 16:50:13
Eisi
Hallo Uwe,
ich habe Dein Lösungsansatz zum Anlass genommen, um mit ChatGPT in eine Diskussion zu gehen. Wir haben so hin und her diskutiert und folgender Vorschlag kam als Lösung raus. Die Lösung erscheint mir vielversprechend. Wollte ich Euch nicht vorenthalten.
Danke.
LG Eisi :-)



Private Sub Workbook_Open()
' Neue Position des Buttons berechnen und einstellen
NeuberechnenButtonPosition
End Sub
'
Private Sub Workbook_WindowResize(ByVal Wn As Window)
' Neue Position des Buttons berechnen und einstellen
NeuberechnenButtonPosition
End Sub
'
Private Sub NeuberechnenButtonPosition()
' Referenzwerte der Bildschirme
'
' Long = Ganzzahl
' Integer ist nicht mehr üblich und bringt auch keinen Speichervorteil.
' Double = Kommazahl
'
Const ReferenzBreite1 As Long = 732 'Mein Curve-Bildschirm
Const ReferenzHöhe1 As Long = 780 'Mein Curve-Bildschirm

Const ReferenzBreite2 As Long = 971 'Mein Laptop
Const ReferenzHöhe2 As Long = 521 'Mein Laptop

Const ReferenzBreite3 As Long = 1452 'Mein Bildschirm
Const ReferenzHöhe3 As Long = 792 'Mein Bildschirm

Const ReferenzBreite4 As Long = 700 'frei
Const ReferenzHöhe4 As Long = 400 'frei

' Aktuelle Bildschirmgröße abrufen
Dim aktuelleBreite As Long
Dim aktuelleHöhe As Long
aktuelleBreite = Application.Width
aktuelleHöhe = Application.Height

' Feststellen, welcher Bildschirm gerade die Voraussetzungen erfüllt
Select Case True
Case aktuelleBreite = ReferenzBreite1 And aktuelleHöhe = ReferenzHöhe1
' Mein Curve-Bildschirm
BerechneUndSetzeButtonPosition ReferenzBreite1, ReferenzHöhe1

Case aktuelleBreite = ReferenzBreite2 And aktuelleHöhe = ReferenzHöhe2
' Mein Laptop
BerechneUndSetzeButtonPosition ReferenzBreite2, ReferenzHöhe2

Case aktuelleBreite = ReferenzBreite3 And aktuelleHöhe = ReferenzHöhe3
' Mein Bildschirm
BerechneUndSetzeButtonPosition ReferenzBreite3, ReferenzHöhe3

Case aktuelleBreite = ReferenzBreite4 And aktuelleHöhe = ReferenzHöhe4
' Bildschirm 4
BerechneUndSetzeButtonPosition ReferenzBreite4, ReferenzHöhe4

Case Else
' Wenn keine Übereinstimmung gefunden wurde, nichts tun
Exit Sub
End Select
End Sub

Private Sub BerechneUndSetzeButtonPosition(ByVal ReferenzBreite As Integer, ByVal ReferenzHöhe As Integer)
' Horizontale und vertikale Skalierungsfaktoren berechnen
Dim horizontalerFaktor As Double
Dim vertikalerFaktor As Double

horizontalerFaktor = Application.Width / ReferenzBreite
vertikalerFaktor = Application.Height / ReferenzHöhe

' Neue Position der Buttons berechnen
'
' 2-Schichtplatten
' Button 1
Dim neueTopPosition_1 As Double 'Nummern anpassen!!
Dim neueLeftPosition_1 As Double 'Nummern anpassen!!
neueTopPosition_1 = 153.5833 * vertikalerFaktor ' Wert für den Button eintragen!!
neueLeftPosition_1 = 204.1666 * horizontalerFaktor ' Wert für den Button eintragen!!
With ThisWorkbook.Sheets("Kalkulation").Shapes("cmdPlattenUebertragen").TopLeftCell
.Top = neueTopPosition_1
.Left = neueLeftPosition_1
.Width = 120
.Height = 25.5
End With
'
'
' 3-Schichtplatten
' Button 2
Dim neueTopPosition_2 As Double 'Nummern anpassen!!
Dim neueLeftPosition_2 As Double 'Nummern anpassen!!
neueTopPosition_2 = 6873.833 * vertikalerFaktor ' Wert für den Button eintragen!!
neueLeftPosition_2 = 202.5 * horizontalerFaktor ' Wert für den Button eintragen!!
With ThisWorkbook.Sheets("Kalkulation").Shapes("cmdPlatten3Uebertragen").TopLeftCell
.Top = neueTopPosition_2
.Left = neueLeftPosition_2
.Width = 120
.Height = 25.5
End With

End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige