900 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,

ich habe ein Problem. Ich würde gerne eine Excel-tTmplate in der von links nach rechts ca. 50 Länder ausgeführt sind automatisieren.
Es muss immer das Template benutzt werden, aber von Kunde zu Kunde benötige ich nicht alle Länder.

Meine Idee ist es ein Formularfeld mit Checkboxen zu bauen.
Ich würde gerne alle Länder als Checkbos aufnehmen und durch anklicken auswählen welche Länder benötigt werden.
Die restlichen Spalten mit den Informationen zu den anderen Ländern sollen gelöscht werden.

Zusätzlich kniffelig wird es da es sich um mehrer tabellen handelt auf denen die Abfrage ausgeführt werden soll.

Ich bin leider noch VBA Anfänger. Ist das überhaupt möglich?
Das Formular ist für mich kein Thema, aber die Programmierung fällt mir sehr schwer.

Wer weiß was?

Herzlichen Dank für eure Tipps!!!

2 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

ich nehme an, dass alle Tabellenblätter identisch aufgebaut sind und die Spalten in der 1. Zeile eine Überschrift (Landesbezeichnung) haben? Schreibe die Landesbezeichnung in die Tag-Eigenschaft jeder CheckBox, die das jeweilige Land repräsentiert .

Du musst dann in einer Schleife über alle Tabellenblätter laufen und innerhalb jedes Tabellenblattes in einer Unter-Schleife über alle CheckBoxen des UserForms. Wenn die CheckBox nicht aktiviert ist, suchst du mit der Find-Methode in der 1. Zeile des Tabellenblattes nach der Landesbezeichnung, die in der Tag-Eigenschaft der betreffenden CheckBox steht. Dadurch kannst du die Spaltennummer ermitteln und löschst dann die betreffende Spalte.

Bis später,
Karin
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

da du geschrieben hast, dass du VBA-Anfänger bist, hier noch ein Code, wie man so etwas lösen kann:
Private Sub CommandButton1_Click()
Dim ctrElement As Control ' Variable für das Steuerelement
Dim wksTab As Worksheet ' Variable für das Tabellenblatt
Dim rngZelle As Range ' Variable für das Ermitteln der Spalte
' Bildschirmaktualisierung aus
Application.ScreenUpdating = False
' Schleife über slle tabellenblätter
For Each wksTab In Worksheets
' bezogen auf das laufende Tabellenblatt
With wksTab
' Schliefe über alle Steuerelemente des UserForm
For Each ctrElement In Me.Controls
' Stuerelement ist eine CheckBox
If TypeName(ctrElement) = "CheckBox" Then
' CheckBox ist nicht aktiviert
If ctrElement = False Then
' Suche in Zeile 1 den Inhalt der Tag-Eigenschaft der laufenden CheckBox
Set rngZelle = .Rows(1).Find(ctrElement.Tag, lookat:=xlWhole)
' Inhalt wurde gefunden deshalb betreffende Spalte löschen
If Not rngZelle Is Nothing Then .Columns(rngZelle.Column).Delete
' Leeren der Suchvariablen
Set rngZelle = Nothing
End If
End If
Next ctrElement
End With
Next wksTab
' Bildschirmaktualisierung ein
Application.ScreenUpdating = True
End Sub

Ich habe ein paar Kommentare eingefügt, damit du besser nachvollziehen kannst, was vor sich geht.

Anstelle der Tag-Eigenschaft kannst du auch die Beschriftung der CheckBox verwenden, wenn sie identisch mit der Spaltenüberschrift in Zeile 1 des Tabellenblattes ist. In diesm Fall müsstest du in der Zeile
Set rngZelle = .Rows(1).Find(ctrElement.Tag, lookat:=xlWhole)

ctrElement.Tag durch ctrElement.Caption ersetzen.

Bis später,
Karin
...