Clever-Excel-Forum

Normale Version: VBA Elementrgröße setzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey Leute,

zum Feierabend habe ich hier nochmal eine kniffelige Aufgabe.

Ich habe einige ActiveX Elemente auf einem Arbeitsblatt. Damit habe ich immense Probleme, wenn ich die Datei über einen Beamer abspiele. Dann verändert sich die Größe, Schriftgröße, Position usw.

Ich habe nun so lange ausprobiert, bis ich eine Lösung gefunden habe. Allerdings funktioniert diese nicht überall.

Ich habe 2 Checkboxen. Wenn ich auf die eine Checkbox klicke werden alle Elemente auf dem Arbeitsblatt neu gesized was auch prima funktioniert.
Auf der zweiten Checkbox liegt im Prinzip exakt die gleiche Logik - dort wird die Checkbox beim Klick aber immer kleiner.

Wo liegt mein Fehler?

Das hier ist die funktionierende Checkbox, die alle Elemente neu sized:
Code:
Private Sub CheckBox26_Click()
Application.ScreenUpdating = False
If CheckBox26.Value = True Then
ToggleButton24.Value = False
End If
SummeAuszahlungenAusblenden
If ToggleButton23.Value = False Then
If CheckBox26.Value = True Then
ComboBox21.Visible = True
Rows("26:38").EntireRow.Hidden = False
ComboBox21_Change
For i = 4 To 6
Columns(i).Hidden = False
Next i
Else: ComboBox21.Visible = False
Rows("26:38").EntireRow.Hidden = True
Worksheets("Input").Range("Z30").Value = "0"
For i = 4 To 6
Columns(i).Hidden = True
Next i
End If
Else:
If CheckBox26.Value = True Then
ComboBox21.Visible = True
Rows("37:39").EntireRow.Hidden = False
ComboBox21_Change
If CheckBox26.Value = False Then
Rows("37:39").EntireRow.Hidden = True
Call LinksVerschieben
End If
Else: ComboBox21.Visible = False
Rows("37:38").EntireRow.Hidden = True
Worksheets("Input").Range("Z30").Value = "0"

End If
End If
Call SetSize
   Application.ScreenUpdating = True
End Sub

Und das hier ist die, die nichts tut:
Code:
Private Sub CheckBox21_Click()
   Application.ScreenUpdating = False
   SummeAuszahlungenAusblenden
If ToggleButton23.Value = False Then
If CheckBox21.Value = True Then
ComboBox25.Visible = True
Rows("39:51").EntireRow.Hidden = False
ComboBox25_Change
SummeEinblenden
Else: ComboBox25.Visible = False
Rows("39:51").EntireRow.Hidden = True
Worksheets("Input").Range("Z48").Value = "0"
End If
SummeEinblenden
Else:
If CheckBox21.Value = True Then
ComboBox25.Visible = True
Rows("51:52").EntireRow.Hidden = False
ComboBox25_Change
Else: ComboBox25.Visible = False
Rows("51:52").EntireRow.Hidden = True
Worksheets("Input").Range("Z48").Value = "0"
SummeEinblenden
End If
SummeEinblenden
End If

Call SetSize

    Application.ScreenUpdating = True
End Sub

Die SetSize:
Code:
Sub SetSize()
Application.ScreenUpdating = False

   Call SetSizeGeneral
   If ToggleButton24.Value = True And CheckBox26.Value = True Then
   Call LinksVerschieben
   ElseIf CheckBox26.Value = True Then
   Call RechtsVerschieben
   ElseIf CheckBox26.Value = False Then
   Call LinksVerschieben
   End If   
   
    Application.ScreenUpdating = True
   
End Sub

Falls ihr die LinksVerschieben / RechtsVerschieben sehen wollt sagt Bescheid - die sind aber etwas größer.
Für mich sieht es so aus, als würde er in der Private Sub CheckBox21_Click() überhaupt nicht bis zur Stelle Call SetSize kommen... obwohl diese außerhalb aller Schleifen steht und eigentlich durchlaufen werden müsste.

Ich hatte auch schon die Vermutung, dass es an dem ActiveX Bug liegt und durch die Spalten behoben wird, die zwischendrin aus/eingeblendet werden.
Aber Spalten ein/ausblenden und dann die SetSize aufrufen hat auch nichts geändert.

CheckBox26_Click tut genau das was es soll und setzt alle Elementgrößen neu.
Wieso funktioniert das nicht auch mit der anderen Checkbox?
Statt

Code:
If CheckBox26.Value = True Then
ToggleButton24.Value = False
End If

Schreiben Programmierer:

Code:
ToggleButton24 = Not CheckBox26
Danke für den Tipp - bringt mich bei der eigentlichen Thematik aber mal wieder nicht weiter ;)

Ich habe es jetzt provisorisch so geregelt, dass ich beim klick jeder CheckBox die Checkbox die funktioniert einmal aufrufe (Value ändern und wieder zurück ändern).

Ist aber extrem inperformant. Dauert dann 3-4 Sekunden bis das alles einmal durch ist. Zudem klappt er Spalten auf/zu was nicht gerade professionell aussieht.

Ich wäre euch also weiterhin sehr verbunden, wenn jemand meinen Fehler findet.
Ich glaube so langsam, dass es einfach nur ein Bug ist... ich bin schon einen ganzen Tag daran und habe schon zig Wege probiert... aber es funktioniert einfach nichts, obwohl es eigentlich funktionieren müsste.
Hier geht alles blitzschnell;

Ohne Datei keine Ahnung
Habe es jetzt.... das ist wieder mal so eine Kleinigkeit bei der man fast verzweifelt...

Das hier funktioniert nicht:
Code:
Private Sub CheckBox1_click()
Call SetSize
End Sub
Und das hier wiederum funktioniert:
Code:
Private Sub Zwischenschritt()
Call SetSize
End Sub

Private Sub CheckBox1_click()
Call Zwischenschritt
End Sub
Wieso / weshalb / warum? Frag mich nicht...