Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Automatisches Makro bei öffnen bestimmter Dateien





Frage

Hallo! Folgende Situation: Ich möchte das automatisch beim Öffnen einer Arbeitsmappe, ein bestimmter Bereich (ist immer gleich) markiert wird und dann auf die Markierung gezoomt wird. Danach Markierung wieder deselektiert wird. Braucht (kann auch nicht ) nicht gespeichert werden. Die Schwierigkeit (meines erachtens) ist das dies nur Dateien, welche mit BPanfangen, betreffen soll. Also, es soll sobald ich eine Datei mit den Anfangsbuchstaben BP öffne, auf einen bestimmten Bereich gezoomt werden. Am besten ohne Nachfrage ob die Makros aktiviert werden sollen. Der Hintergrund ist; das die Dateien schreibgeschützt sind und die Konstruktion unserer Firma, vergißt wieder den richtigen Zoomfaktor einzustellen. Wir, in der Produktion, müssen dies nun immer manuell tun. Können es aber nicht abspeichern. Da es sich auch um eine Vielzahl von Dateien handelt, wäre es ziemlich aufwändig, es manuell zu erledigen. Klar weiß ich dass man es mit einem Makro erledigen kann. Aber man läßt mich nicht an den Konstruktionsrechner (hat als einziger die Berechtigung für die Dateien zum ändern). Mein Idee war nun ein Makro zu haben, welches ich auf den Produktionsrechnern schreiben kann, welches obiges Problem löst. Ich dachte es geht vielleicht über die Personl.xls Danke EX-CELL

Antwort 1 von CaroS

Hallo EX-CELL,

das Makro könnte ungefähr so aussehen:

Sub Zoom_Makro()
Rem Zoomt den angegebenen Bereich "A4:F20" auf Fenstergröße
Dim zelle As Range
Set zelle = ActiveCell
Range("A4:F20").Select
ActiveWindow.Zoom = True
zelle.Activate
End Sub

und es kann nicht nur, es muss sogar irgendwo gespeichert werden. Wo ist natürlich relativ egal, das könnte auch in der Personl.xls sein. Aber um den Aufruf muss man sich einige Gedanken machen, das funktioniert nämlich nicht so einfach. Am einfachsten und saubersten wäre es, man "pflanzt" es in jede BP-Datei einmalig ins Private Sub Workbook_Open() ein.

Datei öffnen
Zitat:
Am besten ohne Nachfrage ob die Makros aktiviert werden sollen.
geht, aber nur für vertrauenswürdige Makros mit gültiger Signatur oder bei niedriger Makro-sicherheitsstufe. Siehe Informationen zur Makrosicherheit -- > Sicherheitsstufen
___________________________________________________________________________
Hoch
Signierte Makros: Die Quelle des Makros und der Status der Signatur bestimmen, wie signierte Makros verarbeitet werden.
>> Vertrauenswürdige Quelle, gültige Signatur: Makros werden automatisch aktiviert, die Datei wird geöffnet.

Mittel
Signierte Makros: Die Quelle des Makros und der Status der Signatur bestimmen, wie signierte Makros verarbeitet werden.
>> Vertrauenswürdige Quelle, gültige Signatur: Makros werden automatisch aktiviert, die Datei wird geöffnet.

Niedrig
Wenn die Sicherheit auf Niedrig festgelegt ist, werden alle Makros ungeachtet des Ursprungs oder Zertifikatsstatus gleich behandelt. Bei dieser Einstellung wird keine Eingabeaufforderung angezeigt oder Signaturüberprüfung durchgeführt, so dass alle Makros automatisch aktiviert werden. Wählen Sie diese Einstellung, wenn Sie sicher sind, dass alle Makros in Ihren Dateien aus vertrauenswürdigen Quellen stammen.
___________________________________________________________________________
Für das Problem, dass man an die BP-Dateien eigentlich nicht rankommt (sie nicht ändern kann, ihnen also auch kein Makro einpflanzen kann), habe ich im Moment keine Lösung. Mal sehen, ob es ein geeignetes Application-Ereignis gibt, das man als automatischen Auslöser verwenden kann.

Gruß,
CaroS

Antwort 2 von Primut

Hi all,

recht interessant, bin mal auf die Lösung gespannt. Meine Ergebnisse bisher:
In der Personl.xls das
Private Sub Workbook_Open()
Ereignis wird immer ausgelöst, wenn eine beliebige Excel-Mappe geöffnet wird, allerdings nur, wenn vorher noch keine offen ist! Würde zum Automatisieren also nur unter dieser Bedingung funktionieren.

Zum Zoomen reicht auch:
 ActiveWindow.Zoom = 150
wobei die Zahl der Zoomfaktor in % ist.

Problem: Es ergibt sich immer
Zitat:
Laufzeitfehler ´91´ Objektvariable nicht festgelegt
scheinbar, weil das Makro schon losläuft, bevor intern beim Start alles initialisiert ist, kann ich mir zumindest nicht anders erklären.
Von daher funktioniert das Makro an dieser Stelle leider doch (noch) nicht.

So Long
      Primut


Antwort 3 von EX-CELL

@CaroS

Wenn ich das Makro in jeder der BP-Dateinen bringen könnte, dann könnte ich auch gleich die Zoomstufe selber verstellen. ;-)

Diese Option fällt also flach.

Mit der Sicherheitstufe wird wahrscheinlich kein Problem sein.

@primut

Das Problem mit dem Laufzeitfehler hatte ich auch.

@all

Ich hoffe es hat jemand noch ne Idee.


gruß

EX-CELL

Antwort 4 von CaroS

Hallo Primut,

dieser Kommentar zu Deiner AW2 hat den Nachteil, dass ich Deinen Versuch nicht 1:1 nachvollzogen habe, sondern nur aus dem Bauch raus antworte, aber so war meine AW1 ja auch gar nicht gemeint.

In das Private Sub Workbook_Open() der Personl.xls würde ich sowieso nicht allzu viel reinschreiben, da die Datei meistens ausgeblendet ist, deshalb z. B. auch keinen Zoom-Befehl. Richtig ist, dass die Personl.xls nur einmal pro Excel-Session (als aller-erste, noch vor einer doppel-geklickten Anwenderdatei) geöffnet wird, also ihr Workbook_Open-Ereignis pro Excel-Session auch nur ein einziges Mal stattfindet. Für den laufenden Excel-Betrieb gibt das nicht viel her.

Die Zoom-Befehle wollte ich in die Anwenderdateien BP*.xls ins Private Sub Workbook_Open() reinschreiben, dort wären sie richtig aufgehoben, aber das geht ja leider nicht. Die Suche nach einer Lösung geht also weiter ...

Gruß,
CaroS

Antwort 5 von halfstone

@Primut,

da ist mir gerade ein Versehen passiert. Sorry.

Gruß Fabian

Antwort 6 von Primut

hier nochmal der Code als neutrale Kopie (@fL gute Idee mit Application.Ontime!!) einzufügen in eine neue Arbeitsmappe:


Rem kopiere diesen Code in ein Standardmodul
Rem beim Öffnen einer mit "bp" beginnenden Datei wird
Rem im Beispiel in "Tabelle1" der Bereich "A1:J31" gezoomt,was Zoomfaktor 149%  entspricht
Rem Der Aufruf wiederholt sich, einmal angestoßen, jede Sekunde
Rem über das Application.Ontime Event
Option Explicit

Dim AZeit As Date, DName() As String
Sub bpopen()
Dim i%, m%
AZeit = Now + TimeSerial(0, 0, 1)

If Application.Workbooks.Count < 2 Then
  Application.OnTime AZeit, "bpopen"
  ReDim Preserve DName(Application.Workbooks.Count - 1)
  Exit Sub
End If

ReDim Preserve DName(Application.Workbooks.Count - 1)

For i = 2 To Application.Workbooks.Count
 If UCase(Left(Application.Workbooks(i).Name, 2)) = "BP" Then
  For m = 0 To Application.Workbooks.Count - 1
   If Right(DName(m), 6) <> "zoomed" Then DName(m) = _
    Application.Workbooks(m + 1).Name
     If Right(DName(m), 6) <> "zoomed" Then
      If UCase(Left(Application.Workbooks(m + 1).Name, 2)) = "BP" Then
        Rem Event einmaliges Zoomen
        Workbooks(Application.Workbooks(m + 1).Name).Activate
        Rem Bereich(e) hier Event anpassen.;-)
        Sheets("Tabelle1").Range("A1:J31").Activate
        ActiveWindow.Zoom = True
        DName(m) = DName(m) & "zoomed"
       End If
      End If
    Next
   End If
 Next
Application.OnTime AZeit, "bpopen"
End Sub



Zusätzlich noch

Private Sub Workbook_Open()
Call bpopen
End Sub


Arbeitsmappe zB. als Zoom.xla speichern und anschließend das Add-In einbinden. sollte eigentlich alles funzen.


Gruß
    Primut


Antwort 7 von Spassvogel

  • Zitat:
    *Gelöscht*
    Admininfo: siehe die SN Nutzungsbedingungen.