Hallo,
versuch's mal mit einer Listbox mit Mehrfachauswahl:
Ein Userform und ein eigenes Klassenmodul einfügen, das Klassenmodul in clsCommandButton umbenennen, dann folgende Codes einfügen:
' **********************************************************************
' Modul: Tabelle1 Typ: Klassenmodul des Tabellenblattes
' **********************************************************************
Option Explicit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Rows("1:10")) Is Nothing Then '// Bereich anpassen....
Cancel = True
With UserForm1
Set .prpobjTargetRow = Target.EntireRow
Call .Show
End With
End If
End Sub
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************
Option Explicit
Private mobjCommandButtonClass As clsCommandButton
Private mobjTargetRow As Range
Private Sub UserForm_Activate()
Set mobjCommandButtonClass = New clsCommandButton
With Controls.Add(bstrProgID:="Forms.ListBox.1", Name:="ListBox1", Visible:=True)
.Left = 10!
.Top = 10!
.Height = 80!
.Width = 100!
.MultiSelect = fmMultiSelectMulti
.List() = Array("Deutschland", "Norwegen", "Spanien", "Frankreich", "Schweden", "Portugal")
End With
With Controls.Add(bstrProgID:="Forms.CommandButton.1", Name:="CommandButton1", Visible:=True)
.Left = Controls(0).Left + Controls(0).Width + 10!
.Top = Controls(0).Top
.Height = 50!
.Width = 50!
.Caption = "Bestätigen"
.BackColor = vbMagenta
End With
With mobjCommandButtonClass
Set .prpcmdButton = Controls(1)
Set .prpobjUserForm = Me
End With
End Sub
Private Sub UserForm_Terminate()
Set mobjCommandButtonClass = Nothing
Set mobjTargetRow = Nothing
End Sub
Friend Property Set prpobjTargetRow(ByRef probjTargetRow As Range)
Set mobjTargetRow = probjTargetRow
End Property
Public Sub prcInsertCountryNames()
Dim astrNames() As String
Dim lngIndex As Long, ialngCount As Long
With Controls(0)
For lngIndex = 1 To .ListCount
If .Selected(pvargIndex:=lngIndex - 1) Then
ialngCount = ialngCount + 1
ReDim Preserve astrNames(ialngCount - 1) As String
astrNames(ialngCount - 1) = .List(pvargIndex:=lngIndex - 1)
End If
Next
End With
If ialngCount > 0 Then
With mobjTargetRow
Call .ClearContents
ThisWorkbook.Worksheets(.Parent.Name).Cells( _
.Row, 1).Resize(1, UBound(astrNames) + 1).Value = astrNames
End With
Else
If MsgBox("Keine Länder ausgewählt, möchten Sie eine Auswahl treffen?", vbQuestion + vbYesNo) = vbNo Then _
Call Unload(Me)
End If
End Sub
' **********************************************************************
' Modul: clsCommandButton Typ: Klassenmodul
' **********************************************************************
Option Explicit
Private mobjUserForm As Object
Private WithEvents mcmdButton As CommandButton
Private Sub Class_Terminate()
Set mcmdButton = Nothing
Set mobjUserForm = Nothing
End Sub
Private Sub mcmdButton_Click()
Call mobjUserForm.prcInsertCountryNames
End Sub
Friend Property Set prpcmdButton(ByRef prcmdButton As CommandButton)
Set mcmdButton = prcmdButton
End Property
Friend Property Set prpobjUserForm(ByRef probjUserForm As Object)
Set mobjUserForm = probjUserForm
End Property
Gruß,
|