1.7k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo coros, Dein Programm zum Einfärben von Zeilen bei Anwählen von Zellen ist genial, eine Frage dazu, was muss ich ändern, dass Dein Programm nur im ersten Tabellenblatt läuft? Und somit in anderen Tabellenblättern keine Fehlermeldungen generiert?

Danke Comback

6 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Nur wenige sehen das Makro auf Deinem Rechner.
If ActiveSheet.Name = "Tabelle1" Then

End If

Gruß Hajo
0 Punkte
Beantwortet von
Hallo Hajo Zi, hier ist das Makro:

Ich brauch das wie gesagt nur für das erste Tabellenblatt - dort funktioniert das Makro perfekt. In den anderen Tabellenblättern sind Ergebnissgrafiken und da kommt dann die ganze Zeit ein Laufzeitfehler 91:




Option Explicit
' Zelle A bis AZ markieren falls die Aktive Zelle in diesem Bereich
' alte Farbe wieder zurückstellen bei wechsel und schliessen
' farbveränderungen im markiertem Bereich werden nicht zurück gestellt, außer Rot

Private Sub Workbook_Activate()
On Error GoTo neu
If Application.CommandBars("Symbolleiste xyz").Visible = False Then
Application.CommandBars("Symbolleiste xyz").Visible = True
End If
Exit Sub
neu:
Workbook_Open
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Zurück
End Sub

Private Sub Workbook_Open()
ActiveSheet.ScrollArea = "$a$4:$i$100"
'=========================================================================================
'Mit dem nachfolgenden Code wird beim Öffnen der Datei eine Symbolleiste mit dem Namen
'"Symbolleiste xyz" erstellt. Sie in diesem Beispiel zwei Funktionen: Zeilenmarkierung
'ein- und usschalten und eine Taste ohne Funktion
'=========================================================================================
Dim cb As CommandBar
Dim CBC As CommandBarButton
Dim I%
On Error Resume Next
Set cb = Application.CommandBars.Add(Name:="Symbolleiste xyz", _
temporary:=True, Position:=msoBarTop)
On Error GoTo 0
If Application.CommandBars("Symbolleiste xyz").Visible = False Then
cb.Visible = True
'=========================================================================================
'Hier wird die Anzahl der Schaltflächen (hier also 2) eingetragen. Bei drei
'Schaltflächen müsste eine 3 eingetragen werden usw.
'=========================================================================================
For I = 1 To 2
Set CBC = cb.Controls.Add(Type:=msoControlButton)
With CBC
.Width = 50 ' Breite der Schalter
.Style = msoButtonCaption ' Text auf Schaltfläche
Select Case I
Case 1
.Caption = "Zeilenmarkierung An/Aus"
.OnAction = "Zeilenmarkierung_an_aus"
.TooltipText = "Taste drücken Zeilenmarkierung zu aktivieren oder zu deaktivieren"
Case 2
'=========================================================================================
'In .Caption = wird der Text, den die Schaltfläche anzeigen soll eingegeben
'=========================================================================================
.Caption = "Ohne Funktion"
'=========================================================================================
'In .OnAction = wird der Makroname, des Makro das ausgeführt werden soll, eingetragen.
'Hier ist es das Makro an_aus, zu finden in Modul3
'=========================================================================================
.OnAction = ""
'=========================================================================================
'In .TooltipText = wird der Text eingegeben, der erscheinen soll, wenn man die
'Schaltfläche mit der Maus berührt, also ein Kommentartext
'=========================================================================================
.TooltipText = "Hier steht ein Text"
'=========================================================================================
'Mit dieser Anweisung wird die Gruppierung (der kleine senkrechte Strich hinter der
'Schaltfläche) begonnen. Der Eintrag muss nicht geändert werden, es sei denn es soll
'keine Gruppierung erstellt werden. Dazu muss nur Text True in False geändert werden.
'=========================================================================================
.BeginGroup = True
End Select
End With
Next I
End If
'=========================================================================================
'Hier gibt man die Länge an, bis wo die Zeile markiert werden soll. In diesem Beispiel wird
'bis zur Spalte AZ markiert. Es muss aber vorher die selbe Zahl noch unter Module in das
'Modul1 dieselbe Zahl eingetragen werden.
'=========================================================================================
If ActiveCell.Column < 10 Then Auslesen


End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
I = 0
On Error Resume Next
'=========================================================================================
'Mit dieser Anweisung wird beim Beenden der Datei die Symbolleiste xyz gelöscht und das
'Makro Zurück ausgeführt
'=========================================================================================
Application.CommandBars("Symbolleiste xyz").Delete
Zurück

End Sub



Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'=========================================================================================
'Makro Zurück wird ausgeführt
'=========================================================================================
Zurück
'=========================================================================================
'Es werden nur bestimmte Zeilen markiert und zwar Zeile 1 bis Zeile 65000. Hier muss auch
'die Zahl, die unter Modul1 eingegeben wurde eingetragen werden.
'=========================================================================================
If (ActiveCell.Row >= 1 And ActiveCell.Row <= 65000) Then
If ActiveCell.Column < 10 Then Auslesen
End If
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'=========================================================================================
'Makro Zurück wird ausgeführt
'=========================================================================================
Zurück
'=========================================================================================
'Die Variable, die in dem Modul2 in dem Makro Zeilenmarkierung_an_aus deklariert wird,
'wird auf 0 gesetzt
'=========================================================================================
I = 0
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'=========================================================================================
'Makro Zurück wird ausgeführt
'=========================================================================================
Zurück
'=========================================================================================
'Es werden nur bestimmte Zeilen markiert und zwar Zeile 1 bis Zeile 65000. Hier muss auch
'die Zahl, die unter Modul1 eingegeben wurde eingetragen werden.
'=========================================================================================
If (ActiveCell.Row >= 1 And ActiveCell.Row <= 65000) Then
If ActiveCell.Column < 10 Then Auslesen
End If
On Error GoTo neu
If Application.CommandBars("Symbolleiste xyz").Visible = False Then
Application.CommandBars("Symbolleiste xyz").Visible = True
End If
Exit Sub
neu:
Workbook_Open
End Sub


Sub Zurück()
If I = 0 Then
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
dann schreibe meine erste zeile nach der Zeile Activate und die zweite vor End Sub

Gruß Hajo
0 Punkte
Beantwortet von
Hallo Hajo ,

soll ich dass das bei jedem sub machen, es gibt ja sehr viele davon in dem Makro?

lg Klemens
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
in nur in den Ereignisprozeduren.
Private Sub Workbook_Activate()
Private Sub Workbook_Open()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Ich baue keine Datei nach, die Zeit hat schon jemand investiert. Ein Link zur Datei wäre nicht schlecht.

Gruß Hajo
0 Punkte
Beantwortet von
Hallo Hajo,

herzlichen Dank für Deine schnelle Hilfe, bis jetzt läuft alles perfekt !

Es hat gereicht Deinen Befehl in

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

einzubauen.


Hier der Link zum Ausgangsmakro...


https://supportnet.de/stat/2003/6/id141034.asp


lg Klemens
...