Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
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

Script automatisch bei neuer Excel Instanz ausführ

Script automatisch bei neuer Excel Instanz ausführ
ChristianStocker
Hallo zusammen,
habe folgendes Problem:
ich hab mir ein Makro programmiert, dass mir beim öffnen einer Excel Datei in allen Arbeitsblättern einen gewissen Text sucht und ersetzt.
Dies funktioniert aber nur wenn keine Excel Instanz offen ist.
Das ganze wurde mit workbook_open realisiert.
Ich würde aber das Script immer laufen lassen wollen wenn ein neues File, sprich ein neues Workbook ( eine neue Excel Instanz ) geöffnet wird.
vielleicht hat jemand einen tip für mich!
danke im voraus!
cheers
xla-DieseArbeitsmappe
Code:
  • 
    Private Sub Workbook_Open()
    Call Workbook_Open_Check
    End Sub
    

  • xla-Module1
    Code:
  • Private Startup_timer_interval As Double
    Private Const OnSec As Double = 1.15740740740741E-05
    Private Const interval As Integer = 1
    Public Sub Workbook_Open_Check()
    Startup_timer_interval = interval * OnSec
    Application.OnTime (Now + Startup_timer_interval), "Timer_OnTimer"
    End Sub
    

    
    Private Sub Timer_OnTimer()
    If Application.Workbooks.Count > 0 Then
    Call Workbook_Opened
    Else
    Application.OnTime (Now + Startup_timer_interval), "Timer_OnTimer"
    End If
    End Sub
    

    
    Private Sub Workbook_Opened()
    Dim suchArray()
    Dim ersetzArray()
    Dim k As Long
    For Each Worksheet In ActiveWorkbook.Worksheets
    suchArray = Array("'?:\RG_H2O_NT\RG_H2O_NT.xla'!")
    ersetzArray = Array("")
    For k = LBound(suchArray) To UBound(suchArray)
    Call Worksheet.UsedRange.Replace(suchArray(k), _
    ersetzArray(k), _
    , _
    , _
    False)
    Next k
    Next Worksheet
    MsgBox "LOADED XLA"
    End Sub
    

  • 5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: Script automatisch bei neuer Excel Instanz ausführ
    21.04.2011 09:58:48
    Rudi
    Hallo,
    das geht über eine Klasse.
    Lege in deinem Add-In ein neues Klassenmodul an. Name: clsApplication
    Code:
    Option Explicit
    Public WithEvents myApp As Application
    Private Sub Class_Initialize()
    Set myApp = Application
    End Sub
    Private Sub Class_Terminate()
    Set myApp = Nothing
    End Sub
    Private Sub myApp_WorkbookOpen(ByVal Wb As Workbook)
    'Dein Code
    End Sub
    

    In DieseArbeitsmappe:
    Private Sub Workbook_Open()
    Set objApp = New clsApplication
    End Sub
    
    In ein Modul:
    Public objApp As clsApplication
    

    Gruß
    Rudi
    Anzeige
    AW: Script automatisch bei neuer Excel Instanz ausführ
    21.04.2011 10:16:52
    ChristianStocker
    Hallo Rudi
    der Code funktioniert gut, bis auf, dass ich beim ersten Start 4x OK drücken muss
    wenn ich dann eine neue datei klicke immer nur mehr 1x
    AW: Script automatisch bei neuer Excel Instanz ausführ
    21.04.2011 10:27:06
    ChristianStocker
    @Rudi:
    der Code sieht wie folgt aus:
    Arbeitsmappe:
  • 
    Private Sub Workbook_Open()
    Set objApp = New clsApplication
    End Sub
    

  • Modul1:
  • Public objApp As clsApplication

  • Modul2:
  • Private Startup_timer_interval As Double
    Private Const OnSec As Double = 1.15740740740741E-05
    Private Const interval As Integer = 1
    Public Sub Workbook_Open_Check()
    Startup_timer_interval = interval * OnSec
    Application.OnTime (Now + Startup_timer_interval), "Timer_OnTimer"
    End Sub
    

    Private Sub Timer_OnTimer()
    If Application.Workbooks.Count > 0 Then
    Call Workbook_Opened
    Else
    Application.OnTime (Now + Startup_timer_interval), "Timer_OnTimer"
    End If
    End Sub
    

    Private Sub Workbook_Opened()
    Dim suchArray()
    Dim ersetzArray()
    Dim k As Long
    For Each Worksheet In ActiveWorkbook.Worksheets
    suchArray = Array("'?:\RG_H2O_NT\RG_H2O_NT.xla'!")
    ersetzArray = Array("")
    For k = LBound(suchArray) To UBound(suchArray)
    Call Worksheet.UsedRange.Replace(suchArray(k), _
    ersetzArray(k), _
    , _
    , _
    False)
    Next k
    Next Worksheet
    MsgBox "LOADED XLA"
    End Sub
    

  • Klasse - clsApplication:
  • Option Explicit
    Public WithEvents myApp As Application
    Private Sub Class_Initialize()
    Set myApp = Application
    End Sub
    

    Private Sub Class_Terminate()
    Set myApp = Nothing
    End Sub
    

    Private Sub myApp_WorkbookOpen(ByVal Wb As Workbook)
    Call Workbook_Open_Check
    End Sub
    

  • Anzeige
    Danke für den Hinweis. mwT
    21.04.2011 10:58:33
    Rudi
    Hallo,
    interessantes Beispiel. Muss ich erst mal hinter steigen.
    Hat der Aufruf von Workbook_Open_Check über ein eigenes Event irgendwelche Vorteile?
    Man könnte sie ja auch einfach direckt aufrufen.
    Private Sub mobjApplication_WorkbookOpen(ByVal Wb As Workbook)
    'If Not Wb Is ThisWorkbook Then RaiseEvent OpenCheck(Wb)
    If Not Wb Is ThisWorkbook Then Call Workbook_Open_Check(Wb)
    End Sub
    

    Gruß
    Rudi

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige