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, 15:58 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2017, 15: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, 16:08 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2017, 16: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, 16:16 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2017, 16: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.