Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Code kürzen (alle sichtbaren Tabellenblätter ausblenden)
#1
Hallo Zusammen

Ich habe ein VBA Projekt welches, so wie ich es geschrieben habe, sehr gut läuft. Jedoch habe ich das Problem, dass ich bei Änderungen immer sehr viel Code anpassen muss. Daher würde ich den Code gerne in ein Modul packen, welchen ich dann einfach mittels call ansprechen kann.

Damit ich dies tun kann, müsste ich jedoch meinen Code vereinfachen und da stellt es bei mir an.

Ausgangslage:

Ich habe eine UserForm mit 12 Commandbutton`s. Jeder Button spricht ein Tabellenblatt an macht dies sichtbar und blendet alle anderen Blätter aus. Zusätzlich wird die UserForm ausgeblendet. Mein Code für ein CommandButton sieht so aus:

Private Sub CommandButton9_Click()
 Sheets("Begriffserklärung").Visible = True
 Sheets("Begriffserklärung").Select
 Markenauswahl.Hide
    If Sheets("VW NF").Activate Then Sheets("VW NF").Visible = False
    If Sheets("NSSP").Activate Then Sheets("NSSP").Visible = False
    If Sheets("VW").Activate Then Sheets("VW").Visible = False
    If Sheets("Seat").Activate Then Sheets("Seat").Visible = False
    If Sheets("Skoda").Activate Then Sheets("Skoda").Visible = False
    If Sheets("Servicepakete").Activate Then Sheets("Servicepakete").Visible = False
    If Sheets("Audi").Activate Then Sheets("Audi").Visible = False
    If Sheets("ASSP").Activate Then Sheets("ASSP").Visible = False
    If Sheets("Checkliste").Activate Then Sheets("Checkliste").Visible = False
    If Sheets("Infos für Sachbearbeiter").Activate Then Sheets("Infos für Sachbearbeiter").Visible = False
    If Sheets("EW").Activate Then Sheets("EW").Visible = False
End Sub

Mein Problem:
Kommt nun ein neues Blatt dazu, muss ich bei jedem CommandButton den If Befehl hinein kopieren.

Meine Idee:
 Call Ausblenden (Modul welchen den obenstehenden Code beinhaltet, für jedes Tabellenblatt)
 Sheets("Begriffserklärung").Visible = True
 Sheets("Begriffserklärung").Select 
 Markenauswahl.Hide

Hier ist jedoch das Problem, dass es einen Debugg Fehler gibt, da Excel mindestens ein aktives Blatt braucht.

Hat vielleicht hier jemand eine elegante Lösung?
Besten Dank für die Hilfe

LG
Demech
Antworten Top
#2
Hi,

ich habe zwar noch nicht so ganz begriffen, was Du willst, aber ich würde es so machen:


Code:
For loA=1 to sheets.count
   if Sheets(loa).name<>"Begriffserklärung" then sheets(loa).visble=false
next
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hallo,

Zitat:Hier ist jedoch das Problem, dass es einen Debugg Fehler gibt, da Excel mindestens ein aktives Blatt braucht.

... das stimmt. Mindestens ein Blatt muß zwingend sichtbar bleiben.
Welches das ist, kannst Du allerdings frei bestimmen. Du kannst also beispielsweise ein leeres Blatt eingeblendet lassen.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#4
Hallo BoskoBiati

Der Zweck des ganzen ist Folgender:
Die Arbeitsmappe welche ich erstellt habe, dient als Sammelsurium und Hilfestellung für spezifisches Fachwissen. Ebenfalls sind gewisse Berechnungen möglich so wie abfragen über eine Datenbank.
Damit man jedoch den Überblick behält, habe ich eine UserForm erstellt. In dieser UserForm sind die CommandButtons angeordnet. Jeder CommandButton verweist auf eine Informationsquelle (Tabellenblatt).
Damit die Übersicht gewährleistet bleibt, soll immer nur das Tabellenblatt sichtbar sein, welches über den bestimmten CommandButton aufgerufen wurde. 

Wie bereits erwähnt, funktioniert die Mappe so wie ich diese Aufgebaut habe, jedoch möchte ich einfach den Code schlanker gestallten, damit ich das ganze einfacher anpassen kann bei Ergänzungen.

Was bewirkt dein Code? Prüft dieser, ob ein Sheet geladen ist und wenn ja blendet er dies aus?
Was ist der Unterschied zu .acivate?

@Käpt`n Blaubär: Danke leider kommt dies für mich nicht in Frage, da das erste Blatt welches immer beim Start geladen wird, eine Begriffserläuterung für die ganze Mappe ist.

Danke euch auf jeden Fall für die Hilfe
Antworten Top
#5
Hallo,

Zitat:@Käpt`n Blaubär: Danke leider kommt dies für mich nicht in Frage, da das erste Blatt welches immer beim Start geladen wird, eine Begriffserläuterung für die ganze Mappe ist.

auch das könnte angepaßt werden.

... und der ganze IF-Kram ließe sich auch mit einer einfachen Schleife wegradieren.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#6
Hmm Schleifen klingen gut. Hab dich wohl falsch verstanden. Wie würde den sowas ausehen? Da hab ich eben gar keine Erfahrung. Ist mein erstes Projekt. So wie das von Bosko?
Antworten Top
#7
Hallo,

ich habe zwar momentan reichlich Puplikumverkehr hier, aber dafür sollte es gerade noch reichen

1. füge in Deine Datei ein neues Arbeitsblatt ein und nenne es "Tabelle 1".

2. dann fügst Du in das Klassenmodul "DieseArbeitsmappe" den nachfolgenden Code ein und speicherst den ganzen Kram.

3. Letztendlich schließt Du die Datei und öffnest Sie wieder.

4. Nun sollte nur noch ein Blatt zu sehen sein.

Zitat:Option Explicit

Private Sub Workbook_Open()
Dim Datei As Workbook
Dim inI As Integer
    For inI = Sheets.Count To 1 Step -1
        If Sheets(inI).Name <> "Tabelle 1" Then Sheets(inI).Visible = False
    Next inI
End Sub

Ach ja, noch was ... die Blätter siehst Du wieder, wenn Du False durch True ersetzt.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#8
(22.05.2018, 13:03)Demech schrieb: Kommt nun ein neues Blatt dazu, muss ich bei jedem CommandButton den If Befehl hinein kopieren.
Hallo Demech
...und wenn ich Dich richtig verstehe, auch einen neuen CommandButton anlegen!? Das ist schon nicht gerade praktisch.
Ich würde eine Prozedur erstellen, welche bei jedem neuen sheet oder wenn ein bestehendes sheet wegfällt, eine Auflistung der vorhandenen sheet-Namen macht. Dann kannst mit einem SelectionChange-Ereignis nur noch auf den Namen zeigen den Du nicht ausblenden willst. Es gibt dann keine CommandButton mehr!
Gruss

Ein Lob ist der Lohn
Ein Tadel der Ansporn
Antworten Top
#9
Hallo Helvetier,

nachdem Du nun einen Nachtrag gemacht hast, stimmt meine Frage ja nun nicht mehr.
Um nicht den ganzen Kram umschreiben zu müssen, lasse ich das nun trozdem so stehen.

schreibst Du mir gerade? Wenn ja, dann habe ich das nicht verstanden.

Bisher hatte ich mich ja nur um das Ausblenden gekümmert.

Was das Einblenden angeht, so würde ich  beim Dateistart oder eben mit einem Button
oder eben mit beiden Möglichkeiten in einer Hilfsspalte sämtliche Arbeitsblätter einlesen.
Dann könnte man alle Blätter zusammen oder eben auch einzelne Blätter auswählen.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#10
Hallo,

meinst du so was in der Art?

Gruß Werner


.xlsm   Schaltflächen.xlsm (Größe: 25,85 KB / Downloads: 9)
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • Demech
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste