HERBERS Excel-Forum - das Archiv

Thema: Kombinationsfeld | Herbers Excel-Forum

Kombinationsfeld
Andreas

Liebe Excel-Profis,
wenn ich ein Kombinationsfeld erzeuge und mit RMT "Steuerelement formatieren" drücke, komme ich auf dem Tab "Steuerung" zum Eintrag "Zellverknüpfung".
Ich möchte 300 Kombinationsfelder untereinander (in jeder Zeile eins) erzeugen, müsste jedoch die "Zellverknüpfung" jedesmal neu eingeben, da sie sich nicht dynamisch auf die neue Zeile anpasst. Leider benötige ich die Zellverknüpfung, weill ich hierauf einen Sverweis steuere, der mit dieser Zahl weiterrechnet.
Meine Frage also, kann ich mit blossem Kopieren des Kombinationsfeldes auf die nächste Zeile auch die Zellverküpfung sich anpassen lassen?
Vielen Dank im Voraus
Gruss
Andreas

AW: Kombinationsfeld
Beverly

Hi Andreas,
nein, das geht nicht. Du kannst das höchstens per VBA machen:
Sub Kombinationsfelder()
Dim cbbDropDown As DropDown
Dim inElement As Integer
For inElement = 1 To 300
Set cbbDropDown = ActiveSheet.DropDowns.Add(10, 0, 50, 10)
With ActiveSheet.Shapes(inElement)
.Width = Cells(inElement, 1).Width
.Height = Rows(inElement).RowHeight
.Left = 0
.Top = Rows(inElement).Top
.ControlFormat.ListFillRange = "Tabelle1!$A$1:$A$7"
.ControlFormat.LinkedCell = Cells(.TopLeftCell.Row, .TopLeftCell.Row).Address
End With
Next inElement
Set cbbDropDown = Nothing
End Sub

Die Kombinationsfelder werden in Spalte A ab Zeile 1 eingefügt. Ich bin davon ausgegangen, dass sie alle den selben Eingabebereich haben. Beides musst du an deine Bedingungen anpassen.


AW: Kombinationsfeld
Andreas

Hey gleich 3 VBA-Lösungen. Ich bin zwar eine Null in VBA, werde aber alle drei mal einkopieren und ausprobieren - habt ALLE vielen Dank und guten Rutsch :-)
Viele Grüsse
Andreas
hier noch eine Version...
Tino

Hallo,
dieser geht alle Kombinationsfelder auf der Tabelle 1 durch und gibt diesem die Linkzelle rechts daneben.
Sub Link_Cell_Erstellen()
Dim oSh As Shape
For Each oSh In Tabelle1.Shapes
If TypeName(oSh.DrawingObject) = "DropDown" Then
oSh.DrawingObject.LinkedCell = oSh.TopLeftCell.Offset(0, 1).Address
End If
Next oSh
End Sub
Gruß Tino
AW: Kombinationsfeld
Josef

Hallo Andreas,
nachdem du die Kombos erstellt hast und dem ersten die richtige Zellverknüpfung zugewiesen hast,
kannst du diesen Code ausprobieren.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub kombi()
  Dim objShp As Shape
  Dim lngOffset As Long, lngCol As Long
  
  For Each objShp In ActiveSheet.Shapes
    If objShp.Type = msoFormControl Then
      If objShp.FormControlType = xlDropDown Then
        If lngCol = 0 Then
          lngCol = Range(objShp.DrawingObject.LinkedCell).Column
          lngOffset = objShp.TopLeftCell.Row - _
            Range(objShp.DrawingObject.LinkedCell).Row
        Else
          objShp.DrawingObject.LinkedCell = Cells(objShp.TopLeftCell.Row - _
            lngOffset, lngCol).Address
        End If
      End If
    End If
  Next
  
End Sub

Gruß Sepp