Excel2016-vba code, verliert ActiveSheet in for each Worksheet in Workbook Loop

Diskutiere und helfe bei Excel2016-vba code, verliert ActiveSheet in for each Worksheet in Workbook Loop im Bereich Microsoft Office im Windows Info bei einer Lösung; In einem Excel 2016 workbook mit mehreren Sheets läuft eine Schleife um alle Sheets im Workbook die Protection einzuschalten. In diesem Fall bleibt das... Dieses Thema im Forum "Microsoft Office" wurde erstellt von Peter TSQ-SY, 28. März 2019.

  1. Excel2016-vba code, verliert ActiveSheet in for each Worksheet in Workbook Loop


    In einem Excel 2016 workbook mit mehreren Sheets läuft eine Schleife um alle Sheets im Workbook die Protection einzuschalten. In diesem Fall bleibt das AktiveSheet erhalten und ändert sich nicht.

    Bei start einer weiteren Schleife um die Protection wieder auszuschalten, nach der Schleife wird das zweitletzte Sheet aktiv gemacht. Das darf aber nicht sein! Das Verhalten taucht nur auf bei folgende Voraussetzung:

    Excel Version 2016 (z.B. MSO 16.0.11328.20220 64-Bit )

    • Das Workbook muss mehr als 2 Sheets haben
    • Der Code wird über command button aufgerufen
      Aufrufe durch Direktfenster, oder Events arbeiten einwandfrei.
    • In der Loop dürfen keine Debugger - Stop Markierungen haben
      In diesem Fall funktioniert der Code ebenfalls, und der Fehler tritt nicht auf

    Was wurde bisher getan um das Verhalten zu klären?

    Ich habe eine entsprechende Frage im 'StackOverflow' Forum gestellt.

    Ergebnis: Es muss sich um ein Bug handeln, ich soll mich an den Microsoft Support wenden, was ich hiermit tue.


    Beispiel-Code:


    'code to reproduce the issue

    'declaration zone
    Public Const GLB_PW = "Password"

    'Module 1
    Sub Protection_On() 'called by command button
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
    If Not ws.ProtectContents Then
    'ws.Protect GLB_PW '
    ws.Protect Password:=
    ""
    End If
    Next ws
    Debug.Print
    "Aktive Worksheet: " & ActiveSheet.Name
    End Sub
    Sub Protection_Off() 'called by command button
    'code generating the issue
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
    If ws.ProtectContents Then
    'ws.Unprotect GLB_PW
    ws.Unprotect Password:=
    ""
    End If
    Next ws
    Debug.Print
    "Aktive Worksheet: " & ActiveSheet.Name
    'ActiveSheet moved from Sheet1 to Sheet3
    End Sub

    Vielen Dank - Peter
     
  2. Andreas Killer Win User

    Druckbereich für alle Tabellenblätter ändern

    Klicke mit der rechten Maustaste auf die Blattregisterkarte

    Wähle "Code anzeigen"

    Klick im Menü auf Einfügen \ Modul

    Füge den folgenden Code ein

    Schließe den VBA-Editor

    Drücke Alt-F8

    Wähle das Makro aus

    Klick auf Ausführen

    Andreas.

    Sub DruckbereichAn()
    
      Dim Ws As Worksheet
    
      For Each Ws In Worksheets
    
        Ws.PageSetup.PrintArea = "1:32"
    
      Next
    
    End Sub
    
    Sub DruckbereichAus()
    
      Dim Ws As Worksheet
    
      For Each Ws In Worksheets
    
        Ws.PageSetup.PrintArea = ""
    
      Next
    
    End Sub
    
    
  3. Claus Busch Win User

    Scrollarea in mehreren unterschiedlichen Arbeitsblättern einschränken

    Hallo,

    dann probiere es mal so:

    Private Sub Workbook_Open()
    
    Dim wsh As Worksheet
    For Each wsh In Worksheets
    
        wsh.ScrollArea = "$A$1:$l$30"
    
    Next
    
    End Sub
    Claus
  4. Claus Busch Win User

    Bedingte Formatierung auf andere Arbeitsblätter übertragen

    Hallo Felix,

    wenn du alle Arbeitsblätter formatieren möchtest, probiere mal folgendes Makro. Sonst im Makro die gewünschten Blätter anpassen. Selektiere das bereits formatierte Blatt und starte das Makro:

    Sub CopyFC()
    
    Dim i As Integer
    
    Dim fc As FormatCondition
    
    Dim wsh As Worksheet
    
    Dim fcAddr As String, fcClr As String, fcFrml
    With ActiveSheet
    
       For Each wsh In Worksheets
    
          i = 1
    
          If wsh.Name <> .Name Then
    
             For Each fc In .UsedRange.FormatConditions
    
                fcAddr = fc.AppliesTo.Address
    
                fcClr = .UsedRange.FormatConditions(i).Interior.Color
    
                fcFrml = fc.Formula1
    
                With wsh.Range(fcAddr)
    
                   .FormatConditions.Add Type:=xlExpression, Formula1:=fcFrml
    
                   With .FormatConditions(1).Interior
    
                      .Color = fcClr
    
                   End With
    
                   i = i + 1
    
                End With
    
             Next
    
          End If
    
       Next
    
    End With
    
    End Sub
    Claus
  5. Claus Busch Win User

    Scrollarea in mehreren unterschiedlichen Arbeitsblättern einschränken

    Hallo,

    warum änderst du Code einfach ab, um dann zu schreiben, dass er nicht funktioniert.

    Lasse es einfach bei

    For Each wsh in Worksheets

    Claus
  6. Claus Busch Win User

    Range mit Zeilenauswahl

    Hallo,



    der Code muss doch wissen, zu welchem Workbook das Worksheet gehört. Deswegen gleich zusammenhängend initialisieren, z.B.:

    Set Ship = Workbooks("to-do.xlsm").Worksheets("Ship Report")



    Mit freundlichen Grüßen

    Claus
  7. User Advert


    Hi,

    willkommen im Windows Forum!
Thema:

Excel2016-vba code, verliert ActiveSheet in for each Worksheet in Workbook Loop - Microsoft Office

Die Seite wird geladen...

Excel2016-vba code, verliert ActiveSheet in for each Worksheet in Workbook Loop - Similar Threads - Excel2016 vba code

Forum Datum

Hilfe bei VBA-Code

Hilfe bei VBA-Code: Microsoft Excel 2019Windows 11 Hallo zusammen,ich habe folgendes Problem: Ich komme zwar mit Excel gut zurecht, kenne mich aber nicht mit VBA-Codes aus, sodass ich mithilfe von ChatGPT ich einen...
Microsoft Office 20. Januar 2025

Individual sound settings for each user

Individual sound settings for each user: I have a Win 10 Pro machine with 2 users.User A uses a Bluetooth headphone.User B wants to use the installed loudspeaker.How can this be configured, so that each user has automatically his...
Apps 30. Mai 2023

Individual sound settings for each user

Individual sound settings for each user: I have a Win 10 Pro machine with 2 users.User A uses a Bluetooth headphone.User B wants to use the installed loudspeaker.How can this be configured, so that each user has automatically his...
Games und Spiele 30. Mai 2023

Ein Worksheet Change VBA in Personal. XLSB ausführen

Ein Worksheet Change VBA in Personal. XLSB ausführen: Hallo Gemeinde,Ich habe ein Worksheet Change in einer Exceltabelle, das ausgeführt werden soll wenn in der Spalte "F" ein Wert verändert wird.Eine Änderung löst eine SVERWEIS Abfrage aus und...
Microsoft Office 3. November 2022

Excel VBA-Code

Excel VBA-Code: Hallo liebe Community,ich würde gerne den Zelleninhalt aus Zelle "E8" im Tabellenblatt "Januar" als Kommentar/Notiz in das Tabellenblatt "Februar" in der Zelle "E8" übernehmen. Als nächstes soll...
Microsoft Office 27. Mai 2022

Mistake in VBA code

Mistake in VBA code: Hi there, the following code ought to be used to get data from an excel file to update data in my master file. Unfortunately the process just stops, excel closes itself and tries to repair the...
Microsoft Office 18. Januar 2021

VBA Code Zeilenumbruch

VBA Code Zeilenumbruch: Hallo, ich sehe den Fehler im Code nicht. Nachdem ich versucht habe einen Zeilenumbruch einzuehren geht es nicht mehr... LG Co [IMG]
Microsoft Office 6. Oktober 2016
Excel2016-vba code, verliert ActiveSheet in for each Worksheet in Workbook Loop solved
  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.