Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
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
ComboBox Wert in anderem Tabellenblatt finden
09.04.2015 10:39:46
puma_888
Hallo zusammen,
ich hab auf einem Tabellenblatt ("Tabelle3") eine Combobox2 integriert und 28 Checkboxen (Checkbox2 - Checkbox 29). Über die Combobox2 können unterschiedliche Werte ausgewählt werden, die in "Tabelle 1" in der Spalte "C5:C13" hinterlegt sind. Soweit funktioniert auch alles.
Ich möchte nun, dass wenn ich in "Tabelle3" über die Combobox2 einen wert auswähle, dass er mir in "Tabelle1" die Zeile sucht in der dieser Wert hinterlegt ist. Die "Tabelle1" enthält Daten im Bereich "B5:AA13". Jede Spalte dieser Zeile soll einer Checkbox (Checkbox2- Checkbox29) zugewiesen werden, die sich wie die Combobox in "Tabelle3" befinden. Wird nun der Wert der Combobox2 in "Tabelle1" gefunden, so soll für jede markierte Checkbox der Wert aus der entsprechenden Spalte dieser Zeile entnommen werden und in "Tabelle2" beginnend bei "B5:B30" aufgeführt werden. Ist eine Checkbox nicht markiert, soll der Wert der nachfolgenden Checkbox eine Zeile weiter nach oben rutschen, sodass in "Tabelle2" keine Lücke entsteht.
Mein Code sieht bis jetzt folgendermaßen aus, es tauchen aber immer noch Fehlermeldungen auf, die ich irgendwie nicht alle behoben bekomm. Vielleicht kann mir einer weiterhelfen, wäre echt nett :).
Private Sub ComboBox2_Change()
Dim rngBereich As Range
Dim r As Long
Set rngBereich = Worksheets("Tabelle1").Range("B5:AA13")
If ComboBox2.Value  "" Then
For r = 2 To 29
With Worksheets("Tabelle1")
Set rngBereich = .Find(ComboBox2.Value, LookAt:=xlWhole, LookIn:=xlValues)
If Not rngBereich Is Nothing Then
With Worksheets("Tabelle2")
If Worksheets("Tabelle3").CheckBox & r = True Then
Range("Br+3").Value = Worksheets("Tabelle1").Cells(rngBereich.Row, r + 3). _
Value
End If
End With
End If
End With
Next
End If
End Sub
Gruß
Markus

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
09.04.2015 10:51:43
Nepumuk
Hallo,
ohne Worte:
If Worksheets("Tabelle3").OLEObjects("Checkbox" & CStr(r)).Value = True Then
Und was hast du dir dabei: Range("Br+3") gedacht?
Gruß
Nepumuk

AW: ComboBox Wert in anderem Tabellenblatt finden
09.04.2015 11:19:08
puma_888
Hi,
danke,ich hab die Anmerkung von dir in den Code mit aufgenommen und auch das Range("Br+3") gegen Worksheets("Tabelle2").Cells(lngRow, 2).Value ausgetauscht. Der Code sieht nun so aus:
Private Sub ComboBox2_Change()
Dim rngBereich As Range
Dim r As Long
Dim lngRow As Long
Set rngBereich = Worksheets("Kettenzüge").Range("B5:AA13")
If ComboBox2.Value  "" Then
lngRow = 5
For r = 2 To 29
With Worksheets("Kettenzüge")
Set rngBereich = .Find(ComboBox2.Value, LookAt:=xlWhole, LookIn:=xlValues)
If Not rngBereich Is Nothing Then
With Worksheets("Tabelle2")
If Worksheets("Tabelle3").OLEObjects("CheckBox" & CStr(r)).Value = True  _
Then
Worksheets("Tabelle2").Cells(lngRow, 2).Value = Worksheets("Tabelle1"). _
Cells(rngBereich.Row, r - 1).Value
lngRow = lngRow + 1
End If
End With
End If
End With
Next
End If
End Sub
Es kommt aber immer noch eine Fehlermeldung "Objekt unterstützt diese Eigenschaft nicht" bei
Set rngBereich = .Find(ComboBox2.Value, LookAt:=xlWhole, LookIn:=xlValues)
Gruß
Markus

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
09.04.2015 11:25:55
Nepumuk
Hallo,
du musst einen Bereich angeben in dem gesucht werden soll. Die Find-Methode ist eine Methode der Range-Klasse nicht der Worksheets-Klasse.
Gruß
Nepumuk

AW: ComboBox Wert in anderem Tabellenblatt finden
09.04.2015 17:01:59
puma_888
Hi,
ich hab jetzt die Find-Methode weggelassen und gebe jetzt den Bereich folgendermaßen an
Set rngBereich = .Range("B5:AA13")
Der Code funktioniert jetzt auch soweit, es kommt also keine Fehlermeldung mehr. Allerdings ist mir aufgefallen, wenn ich mit F8 den Code durchgehe, dass er beim ersten Durchgang der For-Schleife keinen Wert in die "Tabelle2" überträgt, erst beim zweiten Durchgang wird ein Wert übernommen und zwar der, der im ersten Durchgang eigtl. erscheinen hätte müssen aber eine Zeile darunter in Zelle(6,4). D.h. die erste Zelle (5,4) wo eigtl. der erste Wert erscheinen sollte, wird nie befüllt. Außerdem kann ich in meiner Combobox2 einen beliebigen Wert auswählen, es wird trotzdem immer nur auf die erste Zeile der Datensätze in Tabelle 1 zugegriffen und in "Tabelle2" übertragen. Ich vermute das meine Suchfunktion nicht korrekt im Code integriert ist, hab ein paar Möglichkeiten ausprobiert aber dann kamen wieder nur noch mehr Fehlermeldungen.
Der Code sieht folgendermaßen aus:
Private Sub ComboBox2_Change()
Dim rngBereich As Range
Dim r As Long
Dim lngRow As Long
If ComboBox2.Value  "" Then
lngRow = 5
For r = 2 To 29
With Worksheets("Tabelle1")
Set rngBereich = .Range("B5:AA13")
If Not rngBereich Is Nothing Then
If Worksheets("Tabelle3").OLEObjects("CheckBox" & CStr(r)).Object.Value  _
Then
Worksheets("Tabelle2").Cells(lngRow, 4).Value = Worksheets("Tabelle1" _
).Cells(rngBereich.Row, r - 1).Value
lngRow = lngRow + 1
End If
End If
End With
Next
End If
End Sub
Gruß
Markus

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 09:09:18
Nepumuk
Hallo,
das muss ich irgendwie testen und dazu bräuchte ich von dir eine Testmappe.
Gruß
Nepumuk

AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 10:02:27
puma_888
Hi,
https://www.herber.de/bbs/user/96992.xls
der Code ist momentan nur für die Combobox2 geschrieben. Auf dem "Tabellenblatt3" befindet sich jedoch noch eine weitere Combobox1. Wollte jedoch erst einmal testen ob der Code für eine Combobox funktioniert.
Gruß
Markus

AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 11:04:28
Nepumuk
Hallo,
da liegt einiges im Argen. Teste mal meine Lösung und versuch sie auch zu verstehen.
Private Sub ComboBox2_Change()
    Dim lngIndex As Long, lngRow As Long
    If ComboBox2.ListIndex > -1 Then
        lngRow = 5
        With Worksheets("Produktvergleich")
            For lngIndex = 2 To 29
                If .OLEObjects("CheckBox" & CStr(lngIndex)).Object.Value Then
                    Worksheets("Vergleichsformular").Cells(lngRow, 4).Value = _
                        Worksheets("Kettenzüge").Cells(ComboBox2.ListIndex + 5, lngIndex).Value
                    lngRow = lngRow + 1
                End If
            Next
        End With
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 13:51:18
puma_888
Hi nepumuk,
dein Code funktioniert, vielen Dank :). Ich bin deinen Code durchgegangen und versteh in auch. Am Anfang wusste ich noch nicht warum bei ListIndex > -1 geschrieben hast, bis ich herausgefunden habe, dass bei einem ListIndex der erste Wert bei 0 hinterlegt ist. Dein Code sieht auch relativ einfach aus aber selbst darauf zu kommen, fällt mir immer noch schwer. Bei mir tauchen dann immer irgendwelche Fehlermeldungen auf und dann weiß ich nie genau, was ich falsch gemacht habe.
Ich bin auch meine restlichen Codes nochmal durchgegangen und hab folgende Zeile noch nicht richtig verstanden
ComboBox1.List = .Range(.Cells(5, 3), .Cells(.Rows.Count, 11).End(xlUp)).Value
Ich weis zwar, dass durch diese Zeile die in Spalte 3 ab Zeile 5 aufgeführten Werte in die Comboboxen aufgenommen werden aber wie es zu der Zahl 11 kommt versteh ich nicht ganz und auch das mit der Range wird mir in diesem Zusammenhang nicht ganz klar, da bereits innerhalb der Klammer auf eine Zelle (5,3) verwiesen wird. Vllt. kannst du mir ja kurz die Zeile erklären damit ich sie richtig verstehe.
Was hast du eigtl. gemeint mit "da liegt einiges im Argen", meinst du allgemein die Struktur meiner Codes oder dass sie evtl. in falschen Subs hinterlegt sind?
Jetzt muss ich noch zwei weitere Sachen in das Programm integrieren, mal schauen ob ich es hinbekomm^^.
Vielen Dank auf jedenfall für deine Hilfe :)
Gruß
Markus

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 16:07:28
Nepumuk
Hallo,
(.Cells(5, 3) ist die erste Zeile der Liste. ich hab den Code auch geändert gehabt in:
ComboBox1.List = .Range(.Cells(5, 3), .Cells(.Rows.Count, 5).End(xlUp)).Value

Du willst ja nur die Spalte 5 von der ersten bis zur letzten benutzten Zeile in der ComboBox.
Gruß
Nepumuk

AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 16:18:21
puma_888
Hi nepumuk,
ah ok alles klar :). Leider muss ich dich jetzt nochmal kurz was fragen.
Ich hab das Programm jetzt einige Male getestet und mir ist aufgefallen, dass nicht immer alles im Tabellenblatt "Vergleichsformular" so angezeigt wird, wie ich es im Tabellenblatt "Produktvergleich" ausgewählt habe. Ich habe mittlerweile den Code auch für die Combobox1 angepasst. Also manchmal läuft es einwandfrei und manchmal zeigt es mir teilweise nur die hälfte an.
Muss der Code von dir evtl. nicht unter "Private Sub ComboBox2_Change()" eingefügt werden? Ich hab es mal ausprobiert den Code in "Private Sub CommandButton1_Click()" einzufügen aber dann funktioniert das gesamte Programm nicht mehr richtig. Hast du vllt. eine Idee was ich noch ausprobieren könnte?
https://www.herber.de/bbs/user/97007.xls
Gruß
Markus

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
10.04.2015 16:43:16
Nepumuk
Hallo,
Worksheet_Activate läuft nur wenn du von einer Tabelle zu nächsten wechselst, nicht wenn du Excel öffnest und die Tabelle schon die aktive Tabelle ist. Ich würde an deiner Stelle in das Modul "DieseArbeitsmappe" folgenden Code einfügen:
Private Sub Workbook_Open()
    Call Tabelle3.Worksheet_Activate
End Sub

Damit wird beim öffnen der Mappe das Füllen der Comboboxen ausgelöst egal mit welcher aktiven Tabelle die Mappe geöffnet wird.
Gruß
Nepumuk

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
13.04.2015 08:35:24
puma_888
Hi nepumuk,
ich habe in "Diese Arbeitsmappe" deinen Code eingegeben, leider hat sich dadurch nichts großartig verbessert. Die Bezeichnungen der Kriterien neben den markierten Checkboxen vom Tabellenblatt3, werden in das Tabellenblatt2 korrekt übernommen. Die dazu gehörigen Werte der Kriterien aus Tabellenblatt1 werden jedoch immer für alle Kriterien im Tabellenblatt2 dargestellt, auch wenn für eine bestimmte Bezeichnung gar keine Checkbox markiert ist.
Deswegen hab ich den Code, damit für ein ausgewähltes Produkt der entsprechende Wert aus der Tabelle1 herausgesucht wird und in Tabelle2 übertragen wird unter Public Sub Worksheet_Activate() eingefügt, statt bis jetzt unter Private Sub ComboBox1_Change() aber auch das hat nichts bewirkt.
Hast du noch eine Idee wie es mir im Tabellenblatt2 nur die Werte der Kriterien anzeigt, welche im Tabellenblatt3 durch eine Checkbox markiert sind und nicht immer alle übernommen werden? Ich komm da gerade einfach selber nicht weiter.
https://www.herber.de/bbs/user/97046.xls
Gruß Markus

Anzeige
AW: ComboBox Wert in anderem Tabellenblatt finden
13.04.2015 14:06:36
Nepumuk
Hallo,
zumindest sind schon mal die Comboboxen beim Öffnen der Mappe gefüllt. Was du in das Füll-Makro noch reingepackt hast ist Unsinn. Das gehört wenn dann in die Change-Events der Comboboxen. Da war das doch schon mal drin. Oder?
Dein Vergleichsmakro funktioniert so:
Private Sub CommandButton1_Click()
    Dim lngIndex As Long, lngRow As Long
    If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then
        lngRow = 4
        With Worksheets("Vergleichsformular")
            .Range("A5:E32").ClearContents
            For lngIndex = 2 To 15
                If OLEObjects("CheckBox" & CStr(lngIndex)).Object.Value Then
                    lngRow = lngRow + 1
                    .Cells(lngRow, 1).Value = Cells(lngIndex + 8, 2).Value
                    .Cells(lngRow, 2).Value = Worksheets("Kettenzüge").Cells( _
                        ComboBox1.ListIndex + 5, lngIndex).Value
                    .Cells(lngRow, 4).Value = Worksheets("Kettenzüge").Cells( _
                        ComboBox2.ListIndex + 5, lngIndex).Value
                End If
            Next
            For lngIndex = 16 To 29
                If OLEObjects("CheckBox" & CStr(lngIndex)).Object.Value Then
                    lngRow = lngRow + 1
                    .Cells(lngRow, 1).Value = Cells(lngIndex - 6, 4).Value
                    .Cells(lngRow, 2).Value = Worksheets("Kettenzüge").Cells( _
                        ComboBox1.ListIndex + 5, lngIndex).Value
                    .Cells(lngRow, 4).Value = Worksheets("Kettenzüge").Cells( _
                        ComboBox2.ListIndex + 5, lngIndex).Value
                End If
            Next
            .Select
        End With
    Else
        Call MsgBox("Bitte erst 2 Produkte auswählen.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: funktioniert!
13.04.2015 14:47:48
puma_888
Hi Nepumuk,
erst mal ein großes Dankeschön, endlich funktioniert das Programm so wie es soll :).
Da das Programm nie richtig funktioniert hatte, hab ich die Codes teilweise irgendwo anders eingefügt und versucht sie leicht abzuändern aber wurde dadurch auch nicht besser.
Aber jetzt funktioniert alles richtig, vielen Dank :).
Gruß
Markus

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige