Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Eingabe verunmöglichen, wenn mehrere Sheets aktiv

Betrifft: Eingabe verunmöglichen, wenn mehrere Sheets aktiv von: Peter
Geschrieben am: 18.03.2016 08:13:08

Guten Tag

Ich hatte früher einen Code, der eine Eingabe rückgängig machte, wenn mehr als ein Tabellenblatt aktiviert ist.

Nun funktioniert das nicht mehr zuverlässig. In der Regel klappt es das erste Mal. Dann wir die Meldung noch angezeigt, aber der Eintrag nicht rückgängig gemacht.

Kann mir jemand helfen?

Danke und Gruss, Peter

https://www.herber.de/bbs/user/104438.xlsm

Option Explicit
Dim bUndo As Boolean

''''


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If ActiveWindow.SelectedSheets.Count > 1 Then
    With Application
        .EnableEvents = False
        If Not bUndo Then .Undo
        .EnableEvents = True
   End With
    bUndo = True
    MsgBox "Mehrere Tabellen aktiviert !!!"
    Application.EnableEvents = True
    Exit Sub
End If
bUndo = False
End Sub

  

Betrifft: AW: Eingabe verunmöglichen, ... von: Herbert Grom
Geschrieben am: 18.03.2016 09:50:49

Hallo Peter,

so hat es bei mir mit Excel 2013 funktioniert:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   On Error Resume Next
   If ActiveWindow.SelectedSheets.Count > 1 Then
      If Not bUndo Then
         Application.EnableEvents = False
            Application.Undo
            bUndo = True
            MsgBox "Mehrere Tabellen aktiviert !!!"
         Application.EnableEvents = True
         Exit Sub
      End If
   End If
   bUndo = False
End Sub
Servus


  

Betrifft: AW: Eingabe verunmöglichen, ... von: Peter
Geschrieben am: 18.03.2016 09:54:42

Hallo Herbert

Danke! Das ist perfekt.

Gruss, Peter


  

Betrifft: AW: Eingabe verunmöglichen, ... von: Steve
Geschrieben am: 18.03.2016 14:15:12

Hallo Peter,

bei drei markierten Blättern führt er mir mit Herberts Code jedes zweite Mal zwei .Undo's aus, was dazu führt, dass der Eintrag doch wieder in der Zelle steht.
Für vier markierte Blätter führt er immer zwei Stück aus, bei fünfen erst zwei, dann drei und wieder von vorn...

Der Super-Dau gewinnt.

lg Steve


  

Betrifft: AW: Eingabe verunmöglichen, wenn mehrere von: Steve
Geschrieben am: 18.03.2016 10:12:58

Hallo Peter,

gehe doch mal bitte die Logik deines Codes durch:
Wenn mehr als ein Sheet markiert ist, dann führe ein .Undo aus wenn bUndo falsch ist. Beim allerersten Mal ist es immer falsch.
Danach wird es auf wahr gesetzt und bleibt es auch. Erst wenn du nur ein Blatt markierst und dann eine Zelle in einem Blatt änderst (.Count = 1) wird bUndo wieder auf falsch gesetzt. Deine Prüfung ist damit solang nutzlos bis dein Benutzer dies auch wirklich gemacht hat, denn solang wird kein .Undo ausgeführt. Das heist entweder den Benutzer nochmals belehren, oder den Code für den Super-Dau rüsten.

Ich bin mir nicht sicher wofür bUndo gedacht war, so ganz erschließt sich mir der Sinn dahinter nämlich nicht, aber ich vermute es soll in diesem Code die Aufgabe übernehmen, dass deine MsgBox nicht 10x angezeigt wird wenn du 10 Tabellenblätter markiert hattest. Du änderst bei Mehrfachmarkierung von Tabellenblättern auf jedem Blatt eine Zelle und damit wird der Code für alle diese ausgeführt. Nach dem letzten muss er jedoch bUndo wieder auf falsch setzen, sonst bleibt er funktionslos. Das kann über einen Zähler erfolgen.

Probier bitte mal untenstehenden Code ob er deinen Vorstellungen entspricht.

lg Steve

Dim bUndo As Boolean
Dim i As Long

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If i = 0 Then i = ActiveWindow.SelectedSheets.Count

'On Error Resume Next
If i > 1 Then
    With Application
        .EnableEvents = False
        If Not bUndo Then
            .Undo
            MsgBox "Mehrere Tabellen aktiviert !!!"
        End If
        .EnableEvents = True
    End With
    bUndo = True
Else
    bUndo = False
End If

i = i - 1
End Sub



  

Betrifft: AW: Eingabe verunmöglichen, wenn mehrere von: Peter
Geschrieben am: 18.03.2016 13:14:44

Hallo Steve
Vielen Dank.
Ja, es ist richtig, bei einer Mehrfachselektion von Tabellenblättern möchte ich nur eine Fehlermeldung erhalten.
Ich werde mir deinen Code noch anschauen und mit der anderen Lösung vergleichen.

Gruss, Peter


  

Betrifft: AW: Eingabe verunmöglichen, wenn mehrere von: Herbert Grom
Geschrieben am: 18.03.2016 16:19:48

Hallo Peter,

so ging's bei mir auch mit 6 Tabellenblättern:

Option Explicit

Dim iStrg%, iSheetsSelected%

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   
   If ActiveWindow.SelectedSheets.Count > 1 Then
      If iStrg >= iSheetsSelected - 1 And iStrg > 0 Then
         iStrg = 0
         iSheetsSelected = 0
         Exit Sub
         Else
            If iStrg = 0 Then
               Application.EnableEvents = False
                  Application.Undo
                  MsgBox "Mehrere Tabellen aktiviert !!!", vbCritical, "Fehler"
               Application.EnableEvents = True
               
               iSheetsSelected = ActiveWindow.SelectedSheets.Count
            End If
            iStrg = iStrg + 1
            Exit Sub
      End If
   End If
End Sub
Servus


  

Betrifft: AW: Eingabe verunmöglichen, wenn mehrere von: Peter
Geschrieben am: 18.03.2016 20:16:18

Hallo Herbert
Vielen Dank.
Jetzt habe ich 2 funktionierende Codes!

Gruss, Peter


 

Beiträge aus den Excel-Beispielen zum Thema "Eingabe verunmöglichen, wenn mehrere Sheets aktiv"