1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel: Auswählen mehrerer Sheets (wenn diese vorhanden sind)

Discussion in 'Office-Programme' started by sTeFaN1989, Aug 25, 2009.

Thread Status:
Not open for further replies.
  1. sTeFaN1989

    sTeFaN1989 Byte

    Hallo Leute,

    steh wieder vor einem Problem :(

    Ich hab folgendes vor:

    Das Makro soll angebenene Sheets auswählen und dann das Druckfenster öffnen.
    Mein Problem dabei ist, dass es vorkommen kann das ein Sheet eventuell gerade nicht vorhanden ist.

    Mein Code:

    Code:
    Sheets(Array("DJR (1)", "DJR (2)", "DJR (3)","DJR (4)"), "DJR (5)")).Select
    Application.Dialogs(xlDialogPrint).Show
    Wenn jetzt der Fall auftritt, dass zum Beispiel das Sheet "DJR (5)" noch nicht existiert, kommt es zum Fehler.

    Kann man eine Art Abfrage einbauen, damit praktisch die vorhandenen Sheets ausgewählt werden, also wenn vorhanden dann auswählen? oder das der Fehler sozusagen übersprungen wird?

    Gruß und schonmal wieder großen Dank :)

    sTeFaN, der der immer soviele Fragen hat :P
     
  2. Beverly

    Beverly Halbes Megabyte

    Hi Stefan,

    laufe in einer Schleife über alle Worksheets und füge sie in das Array ein wenn sie vorhanden sind:

    Code:
    Sub TabellenblaetterSelektieren()
        Dim wsTabelle As Worksheet
        Dim arrWorksheets()
        Dim inZaehler As Integer
        For Each wsTabelle In Worksheets
            Select Case wsTabelle.Name
                Case "DJR (1)", "DJR (2)", "DJR (3)","DJR (4)"), "DJR (5)"
                    ReDim Preserve arrWorksheets(0 To inZaehler)
                    arrWorksheets(inZaehler) = wsTabelle.Name
                    inZaehler = inZaehler + 1
            End Select
        Next wsTabelle
        Worksheets(arrWorksheets).Select
    End Sub
     
  3. sTeFaN1989

    sTeFaN1989 Byte

    Der Code funktionert wieder top, jedoch hab ich das Problem das ich den Code nicht ganz verstehe -> Anfänger :)

    Also im groben funktioniert das ja so:

    Case gibt die Fälle vor -> Makro überprüft die Sheetname -> wenn ein Sheetname ein Fall entspricht dann wird er dem Array zugefügt...odeR?


    Hier mal die Fragen zum Code , was ich nicht ganz verstehe:

    Was macht denn:

    ReDim Preserve arrWorksheets(0 To inZaehler)
    arrWorksheets(inZaehler) = wsTabelle.Name
    inZaehler = inZaehler + 1


    Stellt inZaehler sozusagen die Arraylänge/Arrayindex dar, sodass jedes neue gefundene Sheet auf einen erhöhten Arrayindex gespeichert wird?
    Was bedeutet dann dieses ReDim Preserve arrWorksheets(0 To inZaehler)??? Legt das sozusagen das Array mit variabler Größe an??

    Wär cool wenn du mir das noch eben erklären kannst, damit ich es nachvollziehen kann...will ja dabei lernen und später dann selber können :)


    Sorry ich hab VBA noch net sooo drauf, bisher nur C programmiert...

    Lieben Gruß und vielen Dank :)
     
  4. Beverly

    Beverly Halbes Megabyte

    Hi Stefan,

    du hast vom Prinzip her alles richtig verstanden.

    ReDim Preserve arrWorksheets(0 To inZaehler):

    Redim Preserve (preserve = beibehalten) erweitert das Array immer um ein weiteres Feld unter Beibehaltung der bereits vorhandenen Felder. Da das Array bei 0 beginnt (es sei denn du deklarierst außerhalb des Makros Option Base 1 - dann beginnt es bei 1) und zu Beginn des Codes der Zähler inZaehler = 0 ist, wird das Array zuerst mit 1 Feld (Feld 0) dimensioniert. Wird der Zähler um 1 erhöht durch inZaehler = inZaehler + 1 wird beim nächsten Durchlauf das Array auf 2 Felder (Feld 0 und Feld 1) erweitert, wobei auch der Inhalt von Feld 0 erhalten bleibt.

    arrWorksheets(inZaehler) = wsTabelle.Name:

    schreibt den Tabellenamen in das betreffende Arrayfeld.
     
  5. sTeFaN1989

    sTeFaN1989 Byte

    alles klar dann hab ich das soweit verstanden :)

    wieder was gelernt :-P

    Danke !!!

    Gruß sTeFaN
     
Thread Status:
Not open for further replies.

Share This Page