Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hallo, ich habe zwei Userformen, eine mit ListBox und eine mit TextBox und kann entweder die eine oder die andere verwenden. Ich will das jetzt in eine einzige Userform zusammenführen, damit der User die Wahl hat, etwas aus der ListBox auszuwählen oder die Nummer in die TextBox einzugeben. Je nachdem soll dann die Auswahl weiterverarbeitet werden, wie wird das gelöst? Wie kann ich da eine Entscheidung einbauen, je nachdem, ob etwas ausgewählt oder in die Textbox eingegeben wird. Makro für Userform mit nur ListBox: Code: Private Sub okButton1_Click() ' Übernehmen boAbbruch = False Application.ScreenUpdating = False 'Datenzeile aus Formular ermitteln lngAdressZeile = ListBox1.ListIndex + 2 ...
Makro für Userform mit nur TextBox: Code: Private Sub okButton_Click() Call Suchen_ReNr ...
Sub Suchen_ReNr() Dim i As Long, j As Long Dim loLetzte As Long Dim strText As String Dim arrTab Dim rngData As Range strText = "*" & strSuchbegriff & "*" Application.ScreenUpdating = False With Sheets("Datenbankliste") loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte Zeile der Spalte A (1) Set rngData = .Range("H2:H" & loLetzte).Find(strText, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False) If Not rngData Is Nothing Then lngAdressZeile = rngData.Row 'MsgBox lngAdressZeile End If End With If rngData Is Nothing Then MsgBox "Rechnungsnummer wurde nicht gefunden!" Else Set rngData = Nothing End If End Sub
Wie können die miteinander kombiniert werden?
Registriert seit: 14.04.2014
Version(en): Office 2013/2016/2019/365
16.02.2016, 08:55
(Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2016, 08:55 von chris-ka.)
Hi, Auf Grund von Usability würde ich beide kombinieren! Wird was in der Listbox gewählt erscheint das auch in der TextBox, wird was in der TextBox gewählt in der Listbox. Inklusive einer Überprüfung ob das was in der TextBox steht auch in der Listbox vorkommt. Wobei ich statt einer TextBox gleich eine Combo wählen würde!
rabe.xlsm (Größe: 22,13 KB / Downloads: 11)
lg Chris
lg Chris Feedback nicht vergessen. 3a2920576572206973742064656e20646120736f206e65756769657269672e
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hi Ralf, verknüpft dann z.B. so: Private Sub ListBox1_Change() If Me.ActiveControl.Name = "ListBox1" Then If ListBox1.ListIndex > -1 Then TextBox1 = ListBox1 End If End If End Sub
Private Sub okButton_Click() boAbbruch = False
Application.ScreenUpdating = False
'Datenzeile aus Formular ermitteln lngAdressZeile = ListBox1.ListIndex + 2 ... End Sub
Private Sub TextBox1_Change() Dim lngZ As Long If Me.ActiveControl.Name = "TextBox1" Then With Me.ListBox1 .ListIndex = -1 If Len(TextBox1) Then For lngZ = 0 To .ListCount - 1 If TextBox1.Text = Left(.List(lngZ), Len(TextBox1)) Then .ListIndex = lngZ Exit For End If Next lngZ End If End With End If End Sub Gruß Uwe
Registriert seit: 29.09.2015
Version(en): 2030,5
Code: Private Sub cmbOK_Click() msgbox Listbox1.value & Texbox1.Text End Sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Vielen Dank, ich habe die Version von Chris verwendet!
Registriert seit: 29.09.2015
Version(en): 2030,5
Combobox ist entworfen um Wahl und eigene Texte zu kombinieren. Statt Textbox + Listbox, oder Textbox + Combobox reicht eine Combobox.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
16.02.2016, 14:11
(Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2016, 14:11 von Rabe.)
Hi, (16.02.2016, 13:11)snb schrieb: Statt Textbox + Listbox, oder Textbox + Combobox reicht eine Combobox. aaah, ja, interessant. Wie sieht denn der Code aus, wenn ich nur eine Combobox habe und da eine Liste drin haben will, aber auch die Möglichkeit, eine manuelle Eingabe zu ermöglichen? Wie wird die ComboBox mit der Liste befüllt? Bisher ist der Code so: Code: Option Explicit
Private Sub ListBox1_Click() Dim i As Long Me.txt_nr.Text = Me.ListBox1.List(Me.ListBox1.ListIndex) End Sub
Private Sub txt_nr_Change() Dim i As Long If IsNumeric(Me.txt_nr.Text) Or Me.txt_nr.Text = "" Then For i = 0 To Me.ListBox1.ListCount - 1 If Me.txt_nr.Text = Me.ListBox1.List(i) Then Me.ListBox1.ListIndex = i End If Next End If End Sub
'Private Sub UserForm_Activate() ' Dim i As Integer ' For i = 1 To 40 ' Me.ListBox1.AddItem i ' Next 'End Sub
Private Sub UserForm_Initialize() Dim objWs As Worksheet Dim objZeile As Range Set objWs = ThisWorkbook.Worksheets("Datenbankliste") For Each objZeile In objWs.UsedRange.Rows If objZeile.Row > 1 Then Me.ListBox1.AddItem objZeile.Cells(1, 8) End If Next objZeile Set objWs = Nothing Set objZeile = Nothing strDatei = ThisWorkbook.Path & "\Logo.jpg" If Dir(strDatei) = "" Then ' prüfen, ob Bild vorhanden MsgBox ("Firmenlogo fehlt! " & Chr(10) & Chr(13) & strDatei) Else Me.Image1.Picture = LoadPicture(strDatei) End If End Sub
Private Sub CancelButton_Click() ' Eingabe abbrechen boAbbruch = True Unload Me ' Me.Hide End Sub
Private Sub okButton1_Click() ' Übernehmen boAbbruch = False Application.ScreenUpdating = False 'Datenzeile aus Formular ermitteln lngAdressZeile = ListBox1.ListIndex + 2
...
Registriert seit: 29.09.2015
Version(en): 2030,5
16.02.2016, 14:40
(Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2016, 14:41 von snb.)
Diese Code reicht: Code: Private Sub UserForm_Initialize() combobox1.list=ThisWorkbook.Worksheets("Datenbankliste").usedrange.value If Dir(ThisWorkbook.Path & "\Logo.jpg") <> "" Then Image1.Picture = LoadPicture(ThisWorkbook.Path & "\Logo.jpg") End Sub
Private Sub okButton1_Click() msgbox combobox1.value end sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
(16.02.2016, 14:11)Rabe schrieb: Wie sieht denn der Code aus, wenn ich nur eine Combobox habe und da eine Liste drin haben will, aber auch die Möglichkeit, eine manuelle Eingabe zu ermöglichen? Wie wird die ComboBox mit der Liste befüllt? Haaah! Selbst rausbekommen: Code: Private Sub UserForm_Initialize() Dim objWs As Worksheet Dim objZeile As Range Set objWs = ThisWorkbook.Worksheets("Datenbankliste") For Each objZeile In objWs.UsedRange.Rows If objZeile.Row > 1 Then loLetzte = objWs.Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1) ComboBox1.RowSource = "Datenbankliste!H2:H" & loLetzte End If Next objZeile Set objWs = Nothing Set objZeile = Nothing End Sub
Private Sub CancelButton_Click() ' Eingabe abbrechen boAbbruch = True Unload Me End Sub
Private Sub okButton1_Click() ' Übernehmen boAbbruch = False Application.ScreenUpdating = False 'Datenzeile aus Formular ermitteln lngAdressZeile = ComboBox1.ListIndex + 2 ...
Das gefällt mir jetzt! Super Lösung!
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Ralf, erkennst Du, was hier passiert: Code: For Each objZeile In objWs.UsedRange.Rows If objZeile.Row > 1 Then loLetzte = objWs.Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1) ComboBox1.RowSource = "Datenbankliste!H2:H" & loLetzte End If Next objZeile
Gruß Atilla
|