Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
360to364
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
360to364
360to364
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: Registerlasche

VBA: Registerlasche
10.01.2004 08:55:45
Ernst Dunkel
Hallo Forum
Kann man mittels VBA auch die Registerlaschen vor Namensänderung schützen?
Für eine Antwort danke ich.
mfg
Ernst Dunkel

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

Betreff
Datum
Anwender
Anzeige
AW: VBA: Registerlasche
10.01.2004 09:12:22
Nepumuk
Hallo Ernst,
die Arbeitsmappe schützen.
Gruß
Nepumuk
AW: VBA: Registerlasche
10.01.2004 09:12:39
andre
hallo ernst,
im prinzip so:
in DieseArbeitsmappe

Private Sub Workbook_BeforeClose(Cancel As Boolean)
NameBeimSchliessen
End Sub


Private Sub Workbook_Open()
NameBeimOeffnen
End Sub

in Modul
Public a(), i%
Sub NameBeimOeffnen()
'einlesen aller blattnamen
ReDim a(1 To Sheets.Count)
i = 0
Application.ScreenUpdating = False
For Each namen In Sheets()
i = i + 1
Sheets(i).Activate
a(i) = ActiveSheet.Name
Next
Application.ScreenUpdating = True
End Sub

Sub NameBeimSchliessen()
'rueckschreiben der blattnamen vom oeffnen
'achtung - funktioniert nur, wenn reihenfolge nicht
'geaendert und kein blatt geloescht wurde!
Dim j%
For j = 1 To i
Application.ScreenUpdating = False
Sheets(j).Activate
ActiveSheet.Name = a(j)
Next
Application.ScreenUpdating = True
ActiveWorkbook.Save
End Sub

Anzeige
AW: VBA: Registerlasche
10.01.2004 09:36:21
andre
hallo ernst,
der code für's modul noch mal kürzer, hatte oben einen klemmer mit dem namen ...
der code in diesearbeitsmappe bleibt wie oben

Public a(), i%

Sub NameBeimOeffnen()
'einlesen aller blattnamen
ReDim a(1 To Sheets.Count)
i = 0
For Each namen In Sheets()
i = i + 1
a(i) = namen.Name
Next
End Sub


Sub NameBeimSchliessen()
'rueckschreiben der blattnamen vom oeffnen
'achtung - funktioniert nur, wenn reihenfolge nicht
'geaendert und kein blatt geloescht wurde!
i = 0
For Each namen In Sheets()
i = i + 1
namen.Name = a(i)
Next
ActiveWorkbook.Save
End Sub

gruss andre
Anzeige
Ergänzung: Registerlasche
10.01.2004 09:59:59
Ernst Dunkel
Hallo Andre
Vielen Dank für den Code. Wie müsste der Code aussehen, wenn die ersten vier Blätter nicht geändert werden, aber ab dem 5 Blatt die Blätter gelöscht oder geändert werden dürfen?
Kann man auch die Reihenfolge der ersten 4 Blätter fixieren d.h., die Registerlaschen können nicht verschoben werden.
mfg
Ernst Dunkel
AW: Ergänzung: Registerlasche
10.01.2004 10:12:17
andre
hallo ernst,
gehen tut's auch, aber wie der bisherige code wird nur beim schliessen alles wieder in ordnung gebracht. wenn das ok ist melde dich noch mal, dann schreib ichs.
mit dem löschen verhindern wird'ss meines wissens nur wie nepomuk geschrieben hat mit mappe schützen, aber da bräuchtest du den ganzen anderen code nicht ...
die frage ist aber auch, was auf den ersten blättern passieren soll. wenn da der user nichts zu suchen hat blende sie doch einfach aus?
gruss andre
Anzeige
AW: Ergänzung: Registerlasche
10.01.2004 10:45:46
Ernst Dunkel
Hallo Andre
Recht herzlichen Dank, dass Du dich für mich so ins Zeug legst.
Ich muss Dir noch ein paar Informationen geben.
1. Die ersten vier Blätter sind Eingabedaten (1. Titels., 2. Klima, 3. U-Werte und 4. Sammelblatt) die der Benützer sehen kann, jedoch nicht verschieben soll oder die Blattbezeichnung abändern darf. Der Benützer füllt auch die leeren Zellen in diesen Blättern aus.
(1a. Die Blätter sind natürlich alle geschützt, aber der Blattschutz unterstützt ja nicht das ändern der Blattbezeichnung (Registerbez.)!)
2. Ab dem 5 Blatt kommen die Raumblätter (bis .....), die werden durch ein Button eingefügt (5 Blatt, dann neues Blatt, 5 Blatt wird ausgeblendet, u.s.w.) welche dann ausgefüllt werden können. Ich habe die Raumblätter so gesteuert, dass immer nur das Aktive sichtbar ist.
Ich hoffe, dass Dir diese Angaben genügen.
Anzeige
AW: Ergänzung: Registerlasche
10.01.2004 11:02:40
andre
hallo ernst,
da ist noch 'ne klitzekleine schwierigkeit. wenn der user blätter verschiebt und umbenennt, dann kann ich mit meinem makro auch nicht viel machen. wenn die änderung nur ein blatt betrifft, dann mag's noch gehen, aber bei mehreren blättern nicht mehr. da muss dann z.b. auf dem blatt irgendwo der name stehen ...
wenn du die blätter mit einem button einfügst, dann kannst du in diesem code doch den arbeitsmappenschutz kurz aufheben, blatt anlegen / löschen, und schutz wieder setzen.
das wäre doch dann das einfachste. den code schützt du dann natürlich auch.
gruss andre
Anzeige
AW: Ergänzung: Registerlasche
10.01.2004 11:24:46
Ernst Dunkel
Hallo Andre
Das mit dem Verschieben muss nicht sein, da die Blätter mit den Blattnamen (2. Klima, etc.) angesprochen werden. Aber was passiert, wenn der Blattname der ersten 4 Blättere geändert wird, dann findet der VBA-Befel das Blatt nicht.
Die anderen Blätter (Raumblätter) erhalten durch meine Steuerung automtisch die Blattbezeichnung aus einer Zelle des aktiven Blattes, dort spielt es keine Rolle, ich sortiere die Blätter auch ab den 5 Blatt automatisch mittels einem Button.
Kommst Du so weiter?
AW: Ergänzung: Registerlasche
10.01.2004 14:03:57
andre
hallo ernst,
du machst ja arbeit ...
'************************************************************
'in diesearbeitsmappe:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
NameBeimSchliessen
End Sub


Private Sub Workbook_Open()
NameBeimOeffnen
End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
NameBeimWechseln
End Sub


Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
NameBeimWechseln
End Sub


Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
NameBeimWechseln
End Sub

'************************************************************
'in ein modul:
Option Explicit
Public a(), i%, wieviele%, noch%
Sub NameBeimOeffnen()
'
'programmiert von andre schau am 11.01.04
'einschränkung: von den ersten 4 blättern darf keines gelöscht werden
'die blatteihenfolge ergibt ansonsten sich aus der reihenfolge beim öffnen
'
Dim j%, namen
wieviele = Sheets.Count
'die nächste bedingung kommt wegen der gewünschten begrenzung auf die
'erste 4 blätter und findet sich noch öfter im code
If wieviele > 4 Then wieviele = 4
ReDim a(1 To wieviele, 1 To 3)
i = 0
For Each namen In Sheets()
i = i + 1
If i > 4 Then Exit Sub 'wieder die 4
a(i, 1) = namen.Name
a(i, 2) = namen.Index
'item feststellen - wird benötigt, da sheets(1) sich auf die blattliste der
'ansicht bezieht und nicht auf die reihenfolge im vbproject
For j = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents.Item(j).Type = 100 And _
Left(ThisWorkbook.VBProject.VBComponents.Item(j).Name, 3) = "Tab" Then
If Sheets(i).Name = ThisWorkbook.VBProject.VBComponents.Item(j).Properties.Item("Name") Then
a(i, 3) = ThisWorkbook.VBProject.VBComponents.Item(j).Name
End If
End If
Next
Next
End Sub

Sub NameBeimSchliessen()
Dim namen
i = 1
If Sheets(1).Name <> a(1, 1) Then
Sheets(a(1, 1)).Move before:=Sheets(1)
End If
If UBound(a()) > 1 Then
For i = 2 To UBound(a())
Sheets(a(i, 1)).Move after:=Sheets(i - 1)
Next
End If
ActiveWorkbook.Save
End Sub

Sub NameBeimWechseln()
Dim k%, j%
'dieses if verhindert die ausführung dieses sub beim anlegen
'oder löschen neuer blätter
If Sheets.Count <> wieviele Then
noch = noch + 1
If noch = 1 Then
noch = 0
wieviele = Sheets.Count
End If
Exit Sub
End If
'hier wird beim aktivieren oder deaktivieren des blattes oder
'dem deaktivieren der mappe der alte blattname gesetzt
For j = 1 To ThisWorkbook.VBProject.VBComponents.Count
If ThisWorkbook.VBProject.VBComponents.Item(j).Type = 100 And _
Left(ThisWorkbook.VBProject.VBComponents.Item(j).Name, 3) = "Tab" Then
For k = 1 To UBound(a())
If a(k, 3) = ThisWorkbook.VBProject.VBComponents.Item(j).Name Then
ThisWorkbook.VBProject.VBComponents.Item(j).Properties.Item("Name") = a(k, 1)
End If
Next
End If
Next
End Sub

'************************************************************
Beispielmappe:
https://www.herber.de/bbs/user/2864.xls
gruss andre
Anzeige
AW: Ergänzung: Registerlasche
10.01.2004 14:53:15
Ernst Dunkel
Hallo Andre
Recht herzlichen Dank für Deine riesige Arbeit. Ich hoffe, dass ich Dir nicht den halben Tag weggenommen habe, ansonsten ich ein schlechtes Gewissen hätte.
Um Deine Code umzusetzen benötige ich einige Zeit, werde mich melden, wenn alles klappt.
Mit freundlichen Grüssen
Ernst Dunkel aus der Schweiz
AW: Ergänzung: Registerlasche
11.01.2004 17:55:13
Ernst Dunkel
Hallo Andre
Könntest Du mir den Aufbau als Beispiel Tabelle mailen?
Gruss Ernst Dunkel
AW: Ergänzung: Registerlasche
11.01.2004 19:34:44
andre
hallo ernst,
hab ich doch schon gemacht - schau mal ans ende von dem langen beitrag.
gruss andre
AW: Ergänzung: Registerlasche
12.01.2004 00:15:30
Ernst Dunkel
Toll Andre, Danke
mfg
Ernst Dunkel
AW: danke für die rückmeldung - o.t.
12.01.2004 17:54:26
andre

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige