Supportnet / Forum / Tabellenkalkulation
Spaltenbreite ermitteln (für DropDown-Felder)
Frage
Hallo Jungs,
wieder eine knifflige Sache (zumindest für mich). Ich lasse in einem Sheet automatisiert Dropdowns einfügen und die Spaltenbreite anpassen. Die Spaltenbreite ist dabei stets auf den gleichen Wert gesetzt, so dass das Dropdownmenü die Zelle sauber abdeckt. Nun würde ich aber gerne die Zelle gerne automatisch ihres Inhaltes entsprechend anpassen (kein Problem) und dem DD-Feld die Daten als Parameter mitgeben (Problem!).
Wie kann ich die Spaltenbreite (Zeilenhöhe ist hierbei nicht so wichtig) einer Zelle ermitteln?
Beste Grüße,
guethi
Antwort 1 von guethi
Lösung:
breite = Application.Round(Cells(2, 1).ColumnWidth + 1, 0)
Wobei ich aufrunden muss, da die DD-Box einen Wert mit Punkt braucht, Excel aber aus dieser Berechnung einen mit Komma liefert...:-/
Das Problem verschiebt sich nun dahingehend, dass ich den Wert der Spaltenbreite in den der Boxbreite umrechnen muss, da offensichtlich zwei verschiedene Einheiten verwendet werden.
Ich halte euch auf dem Laufenden...
viele Grüße,
guethi
breite = Application.Round(Cells(2, 1).ColumnWidth + 1, 0)
Wobei ich aufrunden muss, da die DD-Box einen Wert mit Punkt braucht, Excel aber aus dieser Berechnung einen mit Komma liefert...:-/
Das Problem verschiebt sich nun dahingehend, dass ich den Wert der Spaltenbreite in den der Boxbreite umrechnen muss, da offensichtlich zwei verschiedene Einheiten verwendet werden.
Ich halte euch auf dem Laufenden...
viele Grüße,
guethi
Antwort 2 von Coolpix
hallo guethi,
dein Problem ist, dass du ein Dropdownfeld aus der Formularsymbolleiste benutzt...
Das sind Zeichnungsobjekte welche sich über einen Skalierungsfaktor ("ShapeRange.ScaleWidth") verändern lassen...
Für dein Vorhaben nicht so praktikabel.
Wenn du ein Kombinationsfeld aus der Steuerelement-Toolbox nimmst geht das viel einfacher:
weil die beiden Größenwerte das gleiche Format haben.
Feedback fänd ich Klasse !!!
Greetings ;-)
dein Problem ist, dass du ein Dropdownfeld aus der Formularsymbolleiste benutzt...
Das sind Zeichnungsobjekte welche sich über einen Skalierungsfaktor ("ShapeRange.ScaleWidth") verändern lassen...
Für dein Vorhaben nicht so praktikabel.
Wenn du ein Kombinationsfeld aus der Steuerelement-Toolbox nimmst geht das viel einfacher:
Me.ComboBox1.Width = Me.Range("B7").Width
weil die beiden Größenwerte das gleiche Format haben.
Feedback fänd ich Klasse !!!
Greetings ;-)
Antwort 3 von Coolpix
hallo nochmal,
hab nochmal nachgeschlagen...
mit dem Dropdown aus der Formularleiste geht´s auch:
Greetings ;-)
hab nochmal nachgeschlagen...
mit dem Dropdown aus der Formularleiste geht´s auch:
ActiveSheet.Shapes("Dropdown 1").Select
Selection.ShapeRange.Width = ActiveSheet.Range("C2").Width
Greetings ;-)
Antwort 4 von guethi
Besten Dank, Coolpix!
Ich habe es mit der zweiten Variante gelöst, war ein wenig Gefuddel, aber wenn´s denn läuft :-)...schööön!
Für alle die mal ähnliches vorhaben, hier der Code zur freien Verwendung:
Beste Grüße,
guethi
Ich habe es mit der zweiten Variante gelöst, war ein wenig Gefuddel, aber wenn´s denn läuft :-)...schööön!
Für alle die mal ähnliches vorhaben, hier der Code zur freien Verwendung:
Sub dropdowns()
Application.ScreenUpdating = False
Anzahl_Spalten = ActiveSheet.UsedRange.Columns.count
´Einstellen der Spaltenbreite
Sheets("Tabelle1").Activate
Cells.Select
Cells.EntireColumn.AutoFit
´pixel bezeichnet die Anfangskoordinate des DD-Feldes, zunächst also Null
pixel = 0
For i = 1 To Anzahl_Spalten
Cells(2, i).Select
´Die Breite der Box (die weiter unten auch die neue Koordinate bestimmt) wird festgelegt _
dabei wird durch diese if-Schleife stets abgerundet
breite = ActiveCell.Width
breite2 = Application.Round(ActiveCell.Width, 0)
If breite < breite2 Then
breitefin = breite
Else
breitefin = breite - 1
End If
´Die DD-Box wird erstellt, dabei werden folgende Parameter mitgegeben (Position horizontal, _
Position vertikal, Breite, Höhe)
ActiveSheet.dropdowns.Add(pixel, 12.75, breite, 12.75).Select
´hier liegen die Eigenschaften des DD-Feldes
With Selection
.ListFillRange = "Tabelle2!$A$1:$A$6"
.LinkedCell = ActiveCell.Address
.DropDownLines = 7
.Display3DShading = True
.PrintObject = False
End With
´und hier wird die horizontale Position hochgezählt
pixel = pixel + breite
Next i
Application.ScreenUpdating = True
End Sub
Beste Grüße,
guethi

