Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
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

Listbox Problem

Listbox Problem
11.08.2017 12:29:32
Thomas
Hallo
Der Sepp hat mir gestern schon prima weitergeholfen.
Leider fehlt mir das Verständnis, die Listboxen anzupassen.
Zunächst bekomme ich einen Fehler, was besagt diese Zeile und wie beseitige ich den Fehler?
Ich habe drei Listboxen, wie sage ich jeder einzelnen ab welcher Zeile der Wert eingetragen werden soll?
Hier einmal die Datei:
https://www.herber.de/bbs/user/115407.xlsm

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Problem
11.08.2017 13:16:47
Sepp
Hallo Thomas,
zuerst ein Hinweis. Frames sind nicht Ideal, ich benutze sie gar nicht, sie sind Speicherfressen und eigentlich unnötig.
Wieso werden die Textfelder jetzt nicht mehr benötigt?
https://www.herber.de/bbs/user/115410.xlsm
Gruß Sepp

AW: Listbox Problem
11.08.2017 14:14:24
Thomas
Hallo
Doch, die Felder benötige ich noch, will noch welche hinzufügen und anpassen.
Wie kann ich die Listboxen so ändern, das ich z.b jeder Listbox eine andere Spalte zuordne?
Anzeige
AW: Listbox Problem
11.08.2017 14:24:10
Thomas
Noch eine Frage..
Kann man zb. bei Thema 5 ein Text Feld mit anhängen?
Die Auswahl soll dann so aussehen:
Thema 5, Liste ____, unter ____
Wobei bei ___ die Möglichkeit ist, Werte einzutragen.
Gruß
Thomas
AW: Listbox Problem
11.08.2017 15:40:04
Sepp
Hallo Thomas,
sicher kannst du die Spalte bestimmen, bei .Cells(24, 2) steht die 2 für Spalte "B"!
Das mit der TextBox anhängen, wie stellst du dir das konkret vor?
Gruß Sepp

AW: Listbox Problem
11.08.2017 16:05:43
Thomas
Hmm.
Optisch etwa so;
"Kontrollkästechen" Thema 5,____,____
Sodass ich wenn ich das Thema 5 anklicke, noch in dem Bereich ___ und ___ etwas eingeben kann und dann in die nächste leere spalte eingetragen wird.
Anzeige
AW: Listbox Problem
11.08.2017 16:27:01
Sepp
Hallo Thomas,
dann musst du halt wirklich mit CheckBoxen arbeiten und entsprechende Textfelder einbauen.
Gruß Sepp

AW: Listbox Problem
11.08.2017 18:32:29
Thomas
Letzte Frage:
Wie muss ich diese Zeilen abwandeln, das er mir die ausgewählten Daten, zb wie in der ersten Zeile, in Zeile 41, Spalte 7 schreibt, wenn ich möchte, das die Werte aus Listbox1, nur von Zeile 41, Spalte 7 bis max Zeile 46, Spalte 7 schreiben soll und falls mehr angeklickt wird, dann
Zeile 41, Spalte 12 bis max Zeile 46, Spalte 12 schreiben soll?
If Not rng1 Is Nothing Then rng1.Copy .Cells(41, 7)
lngNext = Application.Max(24, .Cells(.Rows.Count, 2).End(xlUp).Row + 1)
If Not rng2 Is Nothing Then rng2.Copy .Cells(30, 7)
lngNext = Application.Max(24, .Cells(.Rows.Count, 2).End(xlUp).Row + 1)
If Not rng3 Is Nothing Then rng3.Copy .Cells(50, 7)
Anzeige
AW: Listbox Problem
11.08.2017 18:57:38
Sepp
Hallo Thomas,
z.B. so.
Dim lngRow As Long, lngCol As Long

With Sheets("Drucken")
  .Range("G41:AZ46").ClearContents
  lngRow = 41
  lngCol = 7
  For Each rng In rng1
    .Cells(lngRow, lngCol) = rng.Value
    lngRow = lngRow + 1
    If lngRow > 46 Then
      lngRow = 41
      lngCol = lngCol + 5
    End If
  Next
  For Each rng In rng2
    .Cells(lngRow, lngCol) = rng.Value
    lngRow = lngRow + 1
    If lngRow > 46 Then
      lngRow = 41
      lngCol = lngCol + 5
    End If
  Next
  For Each rng In rng3
    .Cells(lngRow, lngCol) = rng.Value
    lngRow = lngRow + 1
    If lngRow > 46 Then
      lngRow = 41
      lngCol = lngCol + 5
    End If
  Next
  Unload Me
End With

Gruß Sepp

Anzeige
AW: Listbox Problem
11.08.2017 19:12:05
Thomas
Habe den Code geändert, bekomme aber eine Fehlermeldung.
Da ich leider nicht mehr auf Arbeit bin, und zu Hause am Mac sitze, finde ich den Fehler nicht.
Leider geht ja VBA nur sehr minimiert am Mac.
Wo liegt der Fehler
Option Explicit
Private Sub chkAll_Click()
Dim lngI As Long
With ListBox1
For lngI = 0 To .ListCount - 1
.Selected(lngI) = chkAll
Next
End With
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub cmdOK_Click()
Dim lngRow As Long, lngCol As Long
With Sheets("Listbox1")
For lngI = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngI) Then
If rng1 Is Nothing Then
Set rng1 = .Cells(lngI + 1, 1)
Else
Set rng1 = Union(rng1, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Listbox2")
For lngI = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(lngI) Then
If rng2 Is Nothing Then
Set rng2 = .Cells(lngI + 1, 1)
Else
Set rng2 = Union(rng2, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Listbox3")
For lngI = 0 To ListBox3.ListCount - 1
If ListBox3.Selected(lngI) Then
If rng3 Is Nothing Then
Set rng3 = .Cells(lngI + 1, 1)
Else
Set rng3 = Union(rng3, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Drucken")
.Range("G41:AZ46").ClearContents
lngRow = 41
lngCol = 7
For Each Rng In rng1
.Cells(lngRow, lngCol) = Rng.Value
lngRow = lngRow + 1
If lngRow > 46 Then
lngRow = 41
lngCol = lngCol + 5
End If
Next
For Each Rng In rng2
.Cells(lngRow, lngCol) = Rng.Value
lngRow = lngRow + 1
If lngRow > 46 Then
lngRow = 41
lngCol = lngCol + 5
End If
Next
For Each Rng In rng3
.Cells(lngRow, lngCol) = Rng.Value
lngRow = lngRow + 1
If lngRow > 46 Then
lngRow = 41
lngCol = lngCol + 5
End If
Next
Unload Me
End With
Set rng1 = Nothing
Set rng2 = Nothing
Set rng3 = Nothing
End Sub
Private Sub UserForm_Initialize()
Dim lngLast As Long, varList As Variant
With Sheets("Listbox1")
lngLast = .Cells(.Rows.Count, 1).End(xlUp).Row
varList = .Range("A1:A" & lngLast)
End With
ListBox1.List = varList
With Sheets("Listbox2")
lngLast = .Cells(.Rows.Count, 1).End(xlUp).Row
varList = .Range("A1:A" & lngLast)
End With
ListBox2.List = varList
With Sheets("Listbox3")
lngLast = .Cells(.Rows.Count, 1).End(xlUp).Row
varList = .Range("A1:A" & lngLast)
End With
ListBox3.List = varList
End Sub

Anzeige
AW: Listbox Problem
11.08.2017 19:58:59
Sepp
Hallo Thomas,
du hast die Deklarationen der Range-Variablen gelöscht, rng, rng1-rng3 jeweils As Range!
Gruß Sepp

AW: Listbox Problem
11.08.2017 19:59:14
Thomas
Habe den Code etwas angepasst, bekomme aber irgendeinen Fehler....
Private Sub cmdOK_Click()
Dim lngI As Long, lngNext As Long, rng1 As Range, rng2 As Range, rng3 As Range
With Sheets("Listbox1")
For lngI = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngI) Then
If rng1 Is Nothing Then
Set rng1 = .Cells(lngI + 1, 1)
Else
Set rng1 = Union(rng1, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Listbox2")
For lngI = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(lngI) Then
If rng2 Is Nothing Then
Set rng2 = .Cells(lngI + 1, 1)
Else
Set rng2 = Union(rng2, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Listbox3")
For lngI = 0 To ListBox3.ListCount - 1
If ListBox3.Selected(lngI) Then
If rng3 Is Nothing Then
Set rng3 = .Cells(lngI + 1, 1)
Else
Set rng3 = Union(rng3, .Cells(lngI + 1, 1))
End If
End If
Next
End With
Dim lngRow As Long, lngCol As Long, rng As Range
With Sheets("Drucken")
.Range("G40:AZ45").ClearContents
lngRow = 40
lngCol = 7
For Each rng In rng1
.Cells(lngRow, lngCol) = rng.Value
lngRow = lngRow + 1
If lngRow > 45 Then
lngRow = 40
lngCol = lngCol + 17
End If
Next
.Range("G31:AZ36").ClearContents
lngRow = 31
lngCol = 7
For Each rng In rng2
.Cells(lngRow, lngCol) = rng.Value
lngRow = lngRow + 1
If lngRow > 36 Then
lngRow = 31
lngCol = lngCol + 17
End If
Next
.Range("G49:AZ55").ClearContents
lngRow = 49
lngCol = 7
For Each rng In rng3
.Cells(lngRow, lngCol) = rng.Value
lngRow = lngRow + 1
If lngRow > 55 Then
lngRow = 49
lngCol = lngCol + 17
End If
Next
Unload Me
End With
Set rng1 = Nothing
Set rng2 = Nothing
Set rng3 = Nothing
End Sub

Anzeige
Welchen Fehler? o.T.
11.08.2017 20:01:07
Sepp
Gruß Sepp

AW: Welchen Fehler? o.T.
11.08.2017 20:15:18
Thomas
Wenn ich in Listbox 1 etwas ausfülle, schreibt er es auch ins Tabellenblatt, aber es kommt folgender Fehler:
Laufzeitfehler 424, Objekt erforderlich
Beim klick auf Debuggen zeigt er: For Each rng In rng2
Bei Listbox 2, schreibt er nix ins Tabellenblatt, Fehler:
Laufzeitfehler 424, Objekt erforderlich
Beim klick auf Debuggen zeigt er: For Each rng In rng1
Bei Listbox 3, schreibt er nix ins Tabellenblatt, Fehler:
Laufzeitfehler 424, Objekt erforderlich
Beim klick auf Debuggen zeigt er: For Each rng In rng1
Anzeige
AW: Welchen Fehler? o.T.
11.08.2017 20:19:30
Thomas
Wenn ich in Listbox 1 etwas ausfülle, schreibt er es auch ins Tabellenblatt, aber es kommt folgender Fehler:
Laufzeitfehler 424, Objekt erforderlich
Beim klick auf Debuggen zeigt er: For Each rng In rng2
Bei Listbox 2, schreibt er nix ins Tabellenblatt, Fehler:
Laufzeitfehler 424, Objekt erforderlich
Beim klick auf Debuggen zeigt er: For Each rng In rng1
Bei Listbox 3, schreibt er nix ins Tabellenblatt, Fehler:
Laufzeitfehler 424, Objekt erforderlich
Beim klick auf Debuggen zeigt er: For Each rng In rng1
AW: Welchen Fehler? o.T.
11.08.2017 20:35:21
Sepp
Hallo Thomas,
hast du die Variablen-Deklarationen gecheckt?
Gruß Sepp

Anzeige
AW: Welchen Fehler? o.T.
11.08.2017 20:40:54
Thomas
Variablen De.... Nein.
Was machen die und wo sind sie zu finden?
Sorry, leider echter VBA Anfänger.
AW: Welchen Fehler? o.T.
11.08.2017 20:47:11
Sepp
Hallo Thomas,
am Beginn der Prozedur sind die Variablen deklariert.
Dim lngRow As Long
usw.
Gruß Sepp

AW: Welchen Fehler? o.T.
11.08.2017 20:51:21
Thomas
Also:
bei der zweite Zeile, rng as Range hatte ich hinzugefügt, weil bei deinem Code, der Fehler kam, rng ist nicht deklariert.
Private Sub cmdOK_Click()
Dim lngI As Long, lngNext As Long, rng1 As Range, rng2 As Range, rng3 As Range, rng As Range
With Sheets("Listbox1")
For lngI = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lngI) Then
If rng1 Is Nothing Then
Set rng1 = .Cells(lngI + 1, 1)
Else
Set rng1 = Union(rng1, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Listbox2")
For lngI = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(lngI) Then
If rng2 Is Nothing Then
Set rng2 = .Cells(lngI + 1, 1)
Else
Set rng2 = Union(rng2, .Cells(lngI + 1, 1))
End If
End If
Next
End With
With Sheets("Listbox3")
For lngI = 0 To ListBox3.ListCount - 1
If ListBox3.Selected(lngI) Then
If rng3 Is Nothing Then
Set rng3 = .Cells(lngI + 1, 1)
Else
Set rng3 = Union(rng3, .Cells(lngI + 1, 1))
End If
End If
Next
End With
Dim lngRow As Long, lngCol As Long
With Sheets("Drucken")
.Range("G40:AZ45").ClearContents
lngRow = 40
lngCol = 7
For Each rng In rng1
.Cells(lngRow, lngCol) = rng.Value
lngRow = lngRow + 1
If lngRow > 45 Then
lngRow = 40
lngCol = lngCol + 17
End If
Next
.Range("G31:AZ36").ClearContents
lngRow = 31
lngCol = 7
For Each rng In rng2
.Cells(lngRow, lngCol) = rng.Value
lngRow = lngRow + 1
If lngRow > 36 Then
lngRow = 31
lngCol = lngCol + 17
End If
Next
.Range("G49:AZ55").ClearContents
lngRow = 49
lngCol = 7
For Each rng In rng3
.Cells(lngRow, lngCol) = rng.Value
lngRow = lngRow + 1
If lngRow > 55 Then
lngRow = 49
lngCol = lngCol + 17
End If
Next
Unload Me
End With

Anzeige
AW: Welchen Fehler? o.T.
11.08.2017 21:09:45
Sepp
Hallo Thomas,
Private Sub cmdOK_Click()
Dim lngI As Long, lngNext As Long, lngRow As Long, lngCol As Long
Dim rng1 As Range, rng2 As Range, rng3 As Range, rng As Range

With Sheets("Listbox1")
  For lngI = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(lngI) Then
      If rng1 Is Nothing Then
        Set rng1 = .Cells(lngI + 1, 1)
      Else
        Set rng1 = Union(rng1, .Cells(lngI + 1, 1))
      End If
    End If
  Next
End With

With Sheets("Listbox2")
  For lngI = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(lngI) Then
      If rng2 Is Nothing Then
        Set rng2 = .Cells(lngI + 1, 1)
      Else
        Set rng2 = Union(rng2, .Cells(lngI + 1, 1))
      End If
    End If
  Next
End With

With Sheets("Listbox3")
  For lngI = 0 To ListBox3.ListCount - 1
    If ListBox3.Selected(lngI) Then
      If rng3 Is Nothing Then
        Set rng3 = .Cells(lngI + 1, 1)
      Else
        Set rng3 = Union(rng3, .Cells(lngI + 1, 1))
      End If
    End If
  Next
End With

With Sheets("Drucken")
  .Range("G40:AZ45").ClearContents
  If Not rng1 Is Nothing Then
    lngRow = 40
    lngCol = 7
    For Each rng In rng1
      .Cells(lngRow, lngCol) = rng.Value
      lngRow = lngRow + 1
      If lngRow > 45 Then
        lngRow = 40
        lngCol = lngCol + 17
      End If
    Next
  End If
  .Range("G31:AZ36").ClearContents
  If Not rng2 Is Nothing Then
    lngRow = 31
    lngCol = 7
    For Each rng In rng2
      .Cells(lngRow, lngCol) = rng.Value
      lngRow = lngRow + 1
      If lngRow > 36 Then
        lngRow = 31
        lngCol = lngCol + 17
      End If
    Next
  End If
  .Range("G49:AZ55").ClearContents
  If Not rng3 Is Nothing Then
    lngRow = 49
    lngCol = 7
    For Each rng In rng3
      .Cells(lngRow, lngCol) = rng.Value
      lngRow = lngRow + 1
      If lngRow > 55 Then
        lngRow = 49
        lngCol = lngCol + 17
      End If
    Next
  End If
  Unload Me
End With

Set rng1 = Nothing
Set rng2 = Nothing
Set rng3 = Nothing
End Sub

Gruß Sepp

AW: Welchen Fehler? o.T.
11.08.2017 21:13:23
Thomas
Suuuuuper, vielen tausend Dank.
Jetzt funktioniert es.
Danke Danke Danke Danke Danke Danke Danke Danke Danke Danke

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige