Wie erstelle ich eine variable intelligente Tabelle?

Auswertung_und_VBA-Aufzeichnung - (Excel, makro, VBA)

1 Antwort

Was sind denn die Kriterien dafür, wo die Tabelle beginnt?

Schaden könnte es der Übersicht halber nicht, die Startzelle im Sheet zu benamsen (Bsp. "TabelleStart")

Dim rStart as Range
Set rStart = Range("TabelleStart")
...
rStart.Select
...

Du kannst natürlich auch probieren, die Startzelle zu finden:

Set rStart = Range("A1").End(xlDown).Offset(1, 0).End(xlDown)

Oder mit einer Schleife

For i=2 To 10000
  If Cells(i-1,1).Value = "" and Cells(i,1).Value <> "" Then
    Set rStart = Cells(i,1)
    Exit For
  End If
Next

Die folgende Zeile könntest du versuchen, wie folgt zu flexibilisieren:

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$11:$N$853"), , xlYes).Name = _
"Abl.Schleifpuffer"
...Add(xlSrcRange, Range(rStart,Selection), , xlYes).Name = _
"Abl.Schleifpuffer"

Die Kriterien dafür sind das er die Tabelle anhand der "Betriebsmittel"-Nr. erkennt.

Nur kommt diese Benennung 2x in Spalte A vor, sodass er bestenfalls noch die benachbarte Spalte "Benennung FHMI" erkennen sollte.

oder man startet ab Zelle A5 um das zu umgehen.

0
@Phila86
  Dim i, j As Integer
  Dim rStart As Range
  Set rStart = Nothing
  For i = 1 To 100
    For j = 1 To 100
      If Cells(i, j).Value = "Betriebsmittel" And Cells(i, j + 1).Value = "Benennung FHMI" Then
        Set rStart = Cells(i, j)
        Exit For
      End If
    Next
  Next
  If rStart Is Nothing Then Debug.Print "Start nicht gefunden": Exit Sub
0
@Suboptimierer

Habe vielleicht noch Kriterien vergessen:

1. In Tabellenblatt (Abl.Schleifpuffer)

2. Nach den o.g. Kriterien suchen (Betriebsmittel und Benennung)

3. Erstelle Tabelle mit dem Namen (TabSchleifpuffer)

Mit dem Code so, komm ich nicht zu Rande:

Dim rStart As Range
Set rStart = Sheets("Abl.Schleifpuffer")

Dim i, j As Integer
Dim rStart As Range
Set rStart = Nothing
For i = 1 To 100
For j = 1 To 100
If Cells(i, j).Value = "Betriebsmittel" And Cells(i, j + 1).Value = "Benennung FHMI" Then
Set rStart = Cells(i, j)
Exit For
End If
Next
Next
If rStart Is Nothing Then Debug.Print "Start nicht gefunden": Exit Sub

ActiveSheet.ListObjects.Add(xlSrcRange, Range(rStart, Selection), , xlYes).Name = _
"TabSchleifpuffer"

wahrscheinlich, eher was zum lachen ^^

0
@Phila86

Du hast einen Teil deines Codes vergessen:

 rStart.Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
0
@Suboptimierer

Ich habe echt probieren müssen, aber nun scheint es sehr gut zu funktionieren. Vielen Dank.

Wärst du so nett und schaust nochmal drüber ob da nicht noch ein Fehler drin ist oder mir etwas zum Verhängnis werden kann?

Der Code lautet nun so:

Sub Makro1()
'
' Makro1 Makro
'

'

Sheets("Abl.Schleifpuffer").Select

Dim i, j As Integer
Dim rStart As Range
Set rStart = Nothing
For i = 1 To 100
For j = 1 To 100
If Cells(i, j).Value = "Betriebsmittel" And Cells(i, j + 1).Value = "Benennung FHMI" Then
Set rStart = Cells(i, j)

rStart.Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

Exit For
End If
Next
Next
If rStart Is Nothing Then Debug.Print "Start nicht gefunden": Exit Sub

ActiveSheet.ListObjects.Add(xlSrcRange, Range(rStart, Selection), , xlYes).Name = _
"TabSchleifpuffer"

End Sub
1
@Phila86

Die folgenden drei Zeilen am besten unter "If rStart Is Nothing":

rStart.Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

Sonst musst du halt noch beachten, dass der Anfang immer innerhalb der ersten 100 Zeilen und Spalten sein muss.

Man hätte auch mit Range().Find operieren können, mein Ansatz war aber nicht wesentlich unkomplizierter oder kürzer als der obige.

Für die Zukunft, wenn du fortgeschrittener bist, solltest du dir merken, dass man möglichst wenig mit der Selection arbeiten sollte, da es eine Bremse ist. Am besten immer eigene Range-Objekte verwenden.

Ansonsten sieht das gut aus. (y)

0

Verstehe. Ok, dann hab recht vielen Dank :)

1

Eine kleine Bitte hätte ich noch, da ich nichts dazu finde:

Wie würde der Befehl dann lauten wenn ich die intelligente Tabelle wieder in einen normalen Bereich konvertieren möchte?

Ich wüsste es nur manuell.

0
@Phila86

Kurz gesagt: Mit "intelligenten Tabellen" kenne ich mich nicht aus. Das ist die einzige Zeile, in die ich mich einarbeiten müsste ;P

0

Kein Problem, dann frage ich wieder in die Runde ^^

1

Was möchtest Du wissen?