Fragen zu Listobject ("intelligente Tabellen")

Moderator: ModerationP

Fragen zu Listobject ("intelligente Tabellen")

Beitragvon Zeromaster » 15. Sep 2018, 09:08

Guten Tag
Ich versuche mein Glück, ListObjects besser zu verstehen und scheitere an wohl einfachen Aufgaben. Google habe ich benutzt, aber wurde nicht fündig.
Und zwar geht es um folgendes:

Ich habe eine sogenannte intelligente Tabelle (Einfügen -> Tabelle) und will nun z.B. in der ersten Spalte ein Wort suchen und herausfinden, in welcher Zeile dieses Wort steht. Mein Code gibt aber die Zeile des Arbeitsblatts an. Wie kann ich also zur intelligenten Tabelle referenzieren?

Sub WriteToListObject()
Set t = ThisWorkbook.Worksheets("Info").ListObjects("Tabelle1")
Set fc = t.DataBodyRange.Columns(1).Find("alfa")
msgbox fc.row 'msgbox t.fc.row geht nicht, oder fc.t.row geht auch ned

For Each h In t.HeaderRowRange
' Wie kann ich hier die Spalte herausfinden innerhalb der Tabelle?
Next


End Sub

Dann hätte ich noch 2 kleine Fragen betreffend der Überschrift: ich kann zwar über die Headers loopen
(for each h in t.HeaderRowRange) und den Namen herausgeben lassen, aber wie finde ich heraus, in welcher Spalte ich bin (ohne einen Zähler zu installieren?

Besten Dank für eure Hilfe.
Gruss
0master
Zeromaster
 

Re: Fragen zu Listobject ("intelligente Tabellen")

Beitragvon Nepumuk » 15. Sep 2018, 09:15

Hallo,

so:

Code: Alles auswählen
MsgBox h.Column
De fontibus non est disputandum

Gruß
Nepumuk 8-)
Benutzeravatar
Nepumuk
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14020
Registriert: 10. Aug 2004, 08:40
Wohnort: Regensburg

Re: Fragen zu Listobject ("intelligente Tabellen")

Beitragvon Storax » 15. Sep 2018, 09:15

Zeromaster hat geschrieben:.... Google habe ich benutzt, aber wurde nicht fündig...
Scheint jetzt die Standard-Ausrede zu werden.
Dritter Treffer sollte schon vieles erklären
This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Press any key to continue - or any other key to abort.
Benutzeravatar
Storax
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2813
Registriert: 22. Okt 2013, 18:18

Re: Fragen zu Listobject ("intelligente Tabellen")

Beitragvon RPP63 » 15. Sep 2018, 09:16

Moin!
Du hast doch durch Set fc = die Tabelle t korrekt referenziert.
Code: Alles auswählen
For Each h In t.HeaderRowRange
' Wie kann ich hier die Spalte herausfinden innerhalb der Tabelle?
' durch
h.Column
Next

Gewöhne Dir an, Variablen korrekt zu deklarieren!
t ist ein Object, fc und h sind jeweils ein Range
Nutze dazu Option Explicit

Gruß Ralf
Benutzeravatar
RPP63
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9628
Registriert: 19. Okt 2012, 17:41
Wohnort: mitten im Pott

Re: Fragen zu Listobject ("intelligente Tabellen")

Beitragvon Ralf A » 15. Sep 2018, 11:49

....Zeromaster sucht ja die Zeile der formatierten Tabelle (statt der, des Arbeitsblattes)

Die zürückgelieferte Adresse (bzw. Zeile) ist schon richtig. Aber es ist, wie Du schon festgestellt hast, die des Arbeitsblattes. Damit lässt sich durchaus auch arbeiten. Da Du aber die Zeile im Datenbereich wünschst, musst Du zunächst mal ermitteln, wo der überhaupt beginnt. Das ist ja nicht zwangsläufig immer A1. Deshalb, wenn Du mit Databodyrange arbeitest, musst Du immer auch den Bezug zur Elterntabelle berücksichtigen.
Probiere mal folgendes aus, da wirst Du sehen, was ich meine...: (Namen und Werte anpassen)
Code: Alles auswählen
Sub MeinListobjekt()
Dim zeileGefunden As Long, sucheNach As String, sucheInSpalte As Byte
Dim rngTreffer As Range
sucheNach = "aa": sucheInSpalte = 3
With Tabelle1.ListObjects("Tabelle2")
    Set rngTreffer = .DataBodyRange.Columns(sucheInSpalte).Find(sucheNach, lookat:=xlWhole) ' ...sucht zwar im Datenbereich der formatierten Tabelle
        If Not rngTreffer Is Nothing Then
        zeileGefunden = .DataBodyRange.Columns(sucheInSpalte).Find(sucheNach, lookat:=xlWhole).Row '....liefert aber die Zeile der Containertabelle...
        'Zum Vergleich:
        Debug.Print "Überschriftenadresse: " & .HeaderRowRange.Address(0, 0), vbTab, "Datenbereichsadresse: " & .DataBodyRange.Address(0, 0)
        Debug.Print "Überschriftenzeile: " & .HeaderRowRange.Row, vbTab, "Anzahl Datenbereichszeilen: " & .DataBodyRange.Rows.Count
        Debug.Print sucheNach & " - gefunden in Zeile: " & .DataBodyRange.Cells(zeileGefunden - .HeaderRowRange.Row, sucheInSpalte).Row & " des Datenbereiches..." '...hier erhältst Du die Zeile innerhalb des Datenbereiches....
        Debug.Print "Trefferadresse: " & rngTreffer.Address(0, 0), vbTab, "Trefferzeile: " & rngTreffer.Row 'liefert ab die Zeile der Elterntabelle....
         ' nur zum Vergleich....
         rngTreffer.Select 'Containertabelle
        Stop
        Cells(1, 1).Select 'zurücksetzen
        .DataBodyRange.Cells(zeileGefunden - .HeaderRowRange.Row, sucheInSpalte).Select 'Datenbereich....
        Set rngTreffer = Nothing
    End If
End With
End Sub
Ciao, Ralf
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.

Bild
Ralf A
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 182
Registriert: 17. Mär 2018, 11:47

Re: Fragen zu Listobject ("intelligente Tabellen")

Beitragvon slowboarder » 16. Sep 2018, 05:12

Hi

Suche mit Application.Match
Code: Alles auswählen
Application.Match("Alfa", t.DataBodyRange.Columns(1), 0)


Oder ziehe von der absoluten Zeilennummer die Zeilennummer der ersten Zeile des durchsuchten Bereichs ab und addiere 1 hinzu
Code: Alles auswählen
fc.row - t.DataBodyRange.Row + 1


Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 24582
Registriert: 18. Apr 2009, 13:33

Re: Fragen zu Listobject ("intelligente Tabellen")

Beitragvon Gast » 17. Sep 2018, 13:08

danke für eure Hilfe.
Ich habe mich für slowboarders Variante entschieden :)
Gast
 


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 Gäste