Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Intelligente Tabelle

Intelligente Tabelle
18.04.2019 15:40:42
Steve
Moin Leute,
ich habe da ein Problem das ich irgendwie nicht in den Griff bekomme.
Ich möchte automatisch Daten in eine intelligente Tabelle (Spalte A - D) schreiben.
Ganz zu Anfang ist die Tabelle leer. Es existieren also in Zeile 1 lediglich die Überschriften und in Zeile 2 die vorgegebenen leeren Felder.
Leider funktioniert das nicht.
With Worksheets("StartSeite")
.Cells(1, 1).End(xlDown).Offset(1).End(xlUp).Row = NName
.Cells(1, 2).End(xlDown).Offset(1).End(xlUp).Row = PersNr
.Cells(1, 3).End(xlDown).Offset(1).End(xlUp).Row = NNam
.Cells(1, 4).End(xlDown).Offset(1).End(xlUp).Row = VNam
End With
So sieht das ganze bei mir aus. Ich habe bestimmt irgendwo einen Denkfehler, aber ich finde ihn nicht.
Geht das überhaupt was ich hier vorhabe? Ich weiss wohl das ich an anderer Stelle mal eine Tabelle automatisch in eine intelligente Tabelle übertragen habe. Aber dafür habe ich immer per Makro die intelligente Tabelle gelöscht und neu wieder aufgebaut. Geht doch bestimmt einfacher, oder?
Liebe Grüße
Steve
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Intelligente Tabelle
18.04.2019 15:51:46
Daniel
Hi
deine Sprungaktion ist grundsätzlich schon mal falsch, weil sie als Ergebnis keine Zelle ergibt, sondern eine Zeilennummer (.row am ende)
wenn die Tabelle leer ist, geht ein Sprung von oben immer bis zur allerletzten Zelle der Tabelle.
in einer normalen Tabelle würde ich von unten nach oben springen, wenn unterhalb der Tabelle nichts meh steht.
.Cells(Rows.count, 1).end(xlup).Offset(1, 0) = NName
Gruß Daniel
Anzeige
AW: Intelligente Tabelle
18.04.2019 16:13:00
Steve
Moin Daniel,
das habe ich direkt mal ausprobiert und sieht nun so aus.
With Worksheets("StartSeite")
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = NName
.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = PersNr
.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = NNam
.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = VNam
End With
Aber trotzdem befindet der erste Eintrag sich in der Zeile 3. Kann es sein das VBA die erste Zeile einer intelligenten Tabelle als "beschrieben" erkennt obwohl diese tatsächlich keinen sichtbaren Inhalt hat?
Horrido
Steve
Anzeige
AW: Intelligente Tabelle
18.04.2019 16:55:18
Daniel
Hi
also ich habs mal ausprobiert, wie Excel in so einer Tabelle springt (das kannst du übrigens auch)
wenn die Tabelle leer ist, geht der Sprung in Zeile 2, obwohl diese leer ist, dann brauchst du das Offset nicht.
sind schon Daten vorhanden, dann geht der Sprung auf die letzte befüllte Zelle und dann brauchst du das Offset.
da musst du dir dann eine entpsrechende Abfrage erstellen.
in etwa so:
if .Cells(2, 1) = "" then
Zeile = 2
else
Zeile = .Cells(Rows.count, 1).end(xlup).row + 1
end if
.Cells(zeile, 1) = NName
.cells(Zeile, 2) =..

Gruß Daniel
Anzeige
AW: Intelligente Tabelle
18.04.2019 17:59:22
Luschi
Hallo Steve,
die formatierten Tabellen besitzen in Vba mehr Properties (Eigenschaften), als auf der Excel-Oberfläche.
Und dazu gehört 'DataBodyRange', der den Datenbereich als Range-Objekt wiedergibt.
Deshalb sowas: Cells(1, 1).End(xlDown).Offset(1).End(xlUp).Row = ...
total überflüssig; hier mal ein Beispiel:

Sub test1()
Dim lstObj As ListObject, rgObj As Range
Set lstObj = ActiveSheet.ListObjects("meineFormatierteTabelle")
On Error Resume Next
Set rgObj = lstObj.DataBodyRange
On Error GoTo 0
If rgObj Is Nothing Then
Debug.Print "diese formatierte Tabelle hat noch keine Daten!"
Else
Debug.Print "Datenbereich: " & rgObj.DataBodyRange.Address
End If
'.. mach irgendwas.
Set rgObj = Nothing: Set lstObj = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Intelligente Tabelle
24.04.2019 13:14:42
Steve
Hallo Luschi,
danke dir für deine Hilfe. Leider verstehe ich sie noch nicht so ganz.
("meineFormatierteTabelle")
Ich denke hier muss der Name meiner Tabelle rein. Hab sie mal Start genannt - also ("Start")
Das habe ich hinbekommen. Nach mehreren Versuchen ist mir aufgefallen, dass ich mich in meinem Originalmakro gar nicht auf dem richtigen Sheet befinde. Habe ich also angepasst.
Ich nehme an bei
'mach irgendwas
kann ich nun die Daten verwenden die zuvor per msgBox abgefragt wurden.
Was auch immer ich dann mache, es landet immer in der dritten spalte.
Was ich versucht habe:
1.Versuch
With Worksheets("StartSeite")
.Cells(1, 1).End(xlDown).Offset(1).End(xlUp).Row = NName
End With
2. Versuch
Range("A1").Activate 'Beginn der Einträge
ActiveCell.End(xlDown).Activate 'sucht letzte belegte Zelle
ActiveCell.Offset(1, 0).Activate 'geht in die nächst Zeile
ActiveCell = NName
ich denke ich bin da total auf dem falschen weg oder?
Also z.B. NName wird ja zuvor abgefragt. Aber wie bekomme ich diese nun in die zweite Zeile?
hast du da mal ein Tipp für mich?
Horido
Steve
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Intelligente Tabelle in Excel VBA optimal nutzen


Schritt-für-Schritt-Anleitung

  1. Intelligente Tabelle erstellen: Zuerst musst du eine intelligente Tabelle in deinem Excel-Arbeitsblatt erstellen. Gehe dazu zu Einfügen > Tabelle und wähle deinen Datenbereich aus.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Ein neues Modul hinzufügen: Klicke mit der rechten Maustaste auf VBAProject (deinWorkbookName) > Einfügen > Modul.

  4. Code zum Einfügen von Daten schreiben: Füge folgenden Code ein, um die letzte Zeile in der intelligenten Tabelle zu ermitteln und Daten einzufügen:

    Sub DatenEinfügen()
       Dim ws As Worksheet
       Dim lstObj As ListObject
       Dim zeile As Long
    
       Set ws = Worksheets("StartSeite")
       Set lstObj = ws.ListObjects("Start") ' Name deiner intelligenten Tabelle
    
       If lstObj.DataBodyRange Is Nothing Then
           zeile = 2 ' Erste Datenzeile
       Else
           zeile = lstObj.ListRows.Count + 1
       End If
    
       ' Daten einfügen
       lstObj.ListRows.Add
       With lstObj.ListRows(zeile).Range
           .Cells(1, 1).Value = NName
           .Cells(1, 2).Value = PersNr
           .Cells(1, 3).Value = NNam
           .Cells(1, 4).Value = VNam
       End With
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Problem: Der erste Eintrag wird in der dritten Zeile angezeigt.

    • Lösung: Stelle sicher, dass du die letzte Zeile korrekt ermittelst. Verwende den Code, um die Anzahl der Zeilen in der intelligenten Tabelle zu zählen.
  • Problem: Fehler beim Zugriff auf DataBodyRange.

    • Lösung: Überprüfe, ob die intelligente Tabelle den richtigen Namen hat und ob sie tatsächlich Daten enthält.
  • Problem: Daten erscheinen nicht in der richtigen Spalte.

    • Lösung: Achte darauf, dass du die richtigen Zellen in der intelligenten Tabelle ansprichst. Prüfe den Code auf Tippfehler und die korrekte Verwendung von .Cells.

Alternative Methoden

  • Direktes Einfügen: Statt die letzte Zeile zu ermitteln, kannst du auch direkt auf die nächste freie Zeile zugreifen, indem du .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) verwendest. Diese Methode ist besonders nützlich, wenn du keine intelligente Tabelle verwendest.

  • Datenbereich abfragen: Du kannst den Datenbereich der intelligenten Tabelle mit lstObj.DataBodyRange abfragen und entsprechend anpassen.


Praktische Beispiele

Angenommen, du hast eine intelligente Tabelle mit den Spalten Name, PersNr, Nachname, Vorname. Du kannst die folgenden Variablen verwenden:

Dim NName As String
Dim PersNr As String
Dim NNam As String
Dim VNam As String

NName = InputBox("Gib den Namen ein:")
PersNr = InputBox("Gib die Personalnummer ein:")
NNam = InputBox("Gib den Nachnamen ein:")
VNam = InputBox("Gib den Vornamen ein:")

Diese Variablen kannst du dann in deinem Makro verwenden, um die Daten in der intelligenten Tabelle einzufügen.


Tipps für Profis

  • Nutze die .ListRows.Add-Methode, um eine neue Zeile in der intelligenten Tabelle hinzuzufügen, anstatt direkt auf die Zellen zuzugreifen.
  • Verwende die Debug.Print-Funktion, um den Inhalt von Variablen während der Entwicklung zu überprüfen.
  • Halte deine Excel-Tabelle gut organisiert, um die Wahrscheinlichkeit von leeren Zeilen und Spalten zu minimieren.

FAQ: Häufige Fragen

1. Wie kann ich eine intelligente Tabelle in Excel löschen?
Um eine intelligente Tabelle zu löschen, klicke mit der rechten Maustaste auf die Tabelle und wähle Tabelle löschen.

2. Was tun, wenn meine Tabelle leer ist?
Überprüfe, ob die Tabelle den richtigen Namen hat und ob du den richtigen Arbeitsblattkontext verwendest.

3. Wie kann ich die letzte Zeile in einer intelligenten Tabelle ermitteln?
Verwende die Methode lstObj.ListRows.Count, um die Anzahl der Zeilen in der intelligenten Tabelle zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige