MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 06.06.2019, 16:18   #1
moonsorrox
Neuer Benutzer
Neuer Benutzer
Standard VBA - Mit einer ListBox zeilen und Spalten einlesen

Ich möchte gern in einer Mehrspaltigen ListBox in meiner Tabelle1 Zeilen und Spalten einlesen.
Genau daran scheitere ich schon, denn mit dem Folgenden Code lese ich zwar etwas ein, aber nach unten kommen noch viele leere Zeilen.

Ich beschreibe mal welche Zeilen und Spalten oder auch Bereiche ich genau brauche.

Es sind die Zellen C11:E22 und die Zellen G11:J22
Diese möchte ich dann durch Auswahl der entsprechenden Zeile markieren und nur die Werte löschen.
Da ist dann Datum und Zahlenwerte drin.

Was ich bisher habe ist folgendes, weiter komme ich ohne Hilfe nicht.
Vllt. kann mir jemand helfen..?
Code:

Private Sub UserForm_Activate()
  Dim lng As Long
  Dim i As Integer
  Dim wks1 As Worksheet
  Set wks1 = ActiveSheet                                             'ActiveWorkbook.Sheets("Tabelle1")
    i = 0
    ListBox1.Clear
    wks1.Activate
    For lng = 11 To wks1.UsedRange.Rows.Count + 1                   'ab Zeile 2
              ListBox1.AddItem wks1.Cells(lng, 2).Value
              ListBox1.Column(0, i) = wks1.Cells(lng, 3).Value     'Spalte A
              ListBox1.Column(1, i) = wks1.Cells(lng, 4).Value     'Spalte B
              ListBox1.Column(2, i) = wks1.Cells(lng, 5).Value     'Spalte C
              ListBox1.Column(4, i) = wks1.Cells(lng, 7).Value     'Spalte F
              ListBox1.Column(5, i) = wks1.Cells(lng, 8).Value     'Spalte G
            i = i + 1
    Next lng
End Sub

__________________

Betriebssystem: Windows 7 und 10 - 64 Bit, Office 2016
moonsorrox ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.06.2019, 16:55   #2
Flotter Feger
MOF Profi
MOF Profi
Standard

Hallo,

weil du neu bist, habe ich mal für dich gegoogled ...
http://www.office-loesung.de&/ftopic139914_0_0_asc.php
Das & muss raus ...

__________________

VG Sabina

Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
War der Post für dich hilfreich, darf er von dir auch gerne positiv bewertet werden.
bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Flotter Feger ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.06.2019, 17:14   #3
moonsorrox
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Das hatte ich auch gefunden, denn bevor ich hier frage versuche ich es immer selber zu lösen.
Wenn ich das nutze öffnet sich eine Infobox in die ich was eingeben soll, dass ist leider nicht das was ich möchte.

Ich habe auch schon etwas anderes gefunden wie ich meinen gesamten Bereich einlesen kann was ich aber nicht verstehe ist wenn ich den gesamten Bereich angebe wird eine Spalte nicht mit angezeigt.

Das habe ich mal erstellt:
Code:

Private Sub CommandButton1_Click()
 ListBoxFuellen ListBox1, ThisWorkbook.Worksheets("Tabelle1").Range("C11:J17")
End Sub
 
Private Sub ListBoxFuellen(DieListbox As MSForms.ListBox, DerRange As Range)
 With DieListbox
  .ColumnCount = DerRange.Columns.Count
  .List = DerRange.Value
 End With
End Sub
Damit zeigt mir die ListBox1 alle Spalten an ausser die Spalte "C" und in der Spalte "E" die ich nicht brauche steht nichts. Aber ich bekomme eben keine zwei Bereiche hin.
Denn brauche tue ich den Bereich C11:E17 und G11:J17 damit habe ich eben schon Probleme.

__________________

Betriebssystem: Windows 7 und 10 - 64 Bit, Office 2016

Geändert von moonsorrox (06.06.2019 um 17:40 Uhr).
moonsorrox ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.06.2019, 17:28   #4
Flotter Feger
MOF Profi
MOF Profi
Standard

Hallo nochmal,

dann kombiniere doch die Codes ...

Code:

Private Sub UserForm_Activate()
Dim lng As Long
Dim wks1 As Worksheet
Set wks1 = ActiveSheet                                             'ActiveWorkbook.Sheets("Tabelle1")
    
ListBox1.Clear
wks1.Activate
For lng = 11 To wks1.UsedRange.Rows.Count + 1                   'ab Zeile 2
    ListBox1.AddItem
    ListBox1.List(ListBox1.ListCount - 1, 0) = wks1.Cells(lng, 1).Value     'Spalte A
    ListBox1.List(ListBox1.ListCount - 1, 1) = wks1.Cells(lng, 2).Value     'Spalte B
    ListBox1.List(ListBox1.ListCount - 1, 2) = wks1.Cells(lng, 3).Value     'Spalte C
    ListBox1.List(ListBox1.ListCount - 1, 3) = wks1.Cells(lng, 6).Value     'Spalte F
    ListBox1.List(ListBox1.ListCount - 1, 4) = wks1.Cells(lng, 7).Value     'Spalte G
Next lng
End Sub
Natürlich musst du noch die Spalten anpassen - du willst ja Spalte E haben. In deinem Beispiel stehen aber Spalte F und G.
Habe dir die Spalten mal korrekt nummeriert, vielleicht tust du dich so leichter ...

__________________

VG Sabina

Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
War der Post für dich hilfreich, darf er von dir auch gerne positiv bewertet werden.
bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit

Geändert von Flotter Feger (06.06.2019 um 17:31 Uhr).
Flotter Feger ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.06.2019, 18:02   #5
moonsorrox
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Ich sage erst einmal Danke, aber ich bekomme es absolut nicht gebacken bin wohl zu lange heute damit beschäftigt.

Was ich noch probiert habe, dass ich die Spalten hinten geändert habe, nur er zeigt mir immer noch dann eine einzige Spalte an.

Das Hatte ich geändert:
Code:

For lng = 11 To wks1.UsedRange.Rows.Count + 1                   'ab Zeile 2
    ListBox1.AddItem
    ListBox1.List(ListBox1.ListCount - 1, 0) = wks1.Cells(lng, 3).Value     'Spalte A
    ListBox1.List(ListBox1.ListCount - 1, 1) = wks1.Cells(lng, 4).Value     'Spalte B
    ListBox1.List(ListBox1.ListCount - 1, 2) = wks1.Cells(lng, 5).Value     'Spalte C
    ListBox1.List(ListBox1.ListCount - 1, 3) = wks1.Cells(lng, 7).Value     'Spalte F
    ListBox1.List(ListBox1.ListCount - 1, 4) = wks1.Cells(lng, 8).Value     'Spalte G
Das ist aber nur die Spalte "C"

__________________

Betriebssystem: Windows 7 und 10 - 64 Bit, Office 2016
moonsorrox ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.06.2019, 18:28   #6
Flotter Feger
MOF Profi
MOF Profi
Standard

Hallo,

.ColumnCount = 5

Das hattest du doch schon !!!

__________________

VG Sabina

Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
War der Post für dich hilfreich, darf er von dir auch gerne positiv bewertet werden.
bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Flotter Feger ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.06.2019, 07:56   #7
Beverly
MOF Guru
MOF Guru
Standard

Hi,

in den Eigenschaften der ListBox musst du bei ColumnCount den Wert 5 eintragen, damit 5 Spalten angezeigt werden.


GrußformelBeverly's Excel - Inn

__________________

Bitte im Beitrag eine kurze Rückmeldung auch in dem Fall geben, wenn ein Problem gelöst wurde - dies hilft auch anderen Usern, wenn sie den betreffenden Thread lesen.
Möchtest du dich außerdem für die Hilfe bei der Lösung deines Problems bedanken? Das kannst du ganz einfach durch die Bewertung eines Beitrags (Schalter unten links).
Beverly ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.06.2019, 16:29   #8
moonsorrox
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

ich Danke euch für die Hilfe, ich habe heute mal ein wenig das Internet durchsucht und bin zu einem Teilergebnis gekommen. Das möchte ich euch hier zeigen.
Meine Listbox ließt nun nach dem drücken des CommandButton1 alle Zeilen und Spalten ein
Code:

Private Sub CommandButton1_Click()
 ListBoxFuellen ListBox1, ThisWorkbook.Worksheets("Tabelle1").Range("B11:I20")
End Sub


Private Sub ListBoxFuellen(DieListbox As MSForms.ListBox, DerRange As Range)
 With DieListbox
  .ColumnCount = DerRange.Columns.Count
  .List = DerRange.Value
  .ColumnWidths = "0,1cm;2cm;2cm;0,5cm;2cm;2cm;2cm;2cm;2cm;1cm"
 End With
End Sub
Manchmal kann es so einfach sein, keine Ahnung was ich da alles ausprobiert habe.

Nun kommt aber wohl der etwas schwirigere Teil, denn die ganzen Zeilen kann ich ja jetzt anhaken und mit einem weiteren Button die angehakten löschen.
Das ist meine nächste Aufgabe, mache ich später.

Was ich jetzt noch nicht verstehe, das ich jetzt nicht die ColumnCount gar nicht mehr in den Eigenschaften angeben muss, dass geht auch ohne..?

__________________

Betriebssystem: Windows 7 und 10 - 64 Bit, Office 2016
moonsorrox ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.06.2019, 18:17   #9
Flotter Feger
MOF Profi
MOF Profi
Standard

Hallo,

ob du ColumnCount in den Eigenschaften angibst, oder im Code, ist völlig egal. Irgendwo musst du es angeben, sonst siehst du nur eine Spalte.
Und Karin passt manchmal nicht mehr so gut auf ... und postet dann einiges Doppelt ... na ja ... oder sie hat mich auf ihrer IgnoreList ... was mich auch nicht nicht unbedingt stören würde.

Und was das Anhaken betrifft, wo ist denn da bitte das Problem ?
Kurz mal in der OH nachgeschaut ...
Code:

Sub Weg_Damit()
With ListBox1
    For i = .ListCount - 1 To 0 Step -1
        If .Selected(i) = True Then
            .RemoveItem (i)
        End If
    Next i
End With
End Sub

__________________

VG Sabina

Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
War der Post für dich hilfreich, darf er von dir auch gerne positiv bewertet werden.
bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Flotter Feger ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.06.2019, 19:03   #10
Beverly
MOF Guru
MOF Guru
Standard

Zitat: von Flotter Feger Beitrag anzeigen

Und Karin passt manchmal nicht mehr so gut auf ... und postet dann einiges Doppelt ... na ja ... oder sie hat mich auf ihrer IgnoreList ... was mich auch nicht nicht unbedingt stören würde.

In deinem Beitrag stand, dass du .ColumnCount per Code vorgeben willst, also ist es doch rechtens dem Fragesteller mitzuteilen, dass man das auch direkt in den Eigenschaften einstellen kann - vielleicht solltest du mal deine Brille putzen bzw. deinen Besen reinigen. Und den Hinweis, dich auf die Ignorierliste zu setzen finde ich excellent - danke für den Tipp, dann muss ich mir dein sinnloses Gelabere nie mehr antun.


@Fragesteller,

Zitat:

Was ich jetzt noch nicht verstehe, das ich jetzt nicht die ColumnCount gar nicht mehr in den Eigenschaften angeben muss, dass geht auch ohne..?

Das stimmt nicht ganz, denn mit der Zeile .ColumnCount = DerRange.Columns.Count wird die Anzahl an Spalten vorgegeben, indem die Anzahl an Spalten im Bereich dazu als Grundlage genommen wird.

GrußformelBeverly's Excel - Inn

__________________

Bitte im Beitrag eine kurze Rückmeldung auch in dem Fall geben, wenn ein Problem gelöst wurde - dies hilft auch anderen Usern, wenn sie den betreffenden Thread lesen.
Möchtest du dich außerdem für die Hilfe bei der Lösung deines Problems bedanken? Das kannst du ganz einfach durch die Bewertung eines Beitrags (Schalter unten links).
Beverly ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.06.2019, 19:17   #11
moonsorrox
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Vielen Dank, für deine Unterstüzung ja ich bin absoluter VBA Laie und suche mir immer alles zusammen und bin froh wenn es klappt.

Ich habe jetzt dein Beispiel so angepaßt, dass er es jetzt nur in der Listbox löscht ist richtig, oder sollte er es auch im Tabellenblatt löschen.

Code:

Sub Weg_Damit()
    With ListBox1
        Dim i As Variant
        For i = .ListCount - 1 To 0 Step -1
            If .Selected(i) = True Then
                .RemoveItem (i)
            End If
        Next i
    End With
End Sub
Denn das wollte ich gerne machen da ich immer diese 10 Zeilen habe und wenn die voll sind möchte ich gerne auch im Tabellenblatt löschen, denn ich schreibe alle Werte in ein weiteres Tabellenblatt zum berechnen.
Kann man das in diesem Code mit einbauen oder geht das nicht..?

__________________

Betriebssystem: Windows 7 und 10 - 64 Bit, Office 2016
moonsorrox ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.06.2019, 19:54   #12
Flotter Feger
MOF Profi
MOF Profi
Standard

Hallo Karin,

... Besen reinigen ... der war gut ... Da hast du bestimmt lange drüber nachgedacht, um es in deinem Post so total spontan wirken zu lassen.

auch, wenn du das nicht mehr lesen wirst ... man kann über dich sagen, was man will ... konsequent bist du und du hast echt was drauf ... das ist kein Geschleime ... das mein ich wirklich ernst. Auch wenn du schon manchmal etwas seltsam bist ... und auch noch negativ bewerten ? ... das ist jetzt wirklich armseelig ... und noch weit unter meinem Niveau.

Nimm nicht immer alles so bierernst ... du bist nicht der einzige hier im Forum ... ein kleiner Scherz oder ein wenig 'sinnloses Gelabere' gehört einfach mal dazu ... frag den Marco doch einfach mal, ob es ihm etwas ausgemacht hat ... dass hier ist ein Forum und kein Friedhof.

Ich wünsche dir, trotzdem, und natürlich auch allen anderen, ein schönes Pfingstfest.

Ich mach mich jetzt fürs Clubbing fertig ... bin ja noch jung ... ach ja ... den Besen darf ich nicht vergessen ... UPPS das war jetzt sicherlich wieder 'sinnloses Gelabere' ... einen schönen Abend noch !!!

PS:
da hätte ich doch fast den TE vergessen, wegen unserer Karin ...
Code:

Sub Weg_Damit()
Dim i As Long

With ListBox1
    For i = .ListCount - 1 To 0 Step -1
        If .Selected(i) = True Then
            ThisWorkbook.Worksheets("Tabelle1").Range("B" & CStr(11 + i) & ":I" & CStr(11 + i)).ClearContents
            .RemoveItem (i)
        End If
    Next i
End With
End Sub
Aber bitte vorsichtig ... weg ist bei VBA tatsächlich weg !!! Läßt sich nicht einfach rückgängig machen.

__________________

VG Sabina

Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
War der Post für dich hilfreich, darf er von dir auch gerne positiv bewertet werden.
bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit

Geändert von Flotter Feger (07.06.2019 um 20:25 Uhr).
Flotter Feger ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.06.2019, 15:00   #13
moonsorrox
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

vielen Dank, dass funktioniert super...!

__________________

Betriebssystem: Windows 7 und 10 - 64 Bit, Office 2016
moonsorrox ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.