Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1076to1080
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
Inhaltsverzeichnis

nur eine Tabelle anwählen, falls ...

nur eine Tabelle anwählen, falls ...
02.06.2009 09:34:43
Peter
Guten Tag
Gelegentlich wähle ich in einer Arbeitsmappe gleichzeitig mehrere Tabellen an, wenn ich beispielsweise bei allen die gleichen Änderungen durchführen will.
Nun habe ich mir eine Routine geschrieben, die auf allen Tabellen ein Passwort setzt oder entfernt.
Diese Routine läuft aber nur, wenn lediglich eine Tabelle angewählt ist.
Wie heisst der VBA-Befehl (Codezeile), der bewirkt, dass nur die aktive der ausgewählten Tabellen "ausgewählt" bleibt?
Danke für eine Antwort.
Gruss, Peter

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

Betreff
Datum
Anwender
Anzeige
AW: nur eine Tabelle anwählen, falls ...
02.06.2009 09:39:25
Hajo_Zi
Hallo Peter,
vielleicht ist Dein Code auch falsch. Den sehen nur wenuge.

Option Explicit
Dim WsTabelle As Worksheet
' Farbpalette angepast für helles Grau
Private Sub Aufheben()
For Each WsTabelle In Sheets
WsTabelle.Unprotect ("Passwort")
Next WsTabelle
End Sub
Private Sub Schutz()
For Each WsTabelle In Sheets
WsTabelle.Protect ("Passwort")
Next WsTabelle
End Sub



AW: nur eine Tabelle anwählen, falls ...
02.06.2009 10:47:58
Peter
Hallo Hajo
Danke für die Antwort.
Nein, mein Code ist (zumindest diesmal) nicht falsch.
Ich habe nun die Lösung gefunden:
ActiveSheet.Select
Danke und Gruss, Peter
Anzeige
AW: nur eine Tabelle anwählen, falls ...
02.06.2009 10:54:54
Hajo_Zi
Hallo Peter,
das kann nicht die Lösung sein.
Excel ist ein vielseitiges Programm und man kann viele Probleme damit lösen. Jede positive Seite hat aber auch negative Aspekte - einer davon ist im Makrorecorder enthalten.
Die Bücher, die es zu Excel VBA gibt, erklären viele Funktionen, aber ich habe bisher nur in einem gelesen, dass der vom Makrorecorder aufgezeichnete Code bereinigt werden sollte.
Der Makrorecorder zeichnet alle Aktionen auf, u. a. auch das Auswählen einer Zelle oder eines eingebetteten Objektes (Bild, Diagramm, Zeichnungsobjekt usw.) dabei wird generell Select und Activate aufgezeichnet. Diese Befehle sind in VBA zu 99,9% nicht notwendig. Sie lassen den Bildschirm flackern und senken die Geschwindigkeit bei der Ausführung des Codes. Man sollte also schon von Beginn an bei der Programmierung darauf achten, solche Befehle zu vermeiden. Meine Erfahrung mit dem Vorsatz: Das mache ich später ist, man schreibt das Programm später meist komplett neu. Also kostest es nicht nur Rechnerzeit sondern auch Deine Zeit und ist Dir Deine Zeit so wenig Wert?
Zum Vergleich mit und ohne Select schau Dir auch mal diese Beispielarbeitsmappe an: mit und ohne select Auf meiner Homepage sind alle meine Beispiele ohne Select. Da kann man sich also einige Lösungsansätze zu diesem Thema ansehen.
Gruß Hajo
Anzeige
AW: nur eine Tabelle anwählen, falls ...
02.06.2009 14:18:29
Peter
Hallo Hajo
Danke für die ausführliche Antwort.
In aller Regel arbeite ich nicht mit SELECT.
Hier ist mir allerdings nicht klar, wie ich das SELECT umgehen kann.
Wenn is mit Sh.Select arbeite, dann wir eine allfällige Mehrfachselektion von Arbeitsblättern aufgehoben und nur mit dem aktivierten weitergearbeitet. Wenn ich mit Sh.Activate arbeite, bleibt es bei der Mehrfachselektion und der aufgerufene Code wird beim Ablaufen unterbrochen.
Was wäre nun hier eine eine Alternative zu Sh.Select?
Gruss, Peter

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Target.Address(False, False)
Dim rngS As Range, lngS As Long, rngT As Range
Case "A1:F1"    'wird in einer Tabelle dieser Bereich angewählt, wird die ganze Tabelle entschü _
tzt
'resp. der unten aufgeführte Code (hier Call Aufheben) ausgeführt
Sh.Select
Set rngS = Range("A1:F1") ' hier Bereich angeben - dürfen sich nicht überschneiden!
lngS = rngS.Count
If Target.Count  lngS Then Exit Sub
Set rngT = Intersect(Target, rngS)
If rngT Is Nothing Then Exit Sub
If rngT.Count  lngS Then Exit Sub
Call Aufheben
Case "A2:F2"     'wird in einer Tabelle dieser Bereich angewählt, wird die ganze Tabelle geschü _
tzt
'resp. der unten aufgeführte Code (hier Call DateiSchützen) ausgeführt
Sh.Select
Set rngS = Range("A2:F2") ' hier Bereich angeben - dürfen sich nicht überschneiden!
lngS = rngS.Count
If Target.Count  lngS Then Exit Sub
Set rngT = Intersect(Target, rngS)
If rngT Is Nothing Then Exit Sub
If rngT.Count  lngS Then Exit Sub
Call DateiSchützen
End Select
End Sub


Sub Aufheben()
Dim Wks As Worksheet
For Each Wks In ThisWorkbook.Worksheets
Select Case Wks.Name
Case "abc"
'nichts machen
Case Else
Wks.Protect Password:=123
End Select
Wks.Unprotect Password:=123
Next
End Sub


Sub DateiSchützen()
Dim Wks As Worksheet
Call Aufheben
For Each Wks In ThisWorkbook.Worksheets
Select Case Wks.Name
Case "abc"
Case Else
Wks.Protect DrawingObjects:=True, _
contents:=True, _
UserInterfaceOnly:=True, _
Scenarios:=True, Password:=123
Wks.EnableSelection = xlNoRestrictions
End Select
Next
End Sub


Anzeige
AW: nur eine Tabelle anwählen, falls ...
03.06.2009 08:23:08
Peter
Guten Tag
Gestern habe ich auf die Antwort von Hajo nochmals reagiert. Doch wohl ohne "Frage noch offen" und wenn ich auf "Forum-Liste" gehe, kommt der Beitrag auch nicht mehr.
Deshalb nochmals:
Ich versuche, SELECT soweit möglich zu vermeiden. Doch im untenstehenden Code ist mir nicht klar, was ich anstelle Sh.Select schreiben muss.
Was wäre nun hier eine eine Alternative zu Sh.Select?
Gruss, Peter

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Target.Address(False, False)
Dim rngS As Range, lngS As Long, rngT As Range
Case "A1:F1"    'wird in einer Tabelle dieser Bereich angewählt, wird die ganze Tabelle entschü  _
_
tzt
'resp. der unten aufgeführte Code (hier Call Aufheben) ausgeführt
Sh.Select
Set rngS = Range("A1:F1") ' hier Bereich angeben - dürfen sich nicht überschneiden!
lngS = rngS.Count
If Target.Count  lngS Then Exit Sub
Set rngT = Intersect(Target, rngS)
If rngT Is Nothing Then Exit Sub
If rngT.Count  lngS Then Exit Sub
Call Aufheben
Case "A2:F2"     'wird in einer Tabelle dieser Bereich angewählt, wird die ganze Tabelle geschü  _
_
tzt
'resp. der unten aufgeführte Code (hier Call DateiSchützen) ausgeführt
Sh.Select
Set rngS = Range("A2:F2") ' hier Bereich angeben - dürfen sich nicht überschneiden!
lngS = rngS.Count
If Target.Count  lngS Then Exit Sub
Set rngT = Intersect(Target, rngS)
If rngT Is Nothing Then Exit Sub
If rngT.Count  lngS Then Exit Sub
Call DateiSchützen
End Select
End Sub


Sub Aufheben()
Dim Wks As Worksheet
For Each Wks In ThisWorkbook.Worksheets
Select Case Wks.Name
Case "abc"
'nichts machen
Case Else
Wks.Protect Password:=123
End Select
Wks.Unprotect Password:=123
Next
End Sub


Sub DateiSchützen()
Dim Wks As Worksheet
Call Aufheben
For Each Wks In ThisWorkbook.Worksheets
Select Case Wks.Name
Case "abc"
Case Else
Wks.Protect DrawingObjects:=True, _
contents:=True, _
UserInterfaceOnly:=True, _
Scenarios:=True, Password:=123
Wks.EnableSelection = xlNoRestrictions
End Select
Next
End Sub


Anzeige
AW: nur eine Tabelle anwählen, falls ...
03.06.2009 08:28:19
Hajo_Zi
Hallo Peter,
gestern ist de Server abgestürzt und amit auch ein Teil der Beiträge fort. Wie auch meine Antwort.
Bisher ging es nicht um die Reaktion auf die Eingabe. Wenn man mehrere Tabele auswählt sollte man vor einer Eingabe erstmal nur eine Tabelle selektieren, damit die Aktion nicht in jede Tabelle ausgeführt wird.
Gruß Hajo
AW: nur eine Tabelle anwählen, falls ...
03.06.2009 09:24:00
Peter
Hallo Hajo
Vielen Dank für deine Antwort.
Mir ist grundsätzlich klar, dass man nur eine Tabelle aktiviert haben sollte. Vielfach denke ich daran, doch ab und zu hat mich erst die Fehlermeldung daran erinnert, das noch mehrere Tabellen angewählt sind. Daher - habe ich mir gedacht - wäre das einfachste, dass die Sicherstellung durch den Code sichergestellt wird, dass nur eine Tabelle -und zwar diejenige, die zuletzt auch aktiv war - aktiviert bleibt.
Das wird nun durch Sh.Select
sichergestellt. Im Bestreben, Select möglichst zu vermeiden, hätte mich interessiert, ob es eine andere Möglichkeit gibt, die Mehrfachselektion von Tabellen rückgängig zu machen.
Gruss, Peter
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige