HERBERS Excel-Forum - das Archiv
Makro Ein/Ausschalten
Dustin

Hallo zusammen,
ich hab im Netz dieses Makro gefunden, welches genau das tut was ich gerne möchte:
Dim lastcell As Range
Dim farbe As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
On Error Resume Next
lastcell.Interior.ColorIndex = farbe
farbe = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 6
Set lastcell = Target
End Sub

Nun muss ich aber dieses Makro jedesmal, wenn ich es nutzen möchte, in das aktive Workbook rein kopieren.
Gibt es eventuell die Möglichkeit, dieses Makro in die Persönliche Arbeitsmappe zu legen und es über ein zusätzliches Makro bei Bedarf Ein oder Aus zu schalten?
Wäre Klasse wenn mir jemand helfen könnte.
Viele Grüße
Dustin

AW: Makro Ein/Ausschalten
Nepumuk

Hallo,
dir ist aber schon klar, dass wenn das Ding aktiv ist, du in der Mappe nicht mehr kopieren kannst. Außerdem bleibt die Farbe der Zelle nach dem speichern erhalten und du musst die Zelle manuell umfärben.
Das, was du willst geht nur über eine Klasse in einem Addin / deiner Makroarbeitsmappe.
Gruß
Nepumuk
AW: Makro Ein/Ausschalten
Dustin

Hallo Nepumuk,
Ich hab mich dann doch ran getraut und es in meine PERSONL.XLS eingearbeitet.
Ich habs sogar geschafft, den Aufruf über mein eigenes Makro Menü zu realisieren.
Vielen Vielen Dank für das Makro, klappt bestens.
Viele Grüße
Dustin
AW: Makro Ein/Ausschalten
David

Hallo Dustin,
wenn du dies in die personl.xls legen würdest, würdest du ja nur das Change-Ereignis DIESER Datei abfragen und nicht der Datei, in der du arbeiten möchtest. Somit wäre das Makro dann dort sinnlos.
Makros, die bei bestimmten Ereignissen einer Arbeitsmappe ablaufen sollen, können auch nur in dieser Arbeitsmappe existieren.
Eine Möglichkeit wäre evtl., diesen Code durch ein Makro in der personl.xls in die entsprechende Zieltabelle kopieren zu lassen, aber ob das der Sinn der Sache ist?
Auf jeden Fall übersteigt das MEINE VBA-Kenntnisse.
Gruß
David
AW: Makro Ein/Ausschalten
Nepumuk

Hallo,
mal ein Beispiel wie so etwas geht:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call Terminate_Class
    Call Delete_Buttons
End Sub

Private Sub Workbook_Open()
    Call Initialize_Class
    Call Create_Buttons
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit
Option Private Module

Private Const COMMANDBARBUTTON_TAG = "Schalter"

Private lobjApplication As clsApplication
Private lobjCommandbarButton(1 To 2) As CommandBarButton

Public Sub Initialize_Class()
    Set lobjApplication = New clsApplication
    Set lobjApplication.Set_Application = Application
End Sub

Public Sub Terminate_Class()
    Set lobjApplication = Nothing
End Sub

Public Sub Create_Buttons()
    Dim intIndex As Integer
    Call Delete_Buttons
    For intIndex = 1 To 2
        Set lobjCommandbarButton(intIndex) = CommandBars(intIndex). _
            Controls.Add(Type:=msoControlButton, Temporary:=True)
        With lobjCommandbarButton(intIndex)
            .Caption = "Ein"
            .OnAction = "Switch_ActiveCell_Color"
            .TooltipText = "Ein- und Ausschalten der automatischen Hervorhebung"
            .Style = msoButtonCaption
            .Tag = COMMANDBARBUTTON_TAG
        End With
    Next
End Sub

Public Sub Delete_Buttons()
    Dim intIndex As Integer
    Dim objCommandbarButton As CommandBarButton
    For intIndex = 1 To 2
        Set objCommandbarButton = CommandBars(intIndex). _
            FindControl(Tag:=COMMANDBARBUTTON_TAG)
        If Not objCommandbarButton Is Nothing Then objCommandbarButton.Delete
        Set lobjCommandbarButton(intIndex) = Nothing
    Next
End Sub

Public Sub Switch_ActiveCell_Color()
    Dim intIndex As Integer
    For intIndex = 1 To 2
        lobjCommandbarButton(intIndex).Caption = _
            IIf(lobjCommandbarButton(intIndex).Caption = "Ein", "Aus", "Ein")
    Next
    Call lobjApplication.Switch_On_Off
End Sub

' **********************************************************************
' Modul: clsApplication Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjApplication As Excel.Application

Private mblnOn As Boolean

Private mobjCell As Range
Private mintColorIndex As Integer

Friend Property Set Set_Application(objApplication As Excel.Application)
    Set mobjApplication = objApplication
End Property

Private Sub Class_Terminate()
    If Not mobjCell Is Nothing Then
        mobjCell.Interior.ColorIndex = mintColorIndex
        Set mobjCell = Nothing
    End If
    Set mobjApplication = Nothing
End Sub

Private Sub mobjApplication_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If mblnOn Then
        If Not Target.Locked Or Not Sh.ProtectContents Then
            If Not mobjCell Is Nothing Then _
                mobjCell.Interior.ColorIndex = mintColorIndex
            mintColorIndex = Target.Interior.ColorIndex
            Target.Interior.ColorIndex = 6
            Set mobjCell = Target
        End If
    End If
End Sub

Friend Sub Switch_On_Off()
    mblnOn = Not mblnOn
    If Not mblnOn And Not mobjCell Is Nothing Then _
        mobjCell.Interior.ColorIndex = mintColorIndex
End Sub

Gruß
Nepumuk
Na, ob du Dustin damit nicht überforderst,...
Luc:-?

...Nepumuk,
oder willst du ihn abschrecken... ;-)
Es ginge auch etwas einfacher, die Basis ist natürlich prinzipiell dieselbe, wenn man die Ereignisreaktion an-/abschalten (EventFlipFlop mit Kurzruftastenkombi) dürfte...
Gruß Luc :-?
Wieso
Nepumuk

mein lieber Luc,
das ist doch ganz einfach.
Ich hab mal ein Addin angefangen, welches im Prinzip das selbe macht, aber dabei alle "normalen" Excelfunktionen aufrecht erhält (Kopieren, Einfügen, Wiederholen, Rückgängig machen .....). Das hat schon über 1.000 Zeilen und ist noch längst nicht fertig (wird es wahrscheinlich auch nie, weil ich keine Zeit und Lust dafür habe).
Gruß
Nepumuk
Das kenne ich... ;-) Gruß Luc :-?
Luc:-?

:-?
@Luc
Carlo

Hallo Luc,
ich habe schon einiges von dir gelesen. Kritik oder pauschale Verbesserungsvorschläge, die keinem weitergeholfen haben.
Mich würde interessieren, wie du es einfacher machst! Wirklich mal deinen Code!
Bin gespannt.
Grüße,
Carlo
EventFlipFlop hat ohne MsgBox nur 3 Zeilen...
Luc:-?

...auf die du selber kommen kannst!
Und wenn du PgmCode von mir lesen willst, dann bemühe mal die Recherche...! Von dir liest man hier jedenfalls fast nichts und deine unmaßgebliche Meinung kannst du dann auch gern für dich behalten!
Luc :-?
AW: Makro Ein/Ausschalten
Dustin

Hallo zusammen,
vielen Dank für Eure Hilfen.
Das Makro sieht toll aus :-), anfangen kann ich damit wenig :-(
Ich werde es dann wohl doch immer bei Bedarf in die Mappe, die ich benötige rein kopieren, ich glaub das geht schneller als mich in dieses Code rein zu arbeiten.
Trotzdem Vielen Dank an alle Helfer, ist echt ein tolles Forum.
Bis bald
Viele Grüße
Dustin