Office: (Office 2013) Excel VBA Sheet am Ende einfügen, ABER

Helfe beim Thema Excel VBA Sheet am Ende einfügen, ABER in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich habe schon unzählige Seiten schon durchforstet, leider vergeblich. Bin gerade am VBA rein schnuppern und suche mir "schnipsel" aus... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von ZeFix, 31. Januar 2017.

  1. ZeFix Neuer User

    Excel VBA Sheet am Ende einfügen, ABER


    Hallo zusammen,
    ich habe schon unzählige Seiten schon durchforstet, leider vergeblich. Bin gerade am VBA rein schnuppern und suche mir "schnipsel" aus dem Netz zusammen.
    Thema ist zwar bekannt, Lösungsvorschläge sind auch schon zu finden gewesen aber diese haben einen gemeinsamen Hacken. Liegt glaube ich an Office Version.

    Problem:
    Excel Sheet (Vorlage) soll ans Ende kopiert werden.
    Der Hacken: sind die Sheets versteckt wird das letzte Blatt ÜBERSCHRIEBEN !! Warum?
    Das ganze funktioniert solange kein Sheet versteckt ist. Protected sind diese Sheets (Vorlagen) auch aber trotzdem funktionierte es, außer es wurden paar versteckt.

    Mein Code:

    Public Sub Kopieren()
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim Namen As String
    Dim Namen2 As String
    Set WS = Tabelle9
    Set WB = ActiveWorkbook
    Namen = Format(Date, "DD.MM.YY")
    Namen2 = Format(Time, "HH.MM.SS")
    WS.Copy After:=WB.Sheets(WB.Sheets.Count)
    ActiveSheet.Name = "@" + Namen + "|" + Namen2
    End Sub

    Bin für jede Idee dankbar.
    Gruß
    ZeFix
     
  2. Beverly
    Beverly Erfahrener User
    Hi,

    ich habe das jetzt nicht gestestet, dass ein Tabellenblatt "überschrieben" (was auch immer du damit meinst) wird, aber wenn das bei dir so ist, dann blende die Blätter vor dem Kopieren ein und anschließend wieder aus - durch Verwendung von Applicaion.ScreenUpdating = False zu Beginn bleibt diese Aktion für den Benutzer (fast) unbemerkt. Nicht vergessen: am Ende Applicaion.ScreenUpdating wieder auf True setzen.

    Bis später,
    Karin
     
    Beverly, 1. Februar 2017
    #2
  3. ZeFix Neuer User
    Hallo,
    Danke für die Anregung. Werd ich wohl machen müssen.

    Was ich aber nicht verstehe ist daß der folgende Code mir die Gesamtanzahl der Tabellen inkl der versteckten korrekt anzeigt.
    Ich habe nämlich 10 Tabellen und davon wurden 2, weil als Vorlage dienend, versteckt.

    Sub vhCount()
    MsgBox ActiveWorkbook.Sheets.Count
    End Sub

    MsgBox zeigt auch brav 10 Stk.

    Wo ist der gravierende Unterschied zu meinem o.g. Posting ?

    mit "....dass ein Tabellenblatt "überschrieben" (was auch immer du damit meinst) ...." meine ich daß das 8-te Blatt, also die letzte sichtbare Tabelle, Umbenannt wird. Ist mir grad auch aufgefallen.

    Gruß
    ZeFix
     
  4. ZeFix Neuer User

    Excel VBA Sheet am Ende einfügen, ABER

    Hallo,
    zur Nachverfolgung.

    Fehler z.T. lokalisiert:
    >> Set WS = Tabelle9
    Hier verwende ich den internen Namen und nicht die sichtbare Blattbezeichnung (angedachte Sicherheitsmaßnahme falls jemand die Vorlage umbenennt). Wurde in irdendeinem Tutorial mal erwähnt und ist bei mir noch "hängen geblieben".

    Verstehe immer noch nicht warum es, wenn alle Blätter sichtbar sind, einwandfrei funktioniert.

    Habe den "Teil"-Fehler mit folgendem Code "herausgefiltert".
    Wird Vorlage mit der Bezeichnung ("Muster") nicht gefunden wird das gerade aktuelle Sheet umbenannt. Aber auch wenn alle Tabellenblätter sichtbar sind!
    In Meinem Code wird aber brav Copy/Paste/Rename durchgeführt, bis auf die eine 'Ausblenden' Ausnahme. Warum der Unterschied?

    Sub Tabellenblatt_einfügen()

    ' Makro vom 02.10.2012

    Dim wks As Worksheet
    Dim strNam As String
    strNam = InputBox("Name?", "Eingabe", "Inhalt")
    If strNam = "" Then Exit Sub
    On Error Resume Next
    Set wks = Worksheets(strNam)
    If Err.Number <> 0 Then
    Worksheets("Muster").Copy after:=Sheets(Sheets.Count)
    ActiveSheet.Name = strNam
    Else
    MsgBox ("Name existiert bereist")
    End If
    End Sub

    Gruß
    ZeFix
     
  5. Beverly
    Beverly Erfahrener User
    Hi,

    da du ein ausgeblendes Tabellenblatt kopierst, ist dieses nach dem Kopieren ebenfalls ausgeblendet und nicht aktiv - folglich wird das letzte sichtbare umbenannt, da du ActiveSheet.Name benutzt.

    Bis später,
    Karin
     
    Zuletzt bearbeitet: 2. Februar 2017
    Beverly, 2. Februar 2017
    #5
  6. BoskoBiati Erfahrener User
    Hallo,


    Du solltest zwei Dinge prüfen, bevor Du unnötigerweise das:

    Code:
    Set wks = Worksheets(strNam)
    
    einsetzt:
    1. gibt es die Tabelle Muster
    2. Gibt es den Namen schon.

    Das Ganze könnte dann so aussehen:


    Code:
    Sub Tabellenblatt_einfügen()
    
    ' Makro vom 02.02.17
    
    
    Dim strNam As String
    Dim blIstDa As Boolean
    Dim blMusDa As Boolean
    Dim sh As Worksheet
    blIstDa = False
    strNam = InputBox("Name?", "Eingabe", "Inhalt")
    If strNam = "" Then Exit Sub
    For Each sh In ThisWorkbook.Sheets
        If sh.Name = strNam Then blIstDa = True
        If sh.Name = "Muster" Then blMusDa = True
    Next
        If Not blIstDa Then
            If Not blMusDa Then
                MsgBox "Tabelle 'Muster' existiert nicht"
                Exit Sub
            Else
                Worksheets("Muster").Copy After:=Sheets(Sheets.Count)
                ActiveSheet.Name = strNam
            End If
        Else
            MsgBox "Name existiert bereits"
            Exit Sub
        End If
    End Sub
    Mit
    Code:
    On Error Resume Next
    überspringst Du einfach den Fehler und der Code benennt dann das zuletzt aktive Blatt um!
     
    BoskoBiati, 2. Februar 2017
    #6
  7. Beverly
    Beverly Erfahrener User

    Mittels If Err.Number <> 0 Then wird ja anschließend geprüft, ob ein Fehler vorliegt und es wird nur dann umbenannt wenn kein Fehler - hat also absolut nichts damit zu tun, dass das falsche Blatt umbenannt wird. Es wird auch nicht das zuletzt aktive Blatt sondern das letzte sichtbare Blatt umbenannt.

    Bis später,
    Karin
     
    Zuletzt bearbeitet: 2. Februar 2017
    Beverly, 2. Februar 2017
    #7
  8. BoskoBiati Erfahrener User

    Excel VBA Sheet am Ende einfügen, ABER

    Hallo Karin,

    dann lass mal das Makro laufen, wenn das Blatt Muster nicht existiert. Und Du solltest eigentlich wissen, dass "On Error resume next" die Ursache dafür ist, dass Makros manchmal Dinge tun, die nicht erwünscht sind. Und der dazu passende Text ist ja im Beitrag zu finden:

     
    BoskoBiati, 2. Februar 2017
    #8
  9. Beverly
    Beverly Erfahrener User
    Hi Edgar,

    es geht nicht um das Nichtvorhandensein von Tabelle "Muster" sondern um das Vorhandensein des neuen Tabellenblattes - das wird mit dem On Error geprüft und was durchaus legal ist, weil es eben zielgerichtet und korrekt eingesetzt wird.
    Wenn man dagegen eine Vorlage benutzt, sollte man sich schon sicher sein, dass diese auch existiert und dies nicht noch vorher prüfen müssen - das sollte einfach Voraussetzung einer Programmierung sein.

    Bis später,
    Karin
     
    Beverly, 2. Februar 2017
    #9
  10. BoskoBiati Erfahrener User
    Hallo,

    1. On Error Resume Next bringt Probleme und häufig unerwünschte Ergebnisse, vor allem wenn der Code, wie hier, nicht sauber programmiert ist!
    2. Das fehlerhafte Umbenennen könnte man allein schon damit abfangen, dass man aus dem active.sheet ein sheets(sheets.count) macht:
    Code:
    WS.Copy After:=WB.Sheets(WB.Sheets.Count)
    sheets(sheets.count).Name = "@" + Namen + "|" + Namen2
    sollte man aber bei Bedarf noch einblenden, sonst ist es nicht sichtbar!
    3. bringt alleine schon die Zeile
    einen Fehler, wenn das Blatt nicht existiert und das ist in meinen Augen schlecht programmiert! Prüfe ich nämlich, ob der Name schon existiert, dann brauche ich keine Fehlerroutine, die mir dann auch andere Fehler überdeckt.

    Deswegen halte ich auch eine Prüfung, ob das Blatt "Muster" vorhanden ist, für unabdingbar und das On Error Resume Next für unangebracht!

    Im Großen und Ganzen gehen Deine Aussagen nämlich am Kernpunkt des Problems vorbei, weil die Probleme bei einem sauber geschriebenen Code gar nicht auftreten würden!

    Hier noch ein interessanter Link zum Thema:

    http://www.online-excel.de/excel/singsel_vba.php?f=147
     
    Zuletzt bearbeitet: 2. Februar 2017
    BoskoBiati, 2. Februar 2017
    #10
  11. Beverly
    Beverly Erfahrener User
    @All,

    also wenn wir schon ganz sauber programmieren wollen, dann muss noch geprüft werden, ob unerlaubte zeichen verwendet werden und ob der gewünschte Name nicht mehr als 31 zeichen enthält:

    Code:
    Sub TabelleKopieren2()
        Dim blnFalsch As Boolean
        Dim strTabelle As String
        Dim arrFalsch()
        Dim bytFalsch As Byte
        Dim wksTab As Worksheet
        arrFalsch = Array("*", "[", "]", "/", "\", "?", ":")
        strTabelle = InputBox("Name des neuen Blatts:", "Blatt benennen")
        If strTabelle = "" Then
            MsgBox "Leider wurde kein Blattname eingetragen!"
            blnFalsch = True
        Else
            ' Zeichen nicht mehr als 31, andernfalls anpassen
            If Len(strTabelle) > 31 Then
                MsgBox "Maximal 31 Zeichen erlaubt, Name wird angepasst"
                strTabelle = Left(strTabelle, 31)
            End If
            For Each wksTab In Sheets
                If wksTab.Name = strTabelle Then
                    blnFalsch = True
                    Exit For
                End If
            Next wksTab
            If blnFalsch Then
                MsgBox "Tabelle bereits vorhanden"
            Else
                ' unerlaubte Zeichen prüfen
                For bytFalsch = 0 To UBound(arrFalsch())
                    If InStr(strTabelle, arrFalsch(bytFalsch)) > 0 Then
                        MsgBox "Unerlaubte Zeichen enthalten"
                        blnFalsch = True
                        Exit For
                    End If
                Next bytFalsch
            End If
        End If
        ' alle Bedingungen für Name erfüllt
        If blnFalsch = False Then
            For Each wksTab In Sheets
                If wksTab.Name = "Muster" Then
                    blnFalsch = True
                    Exit For
                End If
            Next wksTab
            If blnFalsch Then
                Worksheets("Muster").Visible = True
                Worksheets("Muster").Copy After:=Worksheets(Worksheets.Count)
                Worksheets(Worksheets.Count).Name = strTabelle
                Worksheets("Muster").Visible = False
                MsgBox "Tabelle erfolgreich kopiert!"
            Else
                MsgBox "Tabelle 'Muster' nicht vorhanden"
            End If
        End If
    End Sub

    Bis später,
    Karin
     
    Beverly, 2. Februar 2017
    #11
  12. BoskoBiati Erfahrener User
    Hi,

    und warum blendest Du das Blatt vor dem Kopieren ein?
     
    BoskoBiati, 2. Februar 2017
    #12
  13. ZeFix Neuer User

    Excel VBA Sheet am Ende einfügen, ABER

    Hallo zusammen,
    sorry daß ich die letzte Zeit hier nicht nachgeschaut habe.
    Mit so viel Feedback hab ich nicht gerechnet.

    Hatte nach dem Tip von Beverly zwischenzeitlich selbst eine Lösung "erbastelt"
    Man muß die Befehle erst einmal finden und umsetzen können.

    Mein Code:Public Sub Kopieren()
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim Namen As String
    Dim Namen2 As String
    Set WS = Tabelle9
    'Set WS = Worksheet("AM-Vorlage")
    Set WB = ActiveWorkbook
    Namen = Format(Date, "DD.MM.YY")
    Namen2 = Format(Time, "HH.MM.SS")
    Application.ScreenUpdating = False
    WS.Visible = True
    WS.Select
    WS.Copy After:=WB.Sheets(WB.Sheets.Count)
    ActiveSheet.Name = "@" + Namen + "|" + Namen2
    WS.Visible = False
    Application.ScreenUpdating = True

    End Sub

    Vielen Dank nochmals für die Tips
    Nun funktioniert alles wie gewünscht (Praxistest folgt demnächst)

    Gruß
    ZeFix

    Eins hab ich noch. Ist war nicht wichtig aber interessant zu wissen wie mit VBA machbar. Kam leider nicht dazu weiter danach zu forschen.
    Habe nämlich mehrere Sheets mit verknüpften Zellen. Typischerweise werden die Formatierungen (z.B. Fettschrift) nicht mitkopiert.
    Ich hatte gelesen daß es mit VBA machbar sei. Zu intensiverer Suche fehlte mir die Zeit.
    gruß
     
Thema:

Excel VBA Sheet am Ende einfügen, ABER

Die Seite wird geladen...
  1. Excel VBA Sheet am Ende einfügen, ABER - Similar Threads - Excel VBA Sheet

  2. Tabellenblätter aus Vorlagen-Tabellenblatt generieren mit dynamischen Anpassungen durch Vorgaben

    in Microsoft Excel Hilfe
    Tabellenblätter aus Vorlagen-Tabellenblatt generieren mit dynamischen Anpassungen durch Vorgaben: Hallo, ich suche gerade eine Möglichkeit mittels VBA mehrere Tabellenblätter auf einmal zu generieren (ca. 40), die auf einem Vorlage-Tabellenblatt (TB2) basieren. Das kopieren/ Vervielfachen an...
  3. Blattnamen in neue Arbeitsmappe übernehmen

    in Microsoft Excel Hilfe
    Blattnamen in neue Arbeitsmappe übernehmen: Hallo, ich bin totale VBA-Anfängerin und stehe vor folgendem Problem: ich würde gerne ausgehend von einer vorhandenen Arbeitsmappe (XY) eine neue erstellen und in der neuen Arbeitsmappe (XYZ)...
  4. Excel Fotos einfügen mit VBA auf mehreren Sheets

    in Microsoft Excel Hilfe
    Excel Fotos einfügen mit VBA auf mehreren Sheets: Hi Zusammen, leider bin ich noch völliger Anfänger im Bereich Makros, bin aber gerade dabei, mich reinzuarbeiten. Habe nachfolgendes Makro ans Laufen bekommen, mit dem ich Bilder in meine...
  5. Excel Makro: PDF Drucken aus mehrere Sheets

    in Microsoft Excel Hilfe
    Excel Makro: PDF Drucken aus mehrere Sheets: Guten Tag, ich bin neu im Bereich VBA und habe jetzt ein paar Makros geschrieben. Nun komme ich aber auch nach viel Zeit auf Google nicht weiter :( Mein Ziel: ich will aus 2 Excel Sheets...
  6. VBA Excel-Sheet-Range in pdf-Datei speichern und als Anhang mit outlook versenden

    in Microsoft Excel Hilfe
    VBA Excel-Sheet-Range in pdf-Datei speichern und als Anhang mit outlook versenden: Hallo, versuche mich unter Office 2013 verzweifelt :confused:in VBA mit folgendem Code: Sub RANGE_als_PDF_Datei_per_Outlook_versenden() 'folgendes Makro konvertiert einen bestimmten Range...
  7. VBA in Excel, drop down Auswahl auf einem anderen Sheet erscheinen lassen?!?!

    in Microsoft Excel Hilfe
    VBA in Excel, drop down Auswahl auf einem anderen Sheet erscheinen lassen?!?!: Hallo zusammen,:rolleyes: folgendes Problem: Ich habe eine Liste mit Mitarbeiternamen, hinter den Namen befinden sich drop down menus wo man zwischen Position 1, Position 2 usw. wählen...
  8. Mit VBA in excel Werte aus Abfrage in extra sheet einfügen

    in Microsoft Excel Hilfe
    Mit VBA in excel Werte aus Abfrage in extra sheet einfügen: Hallo, ich habe in ecxel eine Abfrage generiert und möchte nun das Ergebnis sowie relevante Auswahlen für die Abfrage in einem Extra Tabellenblatt speichern. Und zwar nach jeder Abfrage in eine...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden