Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1688to1692
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
Inhaltsverzeichnis

Intelligente Tabellen II

Intelligente Tabellen II
25.04.2019 13:14:29
Steve
Moin,
ich habe bei meiner ersten Anfrage zu dem Thema eine Antwort von Luschi erhalten.
(Danke dafür) Leider begreife ich die noch nicht so ganz
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
Ich habe die richtige Tabelle eingegeben. Habe die mal Start genannt.
Nun sollen die zuvor mit Msg abgefragten werte NName, PersNr, NNam und VNam in die Spalte A,B,C,D in der zweiten Zeile eingefügt werden.
Ich habe gemerkt, das es wohl bei '..mach irgendwas getan werden muss. Aber da komme ich nicht weiter. Alles was ich mache landet zunächst in der Spalte 3 und damit wird die intelligente Tabelle nicht automatisch erweitert.
Kann mir dabei jemand helfen?
Horrido Steve

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Alles was ich mache-und was machst Du?
25.04.2019 13:21:26
robert
Hellseher sind hier selten vertreten...
AW: Alles was ich mache-und was machst Du?
25.04.2019 13:41:26
Steve
Moin Robert,
sorry, mein Fehler, ich habe mehr gedacht und weniger geschrieben.
Dachte meine Beschreibung was ich gerne möchte wäre ausreichend um mir eine allgemeine Anwort zu geben.
Meine Versuche sehen wie folgt aus:
Sheets("Startseite").Select
Dim lstObj As ListObject, rgObj As Range
Set lstObj = ActiveSheet.ListObjects("Start")
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
With Worksheets("Startseite")
.Cells(Rows.Count, 1).End(xlUp).Offset(0, 0) = NName
.Cells(Rows.Count, 2).End(xlUp) = PersNr
.Cells(Rows.Count, 3).End(xlUp) = NNam
.Cells(Rows.Count, 4).End(xlUp) = VNam
End With
'.. mach irgendwas.
Set rgObj = Nothing: Set lstObj = Nothing
DAS ERGEBNIS: Es wird immer nur die erste beschreibbare Zeile verwendet. Es landet also alles in Zeile 2.
Habe mit meinem Lösungsansatz ein wenig rumgespielt. Aber entweder es landet restlos alles in Zeile 2
oder es beginnt bei Zeile 3, aber dafür bleibt Zeile 2 leer.
Ausserdem Habe ich einiges von Luschis Code in Kommentar umgewandelt damit es überhaupt funktioniert. Sonst erhalte ich da nämlich schon vorher eine Fehlermeldung.
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 13:59:27
Steve
Moin,
ich verstehe das nicht. Wenn die zweite Zeile einmal befüllt ist, dann funktioniert das. Jeder Neue Zeile ist unter der letzten und die Tabelle wird automatisch erweitert.
Ich habe auch mal versucht ein wenig in dem Code herumzuprobieren.
Habe den code wie folgt abgeändert.
If rgObj Is Nothing Then
With Worksheets("Startseite")
.Cells(Rows.Count, 1).End(xlUp) = NName
.Cells(Rows.Count, 2).End(xlUp) = PersNr
.Cells(Rows.Count, 3).End(xlUp) = NNam
.Cells(Rows.Count, 4).End(xlUp) = VNam
End With
'Debug.Print "diese formatierte Tabelle hat noch keine Daten!"
Else
'Debug.Print "Datenbereich: " & rgObj.DataBodyRange.Address
End If
With Worksheets("Startseite")
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = NName
.Cells(Rows.Count, 2).End(xlUp) = PersNr
.Cells(Rows.Count, 3).End(xlUp) = NNam
.Cells(Rows.Count, 4).End(xlUp) = VNam
End With
'.. mach irgendwas.
Set rgObj = Nothing: Set lstObj = Nothing
Weil ich mir dachte das es einmal einen Ansatz für den Fall gibt das die Tabelle noch leer ist und einmal einen Ansatz sobald die Tabelle einmal befüllt wurde.
Allerdings stehen dann alle Werte nur noch in Zeile 2.
Gruß Steve
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 14:13:43
cysu11
Hi Steve,
lade doch bitte deine Beispieldatei hoch, dann gucken wir mal!
LG
Alexandra
AW: Alles was ich mache-und was machst Du?
25.04.2019 14:43:38
Luschi
Hallo Steve,
bei mir sieht das so aus:

Sub Machmal()
Dim lstObj As ListObject, rgObj As Range
Dim PersNr As String, VNam As String, NNam As String
Sheets("Startseite").Select
PersNr = "'4711"
VNam = "Egon"
NNam = "Olsen"
Set lstObj = ActiveSheet.ListObjects("Start")
On Error Resume Next
Set rgObj = lstObj.DataBodyRange
On Error GoTo 0
If rgObj Is Nothing Then
Set rgObj = lstObj.HeaderRowRange.Offset(1, 0).Cells(1, 1)
rgObj.Offset(0, 0).Value = PersNr
rgObj.Offset(0, 1).Value = NNam
rgObj.Offset(0, 2).Value = VNam
Else
Set rgObj = lstObj.DataBodyRange.Cells(lstObj. _
DataBodyRange.Rows.Count, 1).Offset(1, 0)
rgObj.Offset(0, 0).Value = PersNr
rgObj.Offset(0, 1).Value = NNam
rgObj.Offset(0, 2).Value = VNam
End If
Set rgObj = Nothing: Set lstObj = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 14:58:30
Steve
Moin Alexandra,
das mache ich gerne. Ich fürchte allerdings ihr werdet die Hände über den Kopf zusammenschlagen. Aber ich mache das auch erst seit 2 der 3 Wochen.
Über Tipps und Hilfestellungen wäre ich sehr dankbar.
https://www.herber.de/bbs/user/129386.xlsm
Den letzten Beitrag von Luschi habe ich übrigens noch eingefügt. Aber irgendwie bekomme ich da nicht das gewünschte Ergebnis.
Gruß Steve
AW: Alles was ich mache-und was machst Du?
25.04.2019 15:29:35
cysu11
Hi Steve,
so z.B. kannst du tricksen :)
Sub test()
Dim lz As Long
With Worksheets("Startseite")
lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
If Cells(2, 1).Value = "" Then lz = 2
.Cells(lz, 1).Value = "NName"
.Cells(lz, 2).Value = "PersNr"
.Cells(lz, 3).Value = "NNam"
.Cells(lz, 4).Value = "VNam"
End With
End Sub
LG
Alexandra
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 16:02:18
Steve
Hallo Alexandra,
ich versuche das mal eben zu verstehen
Sub test()
Dim lz As Long
'Long sind ganze Zahlen
With Worksheets("Startseite")
lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'Es wird die Zeilennummer der ersten freien Zeile als Zahl ermittelt
If Cells(2, 1).Value = "" Then lz = 2
'Ist die Zeile 2 leer wird im folgenden Zeile 2 benutzt
.Cells(lz, 1).Value = "NName"
'Ist sie nicht leer, wird die entsprechende Zeile verwendet.
.Cells(lz, 2).Value = "PersNr"
.Cells(lz, 3).Value = "NNam"
.Cells(lz, 4).Value = "VNam"
End With
End Sub

Habe ich das so korrekt verstanden?
Vielen Dank schon einmal.
Gruß Steve
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 16:07:29
cysu11
Hi Steve,
jep, korrekt!
LG
Alexandra
AW: Alles was ich mache-und was machst Du?
25.04.2019 16:09:51
Steve
Hallo Alexandra
Das funktioniert wunderbar. Ich danke dir für deine Lösung.
Ich hab mal flugs eine andere Frage noch.
Ich finde in meinem Code nicht den richtigen String.
Im oderen Bereich befindet sich der Teil der den neuen Tabs eine Nummer verpasst.
Ich dachte bisher das sein der String NName. Aber das scheint er nicht immer zu sein.
Kannst du dir den Code mal eben anschauen und mir sagen welcher der richtige ist damit bei der Nummer in der Tabelle "Start" auf dem Sheet "Startseite" die Nummer des Tabs in Spalte A steht?
Das wäre echt super.
Oder liege ich richtig, das es schon der String NName ist, dieser sich aber anforderung immer verändert.
Gruß Steve
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 16:20:49
cysu11
Hi Steve,
ich verstehe nicht was du meinst!?
Welchen Teil des Codes meinst du und was soll in Spalte A eingetragen werden?
LG
Alexandra
AW: Alles was ich mache-und was machst Du?
25.04.2019 17:33:17
Steve
Hallo Alexandra,
Du batest doch nach meiner Datei. Die habe ich gesendet. Dann kam deine antwort. Also ging ich davon aus das du sie dir angeschaut hast.
Dann stelle ich, falls ich selber keine Lösung finde einfach eine neue Anfrage nach Hilfe.
Gruss Steve
Ps.: Es sei denn du magst dir meine Datei doch noch eben anschauen.
AW: Alles was ich mache-und was machst Du?
25.04.2019 17:38:52
cysu11
Hi Steve,
ich habe nur den Teil angeschaut der relevant war für dein erstes Problem! :) Ich habe mir jetzt die Datei nochmals angesehen! =
Deine letzte Anfrage verstehe ich nicht, deswegen erkläre das etwas genauer, was du genau meinst!?
LG
Alexandra
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 21:37:07
Steve
Hallo Alexandra,
Ich versuche es mal zu erklären. Der erste teil des Makros (Ich meine ich habe das ganze sogar mit Kommentaren abgegrenzt) ist dafür zuständig die Masterfolie zu kopieren und der Kopie eine Nummer zu geben. Jetzt ist es so, das das makro prüft ob es Lücken in der Nummerierung gibt und diese dann auffüllt.
Der Teil bei dem du mir geholfen hast greift nun diese Sheet-Nummer ab und schreibt sie als laufende Nummer in die spalte A.
(Ausserdem werden ja der Vorname, Nachname und die persnr erfragt und durch deine Hilfe weiterverwendet. Aber das scheint ja zu funktionieren.)
Ich wollte es mir einfach machen und nicht eine neue Abfrage einbauen weil ich mir dachte die Sheet-Nr schwirrt ja letztlich schon in dem Makro herum.
Ich dachte bisher das der definierte string NName letztlich die Nummer ist, aber irgendwie schein das nicht richtig zu sein.
Meine Frage ist nun, ob du mir sagen kannst wie ich an die Sheet-Nr herankomme.
Liebe Grüße und einen schönen Abend
Steve
Anzeige
AW: Alles was ich mache-und was machst Du?
25.04.2019 22:26:13
cysu11
Hi Steve,
wenn ich dich richtig verstanden haben, dann willst du den Namen des Blattes das du neu angelegt hast in ein String? Dann so:
Ändere diesen Teil:
With ActiveSheet
.Name = IIf(Neu  0, Neu, Mmax + 1)
MsgBox "Master kopiert in: " & .Name
End With
in:
With ActiveSheet
.Name = IIf(Neu  0, Neu, Mmax + 1)
MsgBox "Master kopiert in: " & .Name
Blatt = .Name
End With
Und oben dann "Dim Blatt as String" dann kannst du mit Blatt weiter arbeiten!
LG
Alexandra
AW: Alles was ich mache-und was machst Du?
29.04.2019 12:45:32
Steve
Hallo Alexandra,
Vielen Dank dafür. Das funktioniert super.
Für mein Verständnis. Ich lag schon richtig mit der Vermutung das ich den Wert von NName nicht nehmen konnte da er sich im Laufe des Vorgangs noch verändert?
Deine Ergänzung übernimmt dann das Ergebnis erst in einen neuen String den ich weiter verwenden kann.
Richtig verstanden?
Liebe Grüße
Steve
Ps: Sorry das ich jetzt erst antworte aber das Wochenende war etwas turbulent. Das Kind dachte sich es wäre cool direkt nach den dreimonatskoliken gleich die Zähne zu bekommen.
Anzeige
AW: Alles was ich mache-und was machst Du?
29.04.2019 13:56:04
cysu11
Hi Steve,
korrekt!
LG
Alexandra
AW: Alles was ich mache-und was machst Du?
29.04.2019 15:04:29
Steve
Hallo Alexandra
Eine Frage hätte ich noch. Ich möchte zum Schluss die numerischen Tabellenblätter sortieren. Nun ist mir da ein doofer Fehler unterlaufen. Ich habe zwar ein Makro das sortiert aber leider falsch.
Habe bereits rausgefunden das es daran liegt das die Zahlen als Text behandelt wird. Deshalb habe ich zb folgende Sortierung
1,10,2 usw.
Ich denke ich muss also die Tabellenblätter direkt dreistellig - also mit vorangestellten Nullen -erstellen
Ich habe mit schon „len“ angeschaut. Damit könnte ich die Zeichenlänge von .name auslesen und entsprechend eine oder zwei Nullen voranhängen.
Kannst du mir aufzeigen wo ich da ansetzen müsste. Gerne auch mit einer generellen Hilfestellung.
Muss nicht gleich die Lösung sein. Lerne besser wenn ich es dann selber versuche.
(Falls es nicht stört wenn ich bei scheitern um Hilfe bitte. )
So mein Plan.
Liebe Grüße.
Steve.
AW: Alles was ich mache-und was machst Du?
29.04.2019 17:33:29
cysu11
Hi Steve,
so würde ich es machen:
Option Explicit
Sub BlattKopieren()
'NEUE FOLIE ERSTELLEN'
''''''''MASTER kopieren, freie NR. ermitteln & entsprechend benennen.
Dim i As Integer, j As Integer, z As Integer, Arr() As Integer, vz As String
Dim NName As String, Mmax As Integer, Istda As Boolean
Dim TBM, TBN, Neu As Integer, ZB As Boolean
Set TBM = Sheets("Master") 'die MasterTab
For i = 1 To Sheets.Count
NName = Sheets(i).Name
If IsNumeric(NName) Then
ReDim Preserve Arr(z)
Arr(z) = NName
z = z + 1
ZB = True
End If
Next
If ZB Then
Mmax = Application.WorksheetFunction.Max(Arr)
For i = 1 To Mmax
For j = LBound(Arr) To UBound(Arr)
If Arr(j) = i Then
Istda = True
Exit For
Else
Istda = False
End If
Next j
If Istda = False Then
Neu = i
GoTo Weiter
End If
Next i
End If
Weiter:
With TBM
.Visible = True
.Copy after:=Sheets(Sheets.Count)
.Visible = False
End With
With ActiveSheet
vz = "00"
If Mmax >= 9 And Mmax  0, Neu, vz & Mmax + 1)
MsgBox "Master kopiert in: " & .Name
End With

LG
Alexandra
AW: Alles was ich mache-und was machst Du?
30.04.2019 13:27:23
Steve
Hallo Alexandra,
Das funktioniert. Aber nur bedingt. Manchmal fallen Sheets auch wieder weg. Das Makro füllt diese Lücken zwar auf wenn dann ein neuer Sheet erstellt wird, aber macht sie nicht dreistellig, was dazu führt das sie nicht korrekt sortiert werden.
Ich verstehe das so, das alles nach der Sprungmarke „Weiter“ dafür sorgt das die sheets dreistellig werden. Also dachte ich mir ich muss diese Sprungmarke nur noch an anderer Stelle einfügen.
Habe da einfach mal rumprobiert aber leider scheint das nicht zu klappen.
Aber irgendwie verstehe ich das nicht. Denke ich vielleicht zu simpel? Eigentlich müsse er doch fragen.
- gibt es eine Lücke - nein = höchste sheet +1
- gibt es eine Lücke - ja = dann auffüllen.
Diese Stelle muss ich doch nur finden oder nicht?
Danke schon einmal für deine Antwort.
Steve
AW: Alles was ich mache-und was machst Du?
30.04.2019 14:22:12
cysu11
Hi Steve,
mein Fehler, an die Lücken, habe ich nicht mehr gedacht :)
So müsste es passen:
Option Explicit
Sub BlattKopieren()
'NEUE FOLIE ERSTELLEN'
''''''''MASTER kopieren, freie NR. ermitteln & entsprechend benennen.
Dim i As Integer, j As Integer, z As Integer, Arr() As Integer, vz As String
Dim NName As String, Mmax As Integer, Istda As Boolean
Dim TBM, TBN, Neu As Integer, ZB As Boolean
Set TBM = Sheets("Master") 'die MasterTab
For i = 1 To Sheets.Count
NName = Sheets(i).Name
If IsNumeric(NName) Then
ReDim Preserve Arr(z)
Arr(z) = NName
z = z + 1
ZB = True
End If
Next
If ZB Then
Mmax = Application.WorksheetFunction.Max(Arr)
For i = 1 To Mmax
For j = LBound(Arr) To UBound(Arr)
If Arr(j) = i Then
Istda = True
Exit For
Else
Istda = False
End If
Next j
If Istda = False Then
Neu = i
GoTo Weiter
End If
Next i
End If
Weiter:
With TBM
.Visible = True
.Copy after:=Sheets(Sheets.Count)
.Visible = False
End With
With ActiveSheet
vz = "00"
If Mmax = i - 1 And Mmax >= 9 And Mmax  Mmax Then
If i >= 10 And i = 9 And Mmax = 9 And i  0, vz & Neu, vz & Mmax + 1)
MsgBox "Master kopiert in: " & .Name
End With
LG
Alexandra
AW: Alles was ich mache-und was machst Du?
01.05.2019 20:29:05
Steve
Hallo Alexandra,
Vielen lieben Dank für diese und die letzten Hilfestellungen. Es funktioniert sehr gut und hat mich enorm weitergebracht.
Auch Danke das du dir die Mühe gemacht hast meine Versuche die Codes zu verstehen zu unterstützen.
Dazu fällt mir ein: meine letzte Vermutung scheint ja völlig falsch zu sein da deine Lösung ja in deinem Teil des Codes steckt.
Ich wünsche dir einen schönen Abend
Liebe Grüße
Steve
AW: Alles was ich mache-und was machst Du?
01.05.2019 20:34:42
cysu11
Hi Steve,
prima, das freut mich & Danke für die Rückmeldung!
LG
Alexandra

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige