Microsoft Excel

Herbers Excel/VBA-Archiv

Sperrung von Zellen per Makro steuern | Herbers Excel-Forum


Betrifft: Sperrung von Zellen per Makro steuern von: Loewelutz
Geschrieben am: 03.12.2009 14:50:29

Liebe Ex(cel)perten,

ich bitte um Hilfe bei folgender Aufgabenstellung:

In einer Tabelle für die Erfassung von Spielergebnissen sollen nur die Erfassungszellen frei gegeben werden. Die Berechnungszellen bleiben gesperrt.

Die Tabelle ist für 3 bis 6 Spieler gestaltet. Jeder spielt gegen jeden. Ich hatte gedacht, die Freigabe über ein Makro zu steuern. Steuerelemente für 3, 4, 5 oder 6 Spieler, die jeweils die Freigabe bzw. Sperrung regeln.

In meiner beigefügten Tabelle sind 4 Teilnehmer eingetragen. Die Eingabezellen F18 und H18 sollten in diesem Fall gesperrt sein, bei 6 Teilnehmern müssten Eintragungen möglich sein.

Hat jemand eine Idee?

https://www.herber.de/bbs/user/66347.xls

Vielen Dank im Voraus für Eure Unterstützung!

Gruß Lutz

  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: fcs
Geschrieben am: 04.12.2009 03:01:30

Hallo Lutz,

hier mein Lösungsvorschlag.

Gruß
Franz

Sub EingabeZellen()
  Dim wks As Worksheet, AnzahlSpieler As Long, Bereich As Range, Zeile As Long
  'Zellbereiche in Spielplan-Blättern
  Const RangeSpielerNamen As String = "C9:C14" 'Bereich mit den 1 bis 6 Spielernamen
  Const Zeile1 As Long = 16 ' 1. Zeile mit Spielpaarunge
  Const Zeile2 As Long = 30 ' letzte Zeile mit Spielpaarunge
  Const Spalte1 As Long = 2 ' 1. Spalte mit Spieler-Nr. - Spalte B
  Const Spalte2 As Long = 5 ' 2. Spalte mit Spieler-Nr. - Spalte E
  Call passwortraus
  For Each wks In ActiveWorkbook.Worksheets
    With wks
    Select Case .Name
      Case "Datenblatt", "TabXYZ" 'Liste ggf. um weitere Tabellennamen ergänzen ohne  _
Spieltabellen
        'do nothing
      Case Else
       'Anzahl Spieler in Gruppe
       Set Bereich = .Range(RangeSpielerNamen)
       AnzahlSpieler = 0
       For Zeile = 1 To Bereich.Rows.Count
          If Bereich.Cells(Zeile, 1) <> "" Then
            AnzahlSpieler = AnzahlSpieler + 1
          End If
       Next Zeile
       'Lock-Status für Ergebniseingabe in den Spielpaarungen an Anzahl Spieler anpassen
       For Zeile = Zeile1 To Zeile2
          If .Cells(Zeile, Spalte1) >= 1 And .Cells(Zeile, Spalte1) <= AnzahlSpieler _
            And .Cells(Zeile, Spalte2) >= 1 And .Cells(Zeile, Spalte2) <= AnzahlSpieler Then
            .Cells(Zeile, 6).Locked = False
            .Cells(Zeile, 8).Locked = False
          Else
            .Cells(Zeile, 6).Locked = True
            .Cells(Zeile, 8).Locked = True
          End If
       Next
    End Select
    End With
  Next wks
  Call passwortrein
End Sub



  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: Loewelutz
Geschrieben am: 04.12.2009 10:06:15

Hallo Franz,

erst einmal vielen Dank für Deinen Lösungsvorschlag.

Leider bin ich mit meinen stümperhaften VBA-Kenntnissen nicht in der Lage, den Code in meiner Tabelle zum Laufen zu bekommen.

Wenn ich den Code als Makro auslöse, erhalte ich die Fehlermeldung "Fehler beim Kompilieren - Sub oder Function nicht definiert".

Wo liegt mein Fehler? Bist Du so nett und beschreibst die Anwendung?

Viele Grüße

Lutz


  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: fcs
Geschrieben am: 04.12.2009 14:11:39

Hallo Lutz,

diese Prozedur fügst du im Code-Modul des Tabellenblatts "Datenblatt" hinter den bereits vorhandenen Prozeduren ein.

Alternativ kannst du auch ein allgemeines Modul in deiner Datei anlegen und dort alle Prozeduren einfügen - auch die, die du schon unter Tabelle "Datenblatt" angelegt hast. Dann muss du aber die Makros neu zu den Buttons zuweisen.

Gruß
Franz


  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: Loewelutz
Geschrieben am: 05.12.2009 11:43:28

Hallo Franz,

Danke für Deine Erläuterungen und Deine Geduld!

Wie von Dir beschrieben habe ich Deine Prozedur hinter die anderen beiden kopiert. Leider erreiche ich allerdings nicht das gewünschte Ergebnis . Beim Auslösen des Makros erhalte ich die MS Visual Basic Fehlermeldung "400".

Vielleicht erläutere ich noch einmal ausführlich den Dateiaufbau und mein Anliegen:

Zur Fehleranalyse habe ich die aktuelle Dateiversion beigefügt. Wegen der Größenbegrenzung beim Upload auf 300 kB musste ich einige Mappen löschen. Tatsächlich besteht die Datei aus dem Tabellenblatt „Dateneingabe“ 2 x 4 Tabellenblätter für die Vorrunde und 2 Tabellenblätter für die Finalrunde.

https://www.herber.de/bbs/user/66383.xls

Mit der Eingabe im Blatt „Dateneingabe“ erfolgt die Verteilung der Namen der Teilnehmer in die Vorrundenblätter. Dort werden die Namen in die obere Hälfte (Platzierungstabelle) und in die untere Hälfte (Ergebniseingabe) weiter gegeben.

Die Gruppenanzahl und Größe richtet sich nach der Anzahl der Teilnehmer. Bei weniger als 6 Teilnehmern je Gruppe fallen einige der vorgegebenen Spielpaarungen aus. In diesen Fällen sollen diese Ergebniszellen für die Anwender gesperrt sein. Eingaben sollen nur für die Ergebnisse der tatsächlich angesetzten Spiele möglich sein. Siehe z. B. Blatt "Mä 1" - bei 3 Teilnehmern gibt es auch nur 3 Spiele. Die restlichen Ergebniszellen sollten in diesem Fall für Eingaben gesperrt sein.

Die Makros zum Ein- und Ausschalten des Passwortes für alle Mappen sind nur für die „Admins“ gedacht, falls grundsätzliche Änderungen am Dateiaufbau nötig sind. Die Sperrung bzw. Freigabe der Zellen für die Ergebniseingabe sollte aber für die Anwender ohne Passworteingabe möglich sein.

Leider ist mir eine Anpassung Deines Lösungsvorschlags auf die gewünschten Anforderungen nicht möglich. Dürfte ich deshalb weiter auf Deine Unterstützung hoffen?

Vielen Dank und herzliche Grüße

Lutz


  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: fcs
Geschrieben am: 05.12.2009 19:04:47

Hallo Lutz,

das Eingabeblatt hatte bei dir jetzt einen anderen Namen. Dadurch kam es zu dem Fehler weil in der Zeile

      Case "Datenblatt", "TabXYZ" 'Liste ggf. um weitere Tabellennamen ergänzen ohne  _
Spieltabellen
Der Tabellenblattname nicht stimmte.
Den Blattschutz muss man ein- und ausschalten, wenn man den Schutz der Zellen ändern will. Es wird jetzt in der Routine das Passwort direkt verwendet - ohne den Umweg über das Eingabefenster.

Gruß
Franz
https://www.herber.de/bbs/user/66387.xls


  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: Loewelutz
Geschrieben am: 06.12.2009 19:33:18

Hallo Franz,

was soll ich sagen? Optimal gelöst - genau wie ich es mir im besten Fall vorgestellt hatte.

... und als Zugabe hast Du an die Verlinkung vom Dateneingabe mit den einzelnen Gruppenblättern gedacht - danke vielmals für Deine Hilfe!

Verbeugung und viele Grüße ...

Lutz


  

Betrifft: AW: Sperrung von Zellen per Makro steuern von: Loewelutz
Geschrieben am: 07.12.2009 15:03:56

Hallo Franz,

zunächst noch einmal vielen Dank für Dein Makro, das grundsätzlich einwandfrei läuft. Allerdings bin ich beim Austesten auf Probleme gestoßen, daher habe ich eine Nachfrage zur Handhabung.

Zum einen hatte ich manchmal nach der Eingabe im Tabellenblatt "Dateneingabe" unerwartete Verzerrungen in der Ansicht, die nach dem Wechseln in ein anderes Tabellenblatt verschwanden.

Bei der Fehlersuche bin ich darauf gekommen, dass dieser Fehler offensichtlich an der Position der Schreibmarke in den nachgeordneten Tabellen zum Zeitpunkt der Eingabe liegt. Befindet sich der Cusor in einem anderen Tabellenblatt in einer nicht frei gegebenen Zelle, wird die Bildschirmansicht verzerrt dargestellt.

Der zweite Fehler trat beim Nachtragen von Teilnehmern auf. Mit dem erneuten Auslösen des Makros zum Freischalten der Eingabefelder wurden die bereits eingetragenen Ergebnisse im betroffenen Tabellenblatt gelöscht und die Bildschirmansicht ebenfalls verzerrt.

Offensichtlich muss bei der Dateneingabe streng die Reihenfolge beachtet werden.

1. Der Cusor in allen Mappen zu Beginn auf Zelle F16
2. Zunächst alle Teilnehmer in allen Gruppen eintragen
3. Erst zuletzt das Makro "Spielplan-Eingabefelder freischalten" auslösen

Da das Programm von vielen Anwendern mit geringen Excel-Kenntnissen verwendet wird, möchte ich Fehlerquellen so gering wie möglich halten. Gibt es aus deiner Sicht weitere Bedingungen, die bei der Anwendung zu beachten sind?

Viele Grüße

Lutz


Beiträge aus den Excel-Beispielen zum Thema "Sperrung von Zellen per Makro steuern"