Tabelle Resize mit VBA

Dieser Thread ist Teil einer Diskussion zu einem Artikel:  Zum News-Artikel gehen

Fritz50

Stammgast
Guten Abend,

Wie mache ich diesen Resize Code optimal?
Für die Auswahl von Werten benutze ich eine Dropdown Liste (Tabelle3). Wenn ich nun einen Wert gewählt habe, soll dieser aus der Dropdown Liste entfernt werden. Dann sortiere ich die Liste, damit die leere Zelle am Schluss der Liste steht. Anschliessend soll die Tabelle mit Resize angepasst werden. Weil die Tabellen wechseln, setzte ich die Tabelle in eine Range-Variable.
Ein Programmzeile kann wie folgend aussehen (zuerst nur für Tabelle3):

ActiveSheet.ListObjects("Tabelle3").Resize Range(Range("Tabelle3")(0, 1), Range("Tabelle3").End(xlDown).Address) oder allgemein ActiveSheet.ListObjects(strTabx).Resize Range(rngTabx(0, 1).Address, rngTabx.End(xlDown).Address)

Für diese Lösung braucht es aber eine StringVariable und eine Rangevariable mit dem Tabellennamen. Geht es eine Lösung mit einer einzigen Variable?

Die Range.Resize Eigenschaft mit relativen Verschiebungen ist mir hier unsympathisch.

P.S. Wenn neue Werte an die Tabelle angehängt werden, geschieht die Anpassung automatisch.

Gruss Fritz
 

Fritz50

Stammgast
Vielleicht ist Range.Resize(iZeilen, iSpalten) doch auch eine gangbare Lösung, wenn ich die Anzahl beschriebener Zellen ermitteln kann.

Range("Tabelle1").Resize(5, 1).Select oder
rngTabx.Resize(iZeilen, iSpalten)

rngTabx.End(xlDown).Count oder rngTabx.End(xlUp).Count
geben immer 1

Gruss Fritz

Diese Zeilen sind als Inline Code verschwommen dargestellt.
Range("Tabelle1").Resize(5, 1).Select oder
rngTabx.Resize(iZeilen, iSpalten)

rngTabx.End(xlDown).Count oder rngTabx.End(xlUp).Count geben immer 1
 
Zuletzt bearbeitet:

nochEinAndreas

Stammgast
Hallo Fritz,

mir ist nicht so ganz klar, was du mit dem Resize erreichen willst. Wenn ich es richtig verstanden habe, willst du die Dropdown-Liste für eine Zelle kürzen, wenn sich die Quell-Liste dafür verkleinert hat.
Ich habe dir hier mal auf die Schnelle eine Datei zusammengebaut:
A1 hat als Bereich für die Dropdown-Liste B1:B30. Wenn du in diesem Bereich eine Änderung vornimmst (oder etwas löschst) wird der Bereich neu sortiert, sodass leere Zellen unten stehen. Die Dropdown-Liste in A1 wird automatisch angepasst, sodass nur noch die gefüllten Zellen erscheinen.
Meinst du so etwas?

Gruß, Andreas
 

Anhänge

  • DropdownUpdate.zip
    14,9 KB · Aufrufe: 3

Fritz50

Stammgast
Hallo Andreas,
Zuerst habe ich gar nicht realisiert wie dein Vorschlag funktioniert (deine Erklärung nicht richtig verstanden). ich möchte genau den Wert löschen, den ich vorher aus der DropDownListe gewählt habe.
Ich stellte bei der Wahl eines Zeichens keine Veränderung in der DropDownListe fest. Ich habe dann die ersten Zeilen etwas umgeschrieben und den Intersect mit „A1:A30“ gemacht. So funktioniert die Auswahl, die Liste B wird immer kürzer. Die Sektion .Validation habe ich noch nicht studiert.
Dann habe ich im Blatt Tabelle1 ein paar weitere Fälle zu Resize programmiert. Im Einzelschritt durchgegen.

Die Aufgabe Paarungen (Blatt Paarungen) habe ich jetzt auch schon recht weit gebracht.
Da ist aber noch eine Zeile, die so nicht funktioniert.

ActiveSheet.ListObjects(strTabName).Resize Range(rngName.End(xlUp).Address, rngName.End(xlDown).Address)

Die erst Zelle ist immer über dem Header. Darum habe ich für den Anfang der Tabelle einen einzelligen Range rngTabNameHead definiert und dieser die Kopfzelle zugewiesen.

ActiveSheet.ListObjects(strTabName).Resize Range(rngTabNameHead.Address, rngName.End(xlDown).Address)

Die Anweisung ‘Range(rngName.End(xlUp).Adress‘ zeigt immer auf Zellen oberhalb des Tabellenlopfs. In Tabelle1 (an Ende von CB_Tab13_Resize2_Click() scheint das zu funktionieren. (Wie) geht xlUp/xlDown für einen begrenzten Bereich?

Der nächste Schritt ist dann noch eine (falsche) Paarung zu löschen und die DropDown-Liste zu ergänzen.

Gruss
Fritz
 

Anhänge

  • DropdownUpdate2.0.zip
    65 KB · Aufrufe: 4
Zuletzt bearbeitet:

nochEinAndreas

Stammgast
Guten Abend Fritz,

als ich eben in deine Mappe geschaut habe, kam mir die Fragestellung doch irgendwie bekannt vor. Das mit dem Verkleinern der Liste nach Auswahl hatten wir hier in ganz ähnlicher Weise doch schon mal:
Bevor wir hier das Rad neu erfinden, versuche doch mal, die Lösungen von damals anzupassen.

Gruß, Andreas
 

Fritz50

Stammgast
Hallo Andreas,
Ja, es handelt sich um die gleiche Geschichte. Ich habe halt das Projekte weiterentwickelt. Dabei sind m.E. andere "Knackpunkte" aufgetreten.
Gruss
Fritz
 

nochEinAndreas

Stammgast
Guten Tag Fritz,

ich habe mir deine Mappe aus Posting #4 noch mal angesehen. Es tut mir Leid. Ich habe mich wirklich bemüht zu verstehen, was du mit dem Code bezweckst - Es ist mir nicht gelungen. Deswegen beziehe ich mich hier noch mal auf dein Ursprungs-Posting. Dort heißt es:
Wenn ich nun einen Wert gewählt habe, soll dieser aus der Dropdown Liste entfernt werden
Deswegen hatte ich im Posting #3 die Mappe hochgeladen. Hier gibt es jetzt noch mal einer geänderte/erweiterte Version dieser Mappe mit (hoffentlich) ausreichend vielen Erklärungen, sowohl auf der Tabelle als auch im Code.
Das wäre mein Mittel der Wahl, wenn es darum geht, einen ausgewählten Wert aus einer Auswahlliste zu streichen.

Gruß, Andreas
 

Anhänge

  • DropdownUpdate V3.zip
    24,8 KB · Aufrufe: 0
Oben