Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UserForm ListBox

UserForm ListBox
26.06.2019 10:51:16
Andreas
Hallo Excelfreunde
Ich wähle in einer UserForm in der ListBox einen Eintrag (Datensatz) aus den ich durch verschiedene TextBox'en auch ändern kann und mit einer Schaltfläche die gemachten Änderungen auch wieder in die Ursprungstabelle zurückschreiben kann.
Das funktioniert mit dem beigefügten Code auch sehr gut.
'hier werden die Änderungen der "TextBox" in das Tabellenblatt ("B Bauakte") eingetragen
'

Private Sub CommandButton1_Click()
Sub Änderungen_eintragen()
Dim lngRow As Long
On Error GoTo Fin
If Trim(TextBox10.Text)  "" And Trim(TextBox2.Text)  "" Then
If Me.Tag  "" Then
With Sheets("B Bauakte")
.Cells(Me.Tag, 1).Value = CLng(TextBox10.Text)  'A  'ID entspricht Zeilennummer  _
_
Formel: =ZEILE(A25)
.Cells(Me.Tag, 4).Value = TextBox1.Text         'D  'Ordner-Nummer
.Cells(Me.Tag, 7).Value = TextBox2.Text         'G  'Unterlagen
.Cells(Me.Tag, 8).Value = TextBox3.Text         'H  'Unterlagen Unterordner
.Cells(Me.Tag, 16).Value = TextBox4.Text        'P  'Bemerkung (Spalte "P")
End With
Else
With Sheets("B Bauakte")
lngRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(lngRow, 1) = CLng(TextBox10.Text)            'A  'ID entspricht  _
Zeilennummer Formel: =ZEILE(A25)
.Cells(lngRow, 4) = TextBox1.Text                   'D  'Ordner-Nummer
.Cells(lngRow, 7) = TextBox2.Text                   'G  'Unterlagen
.Cells(lngRow, 8) = TextBox3.Text                   'H  'Unterlagen Unterordner
.Cells(lngRow, 16) = TextBox4.Text                  'P  'Bemerkung (Spalte "P")
End With
End If
TextBox10.Text = ""
Else
MsgBox ("Entry incomplete!")
TextBox10.SetFocus
End If
Fin:
If Err.Number  0 Then MsgBox "Error: " & _
Err.Number & " " & Err.Description
Call CommandButton10_Click                                  'hierdurch werden die Daten in   _
_
der ListBox wieder sofort aktualisiert
End Sub

Meine 1.Frage dazu ist:
Wie muss ich den Code ergänzen oder abändern das mir nach der Aktualisierung des Datensatzes der Datensatz wie ursprünglich in der ListBox blau hinterlegt (also wieder den Focus erhält)
Bei meinem Code mus ich erst den Datensatz wieder in der ListBox per Mausklick auswählen um den geänderten Datensatz wieder in den zugehörigen TexBox'en anzuzeigen.
Hier noch der Code der mir anschließend die ListBox wieder nach dem Suchkriterium befüllt.
Hier sollte dann der ListBox Eintrag wieder wie vorher ausgewählt werden (blau hinterlegt und Focus erhalten)
Private Sub CommandButton10_Click()
Dim c As Range
Dim rngBereich As Range
Dim lngAnzahl As Long
Dim strFirst As String
ComboBox10 = ""     'sucht in Spalte "D" nach  Ordner
ComboBox11 = ""     'suchen "BWH und BWB erfasst"  Spalte "B"
TextBox11 = ""      'suchen "Equipment"
ThisWorkbook.Worksheets("B Bauakte").Activate
ThisWorkbook.Worksheets("B Bauakte").Cells(13, 1).Select
ListBox1.Clear
With Sheets("B Bauakte")
'.Range("A13").Select        'wenn ich das nicht mache kann es passieren das die  _
erforderlichen Unterlagen mit "X" nicht angezeigt werden
'es entsteht ein falscher Wert wenn eine aktivierte Zelle sich   _
_
noch in der Zeile des Datensatzes befindet
'eine Erkärung für dieses Verhalten habe ich aber NICHT
Set rngBereich = .Columns("D:D")                                         'sucht in  _
Spalte "D" nach  Ordner
Set c = rngBereich.Find(ComboBox12, LookIn:=xlValues, lookat:=xlPart)    'hier muss die  _
_
Suchzelle angegeben werden zB. ComboBox11
If Not c Is Nothing Then
strFirst = c.Address
Do
ListBox1.AddItem .Cells(c.Row, 1)                       'Spalte in der die "ID"  _
_
Nummer steht
lngAnzahl = ListBox1.ListCount
ListBox1.List(lngAnzahl - 1, 1) = .Cells(c.Row, 1)      'ID = Zeilennummer ( _
Formel: =ZEILE(A10)
ListBox1.List(lngAnzahl - 1, 2) = .Cells(c.Row, 4)      'Ordner
ListBox1.List(lngAnzahl - 1, 3) = .Cells(c.Row, 7)      'Unterlagen
ListBox1.List(lngAnzahl - 1, 4) = .Cells(c.Row, 8)      'Unerkategorie von  _
Unterlagen
ListBox1.List(lngAnzahl - 1, 5) = .Cells(c.Row, 16)     'Bemerkung
Set c = rngBereich.FindNext(c)
Loop While Not c Is Nothing And c.Address  strFirst
End If
End With
End Sub
Ich stehe im Moment vollkommen auf dem Schlauch und bekomme das alleine nicht hin.
Für Euer Bemühen und Hilfe bedanke ich mich bereits
Gruß Andreas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm ListBox
26.06.2019 13:11:40
Mullit
Hallo,
im Prinzip wie bei Deiner Textbox:
'....
Loop While Not c Is Nothing And c.Address <> strFirst
End If
ListBox1.SetFocus
End With
End Sub

Gruß, Mullit
AW: UserForm ListBox
26.06.2019 15:01:48
Andreas
Hallo Mullit,
habe das so in meinem Makro eingebaut. Bringt aber nichts. Ich habe
'....
Loop While Not c Is Nothing And c.Address strFirst
End If
ListBox1.SetFocus
End With
End Sub
einmal so eingegeben hat nichts bewirkt (Die vorher selectierte Zeile in der ListBox war anschließend wieder nicht selectiert)
habe dann versucht
'....
Loop While Not c Is Nothing And c.Address strFirst
ListBox1.SetFocus
End If
End With
End Sub
hat aber auch nichts gebracht.
Wie gesagt der Focus sollte nach dem ändern der TextBox'en und dem speichern über die Schaltfläche wieder beim Ausgangsdatensatz gesetzt werden.
Trotzdem erst einmal vielen Dank.
Vielleicht hast Du oder ein anderer hier im Forum noch eine Lösung zu meinem Anliegen
Gruß Andreas
Anzeige
AW: UserForm ListBox
26.06.2019 15:21:52
Mullit
Hallo,
ah so ja, Du müsstest natürlich vor Deinem Befüllcode die selektierte Zeile auslesen, zwischenspeichern und hinterher wieder selektieren...so in der Art, Luftcode:
'...
Dim lngIndex As Long
For lngIndex = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(pvargIndex:=lngIndex) Then Exit For
Next
'...hier Dein Befüllcode...
If lngIndex 

Gruß, Mullit
AW: UserForm ListBox
26.06.2019 16:18:36
Andreas
Hallo Mullit,
klappt super. Vielen Dank
kannst du mir aber auch den Code schreiben wenn ich die Schaltfäche "löschen" klicke das er mir diesen selectierten Datensatz aus meiner Tabelle (die gesamte Zeile löscht.
Wäre echt super.
Gruß Andreas
Anzeige
AW: UserForm ListBox
26.06.2019 20:35:57
Mullit
Hallo Andreas,
da brauchst Du i.Pr. nur Deine Schleife etwas anpassen, wieder etwas Luftcode....
'...
Dim objCell As Range
Dim lngIndex As Long
For lngIndex = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(pvargIndex:=lngIndex) Then
Set objCell = Columns(1).Find(What:=ListBox1.List(pvargIndex:=lngIndex, pvargColumn:=1),  _
_
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
Call objCell.EntireRow.Delete
Call ListBox1.RemoveItem(pvargIndex:=lngIndex)
Set objCell = Nothing
End If
Exit For
End If
Next

Gruß, Mullit
Anzeige
AW: UserForm ListBox
27.06.2019 12:39:01
Andreas
Hallo Mullit,
habe deinen Code versucht umzusetzen,
klappt leider nicht oder ich stehe total auf dem Schlauch.
Kannst du mir die Lösung in meinen Code mit reinschreiben und mir sagen was ich daran falsch mache. Brauche echt hilfe dafür.
Sub Zeile_löschen()
'Dim intAnz As Integer, myRange As Range
Dim objCell As Range
Dim lngIndex As Long
'With Worksheets("B Bauakte")
'in dieser Zeile meckert der Debugger bei "ListBox1" Variable nicht deklariert
For lngIndex = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(pvargIndex:=lngIndex) Then
Set objCell = Columns(1).Find(What:=ListBox1.List(pvargIndex:=lngIndex, pvargColumn:=1),  _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
Call objCell.EntireRow.Delete
Call ListBox1.RemoveItem(pvargIndex:=lngIndex)
Set objCell = Nothing
End If
Exit For
End If
Next
'With Worksheets("B Bauakte")
'    On Error GoTo Ausgang
'    Set myRange = Application.InputBox(Prompt:="Bitte wählen Sie die Zeile ab wo eingefügt  _
wird", Title:="Zeilenauswahl", Type:=8)
'    If Not myRange Is Nothing Then
'        intAnz = Application.InputBox(Prompt:="Wieviel Zeilen sollen eingefügt werden?", Title: _
="Zeilenanzahl ", Type:=1)
'        If intAnz > 0 Then
'            .Rows(myRange.Row).Copy
'            .Rows(myRange.Row + 1).Resize(intAnz).Insert
'            Application.CutCopyMode = False
'        End If
'    End If
End With
Ausgang:
On Error GoTo 0
Set myRange = Nothing
End Sub

Gruß Andreas
Anzeige
AW: UserForm ListBox
27.06.2019 16:39:51
Mullit
Hallo,
wenn Du jetzt mit Code in einem Standard-Modul weitermachst, mußt Du nat. die Listbox mit der Form referenzieren und ebenso den Suchbereich mit dem TabBlatt:
Option Explicit

Public Sub Zeile_löschen()

'Dim intAnz As Integer, myRange As Range
Dim objCell As Range
Dim lngIndex As Long
'...
With UserForm1.ListBox1
    'in dieser Zeile meckert der Debugger bei "ListBox1" Variable nicht deklariert
    For lngIndex = 0 To .ListCount - 1
    
    
       If .Selected(pvargIndex:=lngIndex) Then
          Set objCell = Worksheets("B Bauakte").Columns(1).Find(What:=.List(pvargIndex:=lngIndex, pvargColumn:=1), _
    LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
          If Not objCell Is Nothing Then
             Call objCell.EntireRow.Delete
             Call .RemoveItem(pvargIndex:=lngIndex)
             Set objCell = Nothing
          End If
          Exit For
       End If
    Next
End With

'...

End Sub

Gruß, Mullit
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige