2016-09-02 3 views
0

Ich verwende den am 4./27/14 vom L42 erstellten VB-Code, der eine Checkbox-Liste in einer einzelnen Zelle erstellt.Erstellen einer Mehrfachauswahl-Kontrollkästchenliste nebeneinander in einer Zelle in Excel

Option Explicit 
Dim fillRng As Range 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

Dim LBColors As MSForms.ListBox 
Dim LBobj As OLEObject 
Dim i As Long 

Set LBobj=Me.OLEObjects("LB_Colors") 
Set LBColors = Target 

    If Not Intersect(Target, [B2]) Is Nothing Then 
     Set fillRng = Target 
    With LBobj 
     .Left = fillRng.Left 
     .Top = fillRng.Top 
     .Width = fillRng.Width 
     .Visible = True 
    End With 
    Else 
    LBobj.Visible = False 
    If Not fillRng Is Nothing Then 
     fillRng.ClearContents 
     With LBColors 
      If .ListCount <> 0 Then 
       For i = 0 To .ListCount -1 
       If fillRng.Value = Then 
        If .Selected(i) Then fillRng.Value = .List(i) 
       Else 
        If .Selected(i) Then fillRng.Value = _ 
         fillRng.Value & "," & .List(i) 
       End If 
       Next 
     End With 
     Set fillRng = Nothing 
     End If 
    End If 

End Sub 

Der Code funktioniert perfekt und ich konnte das Kontrollkästchen Liste zu den Zellen in vollständiger Spalte erweitern, indem die Veränderung (Target, [B1: B40]). Dieser Logik folgend, dachte ich, dass ich die Kontrollkästchen C und D um (Target, [B1: D40] erweitern könnte. Nach Auswahl der gewünschten Elemente in der Spalte B und Anklicken oder Tabulieren in die Spalte C wird das gesamte Kontrollkästchen mit den ausgewählten Elementen verschoben ohne in die vorherige Zelle zu schreiben Ich möchte in der Lage sein, über die nächste Zelle in der Zeile zu springen oder zu klicken und die gleichen Checkbox-Elemente zu haben, die diese Zelle mit dem ausgewählten Element füllen, unabhängig von der vorherigen Zelle Zellen und das gleiche tun und haben Zellen behalten und die Anzeige der Elemente ausgewählt. dieser Code kann geändert werden, das zu tun?

Danke.

Antwort

0

immer die Werte in der Zelle zu setzen, nur um Ihren Code zu etwas ändern so:

Option Explicit 
Dim fillRng As Range 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Dim LBColors As MSForms.ListBox 
    Dim LBobj As OLEObject 
    Dim i As Long 

    Set LBobj = Me.OLEObjects("LB_Colors") 
    Set LBColors = Target 

    LBobj.Visible = False 
    If Not fillRng Is Nothing Then 
    fillRng.ClearContents 
    With LBColors 
     If .ListCount <> 0 Then 
     For i = 0 To .ListCount - 1 
      If .Selected(i) Then 
      If fillRng.Value = "" Then 
       fillRng.Value = .List(i) 
      Else 
       fillRng.Value = fillRng.Value & "," & .List(i) 
      End If 
      End If 
     Next 
     End If 
    End With 
    Set fillRng = Nothing 
    End If 

    If Not Intersect(Target, [B1:D40]) Is Nothing Then 
    Set fillRng = Target 
    With LBobj 
     .Left = fillRng.Left 
     .Top = fillRng.Top 
     .Width = fillRng.Width 
     .Visible = True 
    End With 
    End If 

End Sub 
+0

[link] (http://stackoverflow.com/users/5461205/dirk-reichel) _italic _ ** fett ** 'Mehrfachauswahl Kontrollkästchen in nebeneinander liegenden Zellen' Dirk Reichel, ausgezeichnet! !! Vielen Dank. Der von Ihnen angegebene Code funktioniert genau so, wie ich es beschrieben und angefordert habe. Wenn ich jedoch zu der nächsten Zelle übergebe, obwohl die Auswahlen aus der vorherigen Zelle angezeigt werden, werden die Checkbox-Auswahl nicht gelöscht und in die nächste Zelle übertragen. Gibt es eine Möglichkeit, das Kontrollkästchen zu deaktivieren, während es sich von Zelle zu Zelle bewegt? Nochmals vielen Dank für Ihr Wissen. Es wird sehr geschätzt! Gerald Davis –

+0

In diesem Fall müssen Sie sie erneut initialisieren, indem Sie 'unload' statt' hide' verwenden. Oder deaktivieren Sie die Option innerhalb der Schleife. Dieses Verhalten sollte auch in Ihrem alten Code enthalten sein. –

Verwandte Themen