Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
632to636
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
632to636
632to636
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

nur ein Tabellenblatt erlauben

nur ein Tabellenblatt erlauben
07.07.2005 15:27:54
Martin
Hallo
wie kann ich verhindern, dass jemand ein neues Tabellenblatt erstellt.
Damit soll erzwungen werden, dass pro Meldung immer ein neues Meldeblatt in den Ordner gestellt wird, weil andernfalls die der Zusammenzug auf eine Übersichtsmappe nicht fehelfrei funktioniert.
Also nochmals:
in der Datei nur ein Tabellenblatt mit dem folgenden Namen "Meldeblatt" erlauben.
Gruss
Martin

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nur ein Tabellenblatt erlauben
07.07.2005 15:55:10
Thomas
Hallo Martin!
Warum versuchst du es nicht mit "Arbeitsmappe schützen" ?
Thomas H.
AW: nur ein Tabellenblatt erlauben
07.07.2005 15:59:20
IngGi
Hallo Martin,
das ist mir zu deinem Problem eingefallen (beide Makros ins Klassenmodul der Arbeitsmappe):

Private Sub Workbook_SheetActivate(ByVal sh As Object)
If ThisWorkbook.Sheets.Count > 1 Then
MsgBox ("Sie haben ein neues Tabellenblatt eingefügt. " _
& "Beim Speichern der Datei werden alle Tabellenblätter mit Ausnahme des ersten gelöscht! " _
& "Verwenden Sie für eine neue Meldung bitte eine neue Datei!")
End If
End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sh As Object
If ThisWorkbook.Sheets.Count > 1 Then
For Each sh In ThisWorkbook.Sheets
If sh.Index > 1 Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next sh
End If
ThisWorkbook.Sheets(1).Name = "Meldeblatt"
End Sub

Gruß Ingolf
Anzeige
AW: nur ein Tabellenblatt erlauben
07.07.2005 16:37:41
Martin
Hallo Andi Hallo Ingolf
Stellte sich doch heraus, dass Eure beiden Makros richtig sind aber das von Ingolf die Lösung ist.
Weil Wenn eine Tabelle mittels CRTL + Maus ziehen an letzte Stelle Kopiert wird brauche ich das von Jngolf um die Tabellenblätter wieder zu entfernen und dazu noch wieder Umzutaufen in den Originalnamen.
Gruss
Martin
AW: nur ein Tabellenblatt erlauben
07.07.2005 17:08:00
UweD
HAllo
Klar eine Kopie ist eben kein NewSheet. Deshalb tritt das Ereignis nicht auf.
Aber: wenn die Sheets erst beim speichern weggelöscht werden und der User vorher die Reihenfolge ändert, löschst du dir das falsche Blatt weg.
Besser wäre das Blatt direkt mit Namen anzusprechen.
Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: nur ein Tabellenblatt erlauben
07.07.2005 21:17:57
IngGi
Hallo Martin, hallo Uwe,
Uwe hat völlig recht. Bei vertauschter Reihenfolge wird das falsche Blatt gelöscht. Ich hab daher eine weitere Variante geschrieben, in der ich die Blätter über den Namen anspreche, wie von Uwe vorgeschlagen. Gibt es nur 1 Blatt, wird dieses "Meldedaten" benannt und die Datei wird gespeichert. Gibt es mehrere Blätter und eines heißt "Meldedaten", werden die anderen Blätter gelöscht und die Datei wird gespeichert. Gibt es kein Blatt mit dem Namen "Meldedaten", wird der User aufgefordert eines der Blätter entsprechend zu benennen und die Datei wird nicht gespeichert.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sh As Object, BName As String
If ThisWorkbook.Sheets.Count > 1 Then
For Each sh In ThisWorkbook.Sheets
If sh.Name = "Meldeblatt" Then BName = "Meldeblatt"
Next sh
If BName = "Meldeblatt" Then
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Meldeblatt" Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next sh
Else
MsgBox ("Die Datei enthält mehrere Blätter. " & _
"Es kann jedoch nur ein Blatt gespeichert werden. " & _
"Um die Datei speichern zu können, müssen Sie dem zu speichernden Blatt " & _
"den Namen " & Chr$(34) & "Meldedaten" & Chr$(34) & " geben. Alle anderen Blätter " & _
"werden gelöscht. Kopieren Sie diese Blätter daher vor dem Speichern jeweils in " & _
"eine eigene Datei.")
Cancel = True
End If
Else
ThisWorkbook.Sheets(1).Name = "Meldedaten"
End If
End Sub

Gruß Ingolf
Anzeige
AW: nur ein Tabellenblatt erlauben
07.07.2005 21:54:49
Martin
Hallo Ingolf und natürlich auch hallo Uwe
Ihr beiden sprengt ja den Rahmen.
Daran hatte ich noch gar nicht gedacht.... seit ich Herber.de kenne habe ich meine Forum-Forbie völlig verloren.
Ich werde den Script morgen in der Früh gleich in der Meldeblatt Vorlage einbauen und testen, aber dazu ist diese Version vom Script nur bedingt geeignet. Es existiert noch eine Tabelle Very Hidden mit dem Nahmen "Querry", in der werden Daten mit MySQL aktualisiert und diese droht mir beim neuen Script zu verschwinden. IIm ersten Script konnte ich die Abfrage &gt1 auf &gt2 erweitern aber jetzt?
Geht da auch so etwas oder ähnlich?
If sh.Name &lt&gt "Meldeblatt" or "Querry" Then
Unendlich dankbar
Mit freundlichen Grüssen
Martin
PS der Einstieg in VBA ist wie ein Hürdenlauf für mich, aber jetzt schaffe ich bereits 50 Meter von den 100 Meter ohne Sturz. Dank Euch nochmals Danke
Anzeige
AW: nur ein Tabellenblatt erlauben
08.07.2005 10:35:04
IngGi
Hallo Martin,
du hast es fast 100%ig getroffen. Statt
If sh.Name  "Meldeblatt" Then
muß es heissen:
If sh.Name  "Meldeblatt" And sh.Name  "Querry" Then

And statt Or deshalb, weil nicht auf ist gleich, sondern auf kleiner/größer geprüft wird und beide Namen dürfen nicht sein, wenn gelöscht werden soll.
Gruß Ingolf
AW: nur ein Tabellenblatt erlauben
08.07.2005 10:54:58
Martin
Hallo Ingo
vorest nochmals vielen Dank für Deine Hilfe.
Die folgende Lösung habe ich nun eingegeben:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sh As Object, BName As String
If ThisWorkbook.Sheets.Count > 2 Then
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Meldeblatt" And sh.Name <> "Querry" Then BName = "Treffer"
Next sh
If BName = "Treffer" Then
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Meldeblatt" And sh.Name <> "Querry" Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next sh
Else
MsgBox ("Die Datei enthält mehrere Blätter. " & _
"Es kann jedoch nur ein Blatt gespeichert werden. " & _
"Um die Datei speichern zu können, müssen Sie dem zu speichernden Blatt " & _
"den Namen " & Chr$(34) & "Meldedaten" & Chr$(34) & " geben. Alle anderen Blätter " & _
"werden gelöscht. Kopieren Sie diese Blätter daher vor dem Speichern jeweils in " & _
"eine eigene Datei.")
Cancel = True
End If
Else
ThisWorkbook.Sheets(1).Name = "Meldeblatt"
ThisWorkbook.Sheets(2).Name = "Querry"
End If
End Sub

aber die Fehlermeldung wird nicht angezeigt sondern sofort gelöscht.
Muss ich die Else Anweisung verschieben?
Danke
Martin
Anzeige
AW: nur ein Tabellenblatt erlauben
08.07.2005 12:35:03
Martin
Hallo Ingolf
Alles OK, die Lösung funktioniert.
Hatte vergessen dass bei Deinem ersten Lösungsvorschlag zwei Makros eingefügt werden mussten.
Das nachfolgende Makro,


Private Sub Workbook_SheetActivate(ByVal sh As Object)
If ThisWorkbook.Sheets.Count > 2 Then
MsgBox ("Sie haben ein neues Tabellenblatt eingefügt. " _
& "Beim Speichern der Datei werden alle Tabellenblätter mit Ausnahme des ersten gelöscht! " _
& "Verwenden Sie für eine neue Meldung bitte eine neue Datei!")
End If
End Sub

hatte ich versehentlich ebenfalls entfernt als ich die erste mit der neuen Version ersetzt hatte.
Also nochmals besten Dank für Deine (Eure) Mithilfe, es funktioniert alles bestens.
Mit freundlichen Grüssen
Martin
Anzeige
AW: nur ein Tabellenblatt erlauben
09.07.2005 16:21:25
Martin
Hallo Ingolf
ist es möglich wenn der folgende Code gesetzt wird Dein VBA nicht mehr nötig ist ?
ActiveWorkbook.Protect Structure:=True
Danke
Martin
AW: nur ein Tabellenblatt erlauben
07.07.2005 15:59:43
Andi
Hi,
wenn ich Dich jetzt richtig verstanden habe, dann möchtest Du verhindern, dass jemand ein neues Tabellenblatt in Deiner Mappe erstellt, oder?
Das geht so:

Private Sub Workbook_NewSheet(ByVal Sh As Object)
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
MsgBox "Es darf kein weiteres Tabellenblatt hinzugefügt werden."
End Sub

Code in "DieseArbeitsmappe".
Schönen Gruß,
Andi
Anzeige
AW: nur ein Tabellenblatt erlauben
07.07.2005 16:01:34
UweD
Hallo
Alt + F11
unter DieseArbeitsmappe diesen Code einfügen:
erkennt, wenn ein neues Blatt eingefügt wird und löscht es sofort wieder..

Private Sub Workbook_NewSheet(ByVal Sh As Object)
On Error GoTo Fehler
Application.ScreenUpdating = False
MsgBox "Nicht erlaubt"
Application.DisplayAlerts = False
ActiveSheet.Delete
Fehler:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Gruß UweD
(Rückmeldung wäre schön)
AW: nur ein Tabellenblatt erlauben
07.07.2005 16:18:52
Martin
Hallo Thomas H., IngGi, Andy, UweD
Irgendwie sind alle Eure Lösungen richtig aber die von IngGi, Andy, und UweD haben den Richtigen VBA ansatz gebracht.
Verwende jetzt den von UweD
Danke für die grosszügige Hilfe
Anzeige
eine gute wahl :-)
07.07.2005 16:32:39
Andi
... der von Uwe is in der Tat der beste Code, weil er die Alerts im Fehlerfall wieder einschaltet.
Schönen Gruß,
Andi

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige