Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen eingügen verhindern

Forumthread: Zeilen eingügen verhindern

Zeilen eingügen verhindern
17.06.2008 16:15:05
Bertram
Hallo zusammen,
ich verwende folgenden Code um im Worksheet 'Daten' das Einfügen von ganzen Zeilen zu verhindern.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Daten" Then
Application.CommandBars("Worksheet Menu Bar").Controls(4).Controls(2).Enabled = False
Application.CommandBars("Row").Controls(5).Enabled = False
Else
Application.CommandBars("Worksheet Menu Bar").Controls(4).Controls(2).Enabled = True
Application.CommandBars("Row").Controls(5).Enabled = True
End If
End Sub


Das funktioniert auch gut soweit. Habe noch nicht viel mit Menüleisten und dergleichen programmiert, daher meine Frage:
Wenn nun (bei mir in Englisch) der Menüpunkt 'Insert' nicht Index 2 der Menüleiste und 'Rows' nicht der Index 4 im Popup 'Insert' ist, wird ja der falsche Befehl gesperrt. Kann ich den entsprechenden Eintag auch irgendwie ansprechen, dass ich sicher sein kann, dass er es ist?
Selbiges gilt natürlich auch für das Kontextmenü ("Row").
Gruß
Bertram

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachtrag
17.06.2008 16:43:02
Bertram
Hallo,
habe festgestellt, dass ich den Eintrag in Commandbars("Cell") und in CommandBar("Worsheet Menu Bar").Controls(4).Controls(1) auch sperren müßte. Dann kann ich aber nur noch komplette Spalten einfügen.
Es sollte aber weiterhin möglich sein einzelne Zelle einzufügen. Also quasi alles ist erlaubt, AUSSER komplette Zeilen einfügen.
Geht das? Falls ja, wie?
Gruß
Bertram

Anzeige
AW: etwas andere Lösung
17.06.2008 23:22:00
Daniel
Hallo
das rummanipulieren an Menüleisten halte ich nicht für günstig, die Gefahr dabei ist, daß das Makro irgendwie abstürzt und dem Anwender dann auch beim Bearbeiten von anderen Dateien wichtige Funktionen fehlen, das muss dann schon sehr sauber mit ner ordentlichen Fehlerbehandlung programmiert sein.
Es gibt auch eine andere Mögichkeit, das Einfügen von ganzen Zeilen zu verhindern:

Private Sub Worksheet_Change(ByVal Target As Range)
Static Zeilen As Long
Select Case Target.Columns.Count
Case Columns.Count
If ActiveSheet.UsedRange.Rows.Count > Zeilen Then
MsgBox "Zeilen einfügen verboten"
Application.EnableEvents = False
Target.Delete
Application.EnableEvents = True
End If
Zeilen = ActiveSheet.UsedRange.Rows.Count
Case Else
Zeilen = ActiveSheet.UsedRange.Rows.Count
End Select
End Sub


Im Prinzip wird beim Change-Event geprüft, ob
a) eine ganze Zeile verändert wurde
b) sich die Anzahl der verwendeten Zeilen vergrössert hat
falls beides eintritt, werden die zuletzt geänderten (dh. eingefügten) Zeilen wieder gelöscht.
Gruß. Daniel

Anzeige
AW: etwas andere Lösung
18.06.2008 08:32:15
Bertram
Hallo Daniel,
danke, aber hast du das mal getestet? Ich habe es mal mit dem Worksheet_SelectionChange-Ereignis versucht, dann kommt zumindest die MsgBox, aber das Einfügen einer Zeile ist trotzdem möglich. Die Lösung mit ner MsgBox hatte ich zuerst auch, aber es ist ja für User ein Leichtes diese Meldung zu bestätigen und zu ignorieren.
Gruß
Bertram

Anzeige
AW: etwas andere Lösung
18.06.2008 10:59:00
Ramses
Hallo
Warum schützt du das Arbeitsblatt nicht einfach ?
Gruss Rainer

AW: etwas andere Lösung
18.06.2008 11:35:00
Bertram
Hallo Rainer,
wie gesagt, der User soll alles machen dürfen, nur nicht komplette Zeilen einfügen. Hätte noch erwähnen sollen, dass es mir darum geht, das ein bestimmter Bereich keine Leerzellen enthalten darf. Habe es jetzt folgendermaßen gemacht, da es für meine Bedürfnisse reicht.
Eine Variable: Public intMatRows As Integer
Im Workbook_Opben-Ereignis:
intMatRows = Sheets("Daten").Range("AQ1").CurrentRegion.Rows.Count
Im Tabellenblat Daten:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False
With ActiveSheet.Range("AQ1").CurrentRegion
If intMatRows > .Rows.Count Then
ActiveSheet.Columns("AQ:AR").Sort Key1:=Range("AR2"), Header:= xlYes
Else
intMatRows = .Rows.Count
End If
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Nachteil: Die Undo-Option steht nicht mehr zur Verfügung.
Gruß
Bertram

Anzeige
AW: etwas andere Lösung
18.06.2008 23:06:00
Daniel
HI
hab ich schon getestet.
ne ganze Zeile lässt sich zwar einfügen, wird aber per Makro nach der MSG-Boxmeldung gleich wieder gelöscht.
das sollte doch deinen Anforderungen genügen.
Gruß, Daniel

OFFEN
17.06.2008 16:44:10
Bertram
So kann man seinen eigenen Thread auch füllen:-)
;
Anzeige
Anzeige

Infobox / Tutorial

Zeilen einfügen verhindern in Excel


Schritt-für-Schritt-Anleitung

Um das Einfügen von kompletten Zeilen in Excel zu verhindern, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“.
    • Wähle „Einfügen“ > „Modul“.
  3. Kopiere den folgenden Code in das Modul:

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
       If Sh.Name = "Daten" Then
           Application.CommandBars("Worksheet Menu Bar").Controls(4).Controls(2).Enabled = False
           Application.CommandBars("Row").Controls(5).Enabled = False
       Else
           Application.CommandBars("Worksheet Menu Bar").Controls(4).Controls(2).Enabled = True
           Application.CommandBars("Row").Controls(5).Enabled = True
       End If
    End Sub
  4. Speichere die Datei als „Excel-Makro-fähige Arbeitsmappe (*.xlsm)“.

  5. Teste den Code, indem du zum Blatt „Daten“ wechselst. Du solltest feststellen, dass die Option zum Einfügen von Zeilen deaktiviert ist.


Häufige Fehler und Lösungen

  • Problem: Der Menüpunkt 'Insert' ist nicht der richtige Index.

    • Lösung: Stelle sicher, dass du die richtigen Indizes für deine Excel-Sprache verwendest. Überprüfe die Menüstruktur in deiner Version, um die genauen Indizes zu finden.
  • Problem: Die MsgBox erscheint, aber die Zeile wird trotzdem eingefügt.

    • Lösung: Stelle sicher, dass du das Worksheet_Change-Ereignis korrekt implementierst. Siehe den folgenden Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
       Static Zeilen As Long
       Select Case Target.Columns.Count
       Case Columns.Count
           If ActiveSheet.UsedRange.Rows.Count > Zeilen Then
               MsgBox "Zeilen einfügen verboten"
               Application.EnableEvents = False
               Target.Delete
               Application.EnableEvents = True
           End If
           Zeilen = ActiveSheet.UsedRange.Rows.Count
       Case Else
           Zeilen = ActiveSheet.UsedRange.Rows.Count
       End Select
    End Sub

Alternative Methoden

Eine weitere Möglichkeit, das Einfügen von Zeilen zu verhindern, ist, das Arbeitsblatt zu schützen. Dies ermöglicht dir, bestimmte Funktionen zu deaktivieren, während andere aktiv bleiben. Hier ist, wie du das machen kannst:

  1. Gehe zu „Überprüfen“ in der Menüleiste.
  2. Klicke auf „Blatt schützen“.
  3. Wähle die Optionen, die du erlauben möchtest, und stelle sicher, dass „Zeilen einfügen“ nicht aktiviert ist.

Praktische Beispiele

Ein Beispiel für einen praktischen Einsatz ist, wenn du eine Excel-Liste führst, die keine leeren Zeilen enthalten darf. Du kannst eine Variable im VBA-Code verwenden, um die Anzahl der verwendeten Zeilen zu verfolgen:

Public intMatRows As Integer

Private Sub Workbook_Open()
    intMatRows = Sheets("Daten").Range("AQ1").CurrentRegion.Rows.Count
End Sub

Wenn die Anzahl der Zeilen sich ändert, kannst du die Daten automatisch sortieren oder anpassen, ohne dass der Benutzer Zeilen einfügt.


Tipps für Profis

  • Verwende Fehlerbehandlung: Stelle sicher, dass dein Code robust ist, um unerwartete Fehler zu vermeiden. Ein Beispiel für eine einfache Fehlerbehandlung:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    Fehlerbehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Nutze Application.EnableEvents: Dies verhindert, dass dein Code in eine Endlosschleife gerät, wenn du Zellen änderst.


FAQ: Häufige Fragen

1. Kann ich das Einfügen von Zeilen nur für bestimmte Benutzer verhindern? Ja, du kannst spezifische Berechtigungen einstellen, wenn du das Arbeitsblatt schützt.

2. Was passiert mit der Undo-Funktion, wenn ich Zeilen lösche? Wenn du Zeilen per VBA löscht, wird die Undo-Funktion in der Regel deaktiviert. Dies ist ein bekannter Nachteil von VBA-Änderungen.

3. Wie kann ich den Code anpassen, um nur bestimmte Zeilen zu schützen? Du kannst die Logik im Worksheet_Change-Event anpassen, um spezifische Bedingungen zu definieren, unter denen das Einfügen von Zeilen blockiert wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige