Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then controlltable.ComboBox1.List = Filter([transpose(if(isblank(snb),"~",snb))], "~", 0)
End Sub
dieser ist in der arbeitsmappe wo die liste ist.
Code:
Private Sub UserForm_initialize()
Pr00.UsedRange.Name = "snb"
ComboBox1.List = Filter([transpose(if(isblank(snb),"~",snb))], "~", 0)
End Sub
23.04.2017, 14:58 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2017, 14:58 von atilla.)
Hallo rotzi,
wenn Deine Tabelle mit der Liste "Pr00" heißt,
dann so:
Code:
Private Sub UserForm_initialize()
Sheets("Pr00").UsedRange.Offset(1, 0).Name = "snb"
ComboBox1.List = Filter([transpose(if(isblank(snb),"~",snb))], "~", 0)
End Sub
Hab das "mit" ohne Überschriften eingearbeitet.
zu 2. noch
Es musste gat nicht so kompliziert sein, wie ich es gezeigt habe.
Es geht natürlich auch wie Carsten es gezeigt und erklärt hat.
In Deinem Fall also:
statt:
Application.Goto reference:=Cells(2, 1), Scroll:=True
so
Application.Goto reference:=Cells(7, 1), Scroll:=True
Dein Code für das Befüllen ist natürlich nicht so effektiv gewesen.
Man kann mit einer Schleife arbeiten. Aber bei Dir geht die Schleife bis zur gesamt Anzahl der Zeilen in der Tabelle.
Statt xldown wäre da xlup schon sehr viel vorteilhafter gewesen.
23.04.2017, 15:08 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2017, 15:08 von DbSam.)
Schön, da sind wir auf der Zielgeraden ...
Ich würde das nun folgendermaßen lösen, damit es keinen doppelten Code gibt:
Hinter der Tabelle:
Code:
'UserForm1 durch den Name Deiner Userform ersetzen ...
Private Sub CommandButton1_Click()
UserForm1.Show vbModeless
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then If isFormLoaded("UserForm1") Then UserForm1.FillMyComboBox
End Sub
Function isFormLoaded(ByVal strName As String) As Boolean
Dim i As Integer, b As Boolean
strName = LCase(strName)
For i = 0 To VBA.UserForms.Count - 1
If LCase(UserForms(i).Name) = strName Then
b = True
Exit For
End If
Next
isFormLoaded = b
End Function
Im Userform:
Code:
Private Sub UserForm_Activate()
FillMyComboBox
End Sub
Public Sub FillMyComboBox()
'Tabelle1 durch Deinen Tabellenname ersetzen:
Sheets("Tabelle1").UsedRange.Offset(1, 0).Name = "snb"
ComboBox1.List = Filter([transpose(if(isblank(snb),"~",snb))], "~", 0)
End Sub
Frage 2 hat sich anscheinend nun auch erledigt ...
23.04.2017, 15:16 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2017, 15:19 von atilla.)
Hallo zusammen,
um etwas Verwirrung reinzubringen von mir eine banale Lösung, angelehnt an Deine Versuche:
Code:
'Code im Codemodul der Tabelle
'######################################
Private Sub CommandButton1_Click()
UserForm1.Show vbModeless
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:A86")) Is Nothing Then
If UserForm1.Visible = True Then
UserForm1.ComboBox1.Clear
UserForm_Combo_1_Füllen
End If
End If
End Sub
Und:
Code:
'Code in einem allgemeinen Modul
'###############################
Sub UserForm_Combo_1_Füllen()
Dim Zelle As Range
For Each Zelle In Worksheets("Tabelle1").Range("A2:A86").SpecialCells(xlCellTypeConstants)
UserForm1.ComboBox1.AddItem Zelle.Value
Next
End Sub
und
Code:
'Code in Userform
'##############################
Private Sub UserForm_initialize()
UserForm_Combo_1_Füllen
End Sub
Hi Carsten, da hatten wir die ähnliche Idee.
Deine Umsetzung gefällt.