MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 11.02.2019, 12:56   #1
Tomec23
Neuer Benutzer
Neuer Benutzer
Standard Acc2016 - Code automatisch wiederholen

Hallo zusammen,

mal wieder brauche ich eure Hilfe. Ich habe einen Code geschrieben der aktuell noch über einen Schaltfläche in einem Formular gestartet werden muss. Dieser soll aber alle 30 Minuten automatisch und im Hintergrund ausgeführt werden. Hat da jemand eine Idee?
Der Code an sich ist auch nicht so toll, läuft aber. (Bin auch hier für Änderungen offen)

Danke schon mal im Voraus

Private Sub Befehl9_Click()

Dim xlApp As Object, xlWB As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Open("G:......").RefreshAll

For Each w In xlApp.Workbooks
w.Save
Next w
xlApp.Quit


End Sub
Tomec23 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 13:12   #2
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Zitat:

Hat da jemand eine Idee?

Dazu ist das Timer-Event des Formulars bestens geeignet.

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 13:55   #3
ebs17
MOF Guru
MOF Guru
Standard

Code:

...
xlApp.Workbooks.Open("G:......").RefreshAll

For Each w In xlApp.Workbooks
...
Wenn Du genau eine Mappe öffnest, brauchst nicht wirklich eine Schleife über alle offenen Mappen.

Code:

Set xlApp = CreateObject("Excel.Application")
Bei Permanentwiederholung würde ich nicht jedes Mal eine Excel-Instanz erzeugen und schließen, sondern die einmal geöffnete beibehalten und immer wieder verwenden.

Code:

xlApp.Visible = True
Für den Hintergrund müsstest Du das umschalten.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12} <= geklammerte Zahlen sind Einzelthemen
Dein Dankeschön: DBWiki => Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 14:03   #4
Tomec23
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo,

danke für den Ratschlag. Kannst du mir auch noch genau sagen wie ich das am besten einbaue... ich bin da noch eher ein Neuling...
Tomec23 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 16:02   #5
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

@Tomec23
Vorab, ich habe kein Excel und kenne daher nur die Objekte, Eigenschaften
und Methoden, die hier in vielen Codebeispielen auftauchen.

Das dein Code läuft liegt wohl daran, dass im Modulkopf ein Option
Explicit
fehlt. Denn die Variable "w" ist nicht als Workbook deklariert, -
es gibt "xlWB".

Die von Eberhard vorgeschlagene, wieder verwendbare Excel-Instanz kannst
du so erzeugen (in einem allgem. Modul)
Code:

Option Explicit

Private m_xlApp As Objekt

Public Function GetxlApp() As Objekt
'kann auch privat sein, wenn sich deine Prozedur im gleichen Modul befindet
'und du sie nicht auch noch ausserhalb dieses Moduls benötigst
    If m_xlApp Is Nothing Then
        Set m_xlApp = CreateObject("Excel.Application")
    End If
    Set GetxlApp = m_xlApp
End Function
In deiner Prozedur verwendest du dann dieses Objekt
Code:

Public Sub DeineProzedur()
'diese muss Public sein, weil du sie aus einem Form aufrufen willst
    Dim xlWB As Object
    With GetxlApp
        .Visible = True
        .Workbooks.Open("G:......").RefreshAll

        For Each xlWB In .Workbooks
            xlWB.Save
        Next xlWB
        .Visible = False
    End With
End Sub
Im Formular rufst du deine Prozedur dann im Timer-Event auf
Code:

Private Sub Form_Timer()
    Call DeineProzedur
End Sub
Für alle 30 Minuten musst du das Interval auf 300.000 setzen.

gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 16:44   #6
gpswanderer
MOF Guru
MOF Guru
Standard

Hallo,
kleine Korrektur:
30min = 1800000
Eine Einheit entspricht einer Millisekunde

__________________

Gruß
Klaus
Office2016, Win10
gpswanderer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 16:48   #7
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

@Klaus
Mit'm Rechnen ist es genauso wie mit'm Lesen, - wer's kann hat Vorteile

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.