Frage von DownS, 40

Spalten wurden gelöscht und Makro funktioniert nicht mehr einwandfrei.Was kann man tun?

Wir benutzen eine Liste, auf die viele Nutzer zugreifen. Da nicht jeder Nutzer jede Spalte braucht kann dieser über einen Button (Makro) Spalten ausblenden lassen und nur für ihn relevante Informationen darstellen lassen.

Nun gibt es aber ein Problem mit den Makros wenn eine Spalte gelöscht wird. Das Makro wurde z.B. so vorprogrammiert, dass Spalte C ausgeblendet werden soll. Wenn ich nun Spalte B lösche rückt der Inhalt der Spalte C auf Spalte B. Führe ich nun das Makro aus wird weiterhin Spalte C ausgeblendet und nicht Spalte B. Jetzt muss ich das Makro anpassen und statt Spalte C muss ich nun Spalte B einprogrammieren.

Kann man im Makro bestimmte Befehle benutzen, damit dies nicht passiert? Es ist immer mühselig diverse Makros anfassen zu müssen, wenn eine Spalte gelöscht oder hinzugefügt wird. Kann man im Prinzip einen Zellenbezug herstellen oder ähnliches?

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 40

Anstelle das Makros anzupassen, würde ich statt eine Spalte zu löschen, sie leeren (Inhalte löschen). Dadurch solltest du das Problem erschlagen können.


Wenn du dir die Arbeit machen willst, kannst du dein VBA-Programm flexibler machen, indem du in der Spaltenüberschriftenzeile die Titel durchsuchst und anhand der Titel entscheidest, ob du die Spalte ausblendest.

Kommentar von DownS ,

Die erste Variante wäre später zu unübersichtlich, da viele leere Spalten vorhanden wären.

Die zweite Lösung wäre aber super. Wie lautet da denn der Befehl? Habe nach soetwas schon gesucht, aber konnte nichts finden. Habe soetwas ähnliches per sverweis hinbekommen mit VERGLEICH. Aber wie wende ich das beim Makro an?

Kommentar von Suboptimierer ,

Wenn zum Beispiel Zeile 1 deine Titelzeile ist und deine Tabelle maximal 1000 Spalten hat:

For Each rTitel in Range(Cells(1,1),Cells(1,1000))
  If rTitel.Value = "Artikelnr" Then _
   rTitel.EntireColumn.Hidden = True
Next

Du kannst auch die gesamte Zeile mit Range("1:1") durchsuchen, hast nur eine Menge unnötige Vergleiche.

Expertenantwort
von Iamiam, Community-Experte für Excel, 25

Wenn die auszublendende Spalte selbst von keinem der Benutzer  gelöscht wird, kannst Du darin einen benannten Bereich erstellen, zB "auszublenden":

Range("auszublenden").entirecolumn.visible = false

(oder so ähnlich, müsste das auch erst nachsehen,

ob visible= false oder .hidden = true oder was genau. Überlass ich Dir.

Jedenfalls wandert dieser Bereich mit, wenn B:B gelöscht wird.)

Du kannst was ähnliches auch von hinten her machen (ohne benannten Bereich):

...usedrange.specialcells(xllastcell).entirecolumn.offset(0, -3).visible = false

blendet die viertletzte Spalte aus. Allerdings muss man dafür sorgen, dass usedrange nicht durch falsche Einträge verfälscht wird.


Kommentar von Iamiam ,

entnehme gerade der AW von Subopt, dass es .hidden = true heißt.

Seine Lösung ist auch gut, vllt bei sehr vielen Spalten etwas langsamer.

Keine passende Antwort gefunden?

Fragen Sie die Community