Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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

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:-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige