Wie erstelle ich eine variable intelligente Tabelle?

Auswertung_und_VBA-Aufzeichnung - (Microsoft Excel, VBA, Makro)

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"

Phila86 
Beitragsersteller
 22.03.2016, 18:49

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

1
Phila86 
Beitragsersteller
 22.03.2016, 12:24

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
Suboptimierer  22.03.2016, 13:03
@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
Phila86 
Beitragsersteller
 22.03.2016, 10:13

Verstehe. Ok, dann hab recht vielen Dank :)

1
Phila86 
Beitragsersteller
 21.03.2016, 12:24

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
Suboptimierer  21.03.2016, 12:31
@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
Phila86 
Beitragsersteller
 21.03.2016, 13:31
@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
Suboptimierer  21.03.2016, 13:34
@Phila86

Du hast einen Teil deines Codes vergessen:

 rStart.Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
0
Phila86 
Beitragsersteller
 21.03.2016, 23:47
@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
Suboptimierer  22.03.2016, 09:43
@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