Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Private Sub in Person.xls - globaler Zugriff?

Private Sub in Person.xls - globaler Zugriff?
13.05.2008 16:59:00
Andreas
Hallo Herber Fans,
ich habe ein Makro, welches in einer Excel Datei im VBA Editor auf dem Excel Objekt (Blatt) hinterlegt wird, in dem sich eine Pivottabelle befindet. Dieses Makro sorgt dafür, daß die Fensterfixierung einer Pivottabelle immer aktualisiert wird. Ansonsten stellt sich nach diversen Änderungen an Pivotfeldern der Effekt ein, daß die Fixierung nicht mehr stimmt.
Das Makro in seiner jetzigen Form:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim pvTable As PivotTable
Dim rgSelect As Range
Set pvTable = ActiveSheet.PivotTables(1)
ActiveWindow.FreezePanes = False
pvTable.PivotSelect "", XlPTSelectionMode.xlOrigin, True
Set rgSelect = Selection.Cells(Selection.Cells.Count).offset(2, 1)
rgSelect.Select
ActiveWindow.FreezePanes = True
End Sub


Nun möchte ich erreichen, daß ich das Makro in der VBA Umgebung meiner Person.xls Datei hinterlegen kann und – wenn die Personl.xls geöffnet ist – dieses Makro für jede geöffnete Pivottabelle anspringt, wenn auf dieser geändert wird.
Wie kann ich ein Makro aus der Personl.xls so allgemeingültig definieren?
Vielen Dank für Eure Anregungen,
Grüße, Andreas Hanisch

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Private Sub in Person.xls - globaler Zugriff?
13.05.2008 17:08:00
Nepumuk
Hallo Andreas,
durch eine Klasse der Application.
Gruß
Nepumuk

Durch ein Klassenmodul der Anwendung
13.05.2008 17:20:00
NoNet
Hallo Andreas,
das ist z.B. durch ein Klassenmodul der Excel-Anwendung möglich, das auf Änderungen auf Anwendungsebene (der laufenden Excel-Instanz) reagiert (und nicht nur auf Mappenebene !).
Wie das grundsätzlich funktioniert kannst Du hier nachlesen :
http://www.online-excel.de/excel/singsel_vba.php?f=58
Allerdings ist dieses Thema nicht ganz trivial, stelle Dir daher keine "2-Minuten-Lösung" vor !
Gruß und viel Erfolg, NoNet

Anzeige
AW: Durch ein Klassenmodul der Anwendung
13.05.2008 17:31:51
Nepumuk
Hallo NoNet,

keine "2-Minuten-Lösung"


Da hast du recht. ich hab 2 Minuten 54 Sekunden benötigt. :-) Liegt warscheinlich an dem langen Wort "Application"

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Dim objApplication As clsApplication

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set objApplication = Nothing
End Sub

Private Sub Workbook_Open()
    Set objApplication = New clsApplication
    Set objApplication.prpApplication = Application
End Sub

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

Option Explicit

Private WithEvents mobjApplication As Application

Friend Property Set prpApplication(objApplication As Application)
    Set mobjApplication = objApplication
End Property

Private Sub mobjApplication_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
    Dim pvTable As PivotTable
    Dim rgSelect As Range
    Set pvTable = Target
    ActiveWindow.FreezePanes = False
    pvTable.PivotSelect "", XlPTSelectionMode.xlOrigin, True
    Set rgSelect = Selection.Cells(Selection.Cells.Count).Offset(2, 1)
    rgSelect.Select
    ActiveWindow.FreezePanes = True
End Sub

Gruß
Nepumuk

Anzeige
Zum Glück habe ich nicht "5-Minuten-Lösung"...
13.05.2008 17:49:00
NoNet
Hey Nepumuk,
...geschrieben ;-) sonst hättest Du mich jetzt ganz schön vorgeführt ;-)
Aber : Das galt ja auch nicht einem solch erfahrenen Klassen-Spezi wie Dir sondern war auf den weniger erfahrenen Durchschnitts-Programmierer gemünzt :-)
Gruß, NoNet

AW: Durch ein Klassenmodul der Anwendung
13.05.2008 17:51:21
Andreas
Hallo Ihr Beiden,
ich hatte kaum das verlinkte Skript von NoNet gelesen, da kam schon der geniale Code von Nepumuk. Zugegebenermaßen wäre das für mich auf keinen Fall in solch kurzer Zeit zu machen gewesen… Diese Komplexität eher in zwei Stunden. Ich werde mir den Code nun noch ansehen und mit der F1 Hilfe versuchen zu „sezieren“. Aber auf alle Fälle läuft der astrein! Mein Kollege guckt schon ganz komisch, wenn ich die Freude vor meinem Monitor kaum noch im Zaum halten kann.
Heftig, heftig, heftig, was alles (!) möglich ist…
Habt einen schönen Abend!
Vielen Dank und Grüße,
Andreas Hanisch aus Berlin

Anzeige
AW: Durch ein Klassenmodul der Anwendung
13.05.2008 20:01:34
Original
Hi,

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set objApplication = Nothing
End Sub


Das ist das falsche Ereignis, denk mal darüber nach!
mfg Kurt

AW: Durch ein Klassenmodul der Anwendung
13.05.2008 20:06:18
Nepumuk
Hallo Kurt,
in der PERSONL.XLS passt das schon. Auch in einem Addin ist das OK so. Nur in einer "normalen" Mappe würde ich den Abbruch des Schließens abfangen.
Oder was geht dir dabei durch den Kopf?
Gruß
Nepumuk

AW: Durch ein Klassenmodul der Anwendung
13.05.2008 21:33:00
Original
Hi,
verzeih, ich hatte das mit der PERSONL.XLS glatt übersehen, wäre auch verwunderlich,
wenn du das nicht wüßtest.
mfg Kurt
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige