Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: gast am Oktober 25, 2011, 11:12:48

Titel: xls automatisch schliessen
Beitrag von: gast am Oktober 25, 2011, 11:12:48
Hallo,

ich habe eine Frage...

Und zwar exportiere ich alle 15 Minuten Daten in eine xls Datei. Diese Datei hat immer den gleichen Namen, und gleichen Aufbau.

Mein Problem ist, wenn ein Jemand diese Datei gerade auf hat, während Access exportieren möchte, geht es nicht, weill eben die Datei auf ist.

Ich möchte also gern, dass die Datei automatisch geschlossen wird, falls sie geöffnet sein sollte ( braucht nicht gespeichert zu werden )

Kann mir dafür jemand den Code bereit stellen ?

Vielen Dank
Titel: Re: xls automatisch schliessen
Beitrag von: database am Oktober 25, 2011, 16:55:50
Hallo,

ob deine User damit glücklich werden wenn du ihnen die Datei vor der Nase zunagelst ???

AYOR ... zu diesem Thema gab es in einem anderen Forum einen entsprechenden Beitrag.
http://www.office-loesung.de/ftopic98698_0_0_asc.php (http://www.office-loesung.de/ftopic98698_0_0_asc.php)
Titel: Re: xls automatisch schliessen
Beitrag von: gast am Oktober 26, 2011, 13:10:34
Vielen Dank für den Link....

ich denke dass ist genau das was ich suche.

Problem :

Es funktioniert in meinem Form nicht

Das hier habe ich als Code :

Option Compare Database
Option Explicit

Private Sub Form_Open(Cancel As Integer)



Dim export_path

export_path = "\\Server\Pfad\file" & ".xls"

Private Sub Workbook_Open()
Dim exapp As New Excel.Application
With exapp
   .Workbooks.Open export_path
   .Visible = True
End With
ThisWorkbook.Close True

End Sub

Er meckert über die Zeile "Private Sub Form_Open(Cancel As Integer)"

Was ist falsch ?

Und der zur Vollständigkeit :

Meine User schauen für eine Minute in das File welches beim jeden export (alle 15 Minuten) sich mit Werten aktuallisiert.
Daher kann ich die Datei mit ruhigem Gewissen schliessen. Kein user pfuscht in dem File rum

Vielen Dank
Titel: Re: xls automatisch schliessen
Beitrag von: daolix am Oktober 26, 2011, 13:35:06
Die Zeile Private Sub Workbook_Open() gehört nicht in deinen Code.
Wobei ich mich gerade frage was dein Code bewirken soll? Die Access-Form öffnet local beim Laden eine Excel-Instanz samt externer Excel - Datei und schließt diese dann wieder? Andere im Netzwerk geöffnete Excel-Apps die auf diese Datei zugreifen werden dabei nicht geschlossen. Und ob sowas überhaupt so einfach geht weiss ich jetzt nicht.
Titel: Re: xls automatisch schliessen
Beitrag von: database am Oktober 26, 2011, 14:25:37
Hallo,

ich würde dir vorschlagen ein Standardmodul in deiner DB anzulegen und in dieses den Code aus dem Forenbeitrag, den du zitierst, einzufügen.
Dann benennst du die Zeile um ---> Private Sub Workbook_Open()
so dass sie danach wie folgt lautet ---> Public Sub WorkbookOpenClose()

In deinem Modul sollte der Code dann wie folgt aussehen:


Option Compare Database
Option Explicit

Public Sub WorkbookOpenClose()

Dim exapp As New Excel.Application
Dim export_path As String

export_path = "\\Server\Pfad\file" & ".xls"

With exapp
   .Workbooks.Open export_path
   .Visible = True
End With

exapp.ActiveWorkbook.Close

Set exapp = Nothing

End Sub


KOPIERE am Besten den Code oben, ich habe da auch noch 2 weitere kleine Änderungen angebracht
die u.A. notwendig waren, da das Original aus Excel-VBA stammt!

In deinem Formular sollte dann im Ereignis 'Beim Öffnen' der Aufruf zu finden sein:


Private Sub Form_Open(Cancel As Integer)

   Call WorkbookOpenClose

End Sub


Die Auslagerung und Deklaration als Public Sub der Routine zum Öffnen und Schließen der Exceldatei bringt den Vorteil,
dass du sie von JEDEM Formular oder JEDEM beliebigen Codeteil aus aufrufen kannst.

Nicht vergessen einen Verweis auf die 'Microsoft Excel xx.x Object Library' zu setzen.

Titel: Re: xls automatisch schliessen
Beitrag von: ebs17 am Oktober 26, 2011, 19:02:39
Die gemachten Vorschläge halte ich für diskutabel. Da wird eine Mappe (die evtl. offen ist) geöffnet, um sie anschließend zu schließen. Woher nimmt man die Gewissheit, die Excelinstanz zu erwischen, in der sich die offene Mappe wirklich befindet? Selber öffnen und schließen ist ein Nullsummenspiel.

Ablauf sollte also sein:
1) Ermitteln, ob Mappe offen
2) Referenz auf offene Mappe holen (GetObject)
3) Mappe schließen
4) ggf. Excelinstanz der Mappe schließen

Dazu gibt es im MOF ein Thema "Datei schließen vor Export" (Beginn 12.10.2011).

Man sollte aber auch die Art des Exports betrachten. Um Daten nach Excel zu bringen, muss man nicht zwingend Excel beenden. Man kann auch Daten in eine offene Mappe einfügen. Man könnte ja mal darüber nachdenken.

MfGA
ebs
Titel: Re: xls automatisch schliessen
Beitrag von: gast am Oktober 27, 2011, 12:04:34
Hallo,

vielen Dank für den Code von "Database"

Aber ebs17 hat schon recht. Es passiert folgendes :

Dieses Modul öffnet besagte xls Datei, und schliesst diese sogleich. Aber, wenn irgendein anderer User diese Datei offen haben sollte, bleibt diese bei dem User geöffnet.

Ergo : Es kann kein neues xls abgelegt werden im gleichen Pfad mit gleichem Namen.

Funktioniert also leider auch nicht für meinen benötigten Zweck....

Ich kann mir auch nicht wirklich vorstellen, das es da einen Prozess/Befehl/Commando gibt, der lokalisieren kann, wer das File auf hat, und dort auch schliesst. Oder gar wer die mehreren User sind, die es offen haben.

Und was würde passieren, wenn der Rechner gesperrt ist ? Kann man denn auch aus der "ferne" ein File schliessen ?

Hat irgendwer noch nen coolen Tip ?

mfg
ich
Titel: Re: xls automatisch schliessen
Beitrag von: ebs17 am Oktober 27, 2011, 12:17:48
Gegenfrage: Kannst Du denn per Hand diese XLS erreichen?

Codeanweisungen können natürlich keine fehlende Netzwerkverbindung ersetzen, und Berechtigungen zum Zugriff sollte man auch haben oder bekommen.

ZitatHat irgendwer noch nen coolen Tip ?
Ich hätte einen: Aufmerksam lesen!
Woher kommt die Gier, eine Datei schließen zu wollen? Schreib Dein Zeug einfach rein und fertig. Einen Zugriff (vgl. oben) muss man aber schon haben. Aber was per Hand gelingt, sollte auch per Code gelingen.

MfGA
ebs
Titel: Re: xls automatisch schliessen
Beitrag von: gast am Oktober 27, 2011, 12:56:18
Hi ebs17,

Wer wird denn da gleich komisch werden.... Entspann Dich....

Woher die Gier kommt ?
Jetzt muss ich auch mal sagen "Aufmerksam lesen"....Mehrfach ober geschrieben warum ich das File schliessen möchte, oder etwa nicht ?

Gut, dass es da anscheinend ne Lösung gibt, meine Werte in dem File zu schreiben, auch wenn es jemand offen hat, wusste ich nicht.

So, nun wird sich ja jeder denken können, dass wenn ich wüßte wie es geht, hier keinen Post abgesetzt hätte.

Daher wäre ich dankbar, wenn mir jemand unter die Arme greifen könnte, und mir einen Code stellt, den ich dann studieren könnte, der mir aber sicher stellt, das ich in ein xls schreiben kann, welches offen ist.

Vielen Dank

mfg
ich
Titel: Re: xls automatisch schliessen
Beitrag von: ebs17 am Oktober 27, 2011, 14:11:52
ZitatCode ... der mir aber sicher stellt, das ich in ein xls schreiben kann, welches offen ist.
Offene Fragen (auch bzgl. richtig lesen): Netzwerkverbindung? Berechtigung?
Das kann kein Code herstellen und somit auch nicht sicherstellen.

Falls das aber gewährleistet ist: Die Stichworte GetObject (oben bereits genannt) und Automation in Kombination mit Excel bieten bei einer Suche  (Google ist Dein Freund) eine Fülle von Beispielen und Codes, die Du studieren kannst. Im Endeffekt kann man alles, was man per Hand in einer Excelmappe tun kann, per Code ausführen.
Exportieren ist so vielschichtig, dass es mehr als eine Variante gibt. Die Auswahl einer Variante würde ich an konkreten Umständen festmachen. Letztere sind aber nicht genannt.

BTW: Ich bin sehr entspannt, und ich habe das Problem nicht. Ich habe nur einen weiter oben genannten Satz etwas volkstümlich umformuliert mit dem mittlerweile eingetretenen gewünschten Ergebnis, dass er wahrgenommen wird.

MfGA
ebs
Titel: Re: xls automatisch schliessen
Beitrag von: gast am Oktober 27, 2011, 15:38:24
Hi ebs,

mit der Netzwerkverbindung und den Berechtigungen wäre es hinsichtlich des users, der die mdb anwirft, alles ok.

Nötigen Rechte wären somit vorhanden.

Gut, die Antwort "Google ist Dein Freund", wenn man um Hilfe und einen fertigen Code bittet ist nicht unbedingt die Antwort die man erwartet.
Es soll nun auch keiner Googeln für mich....definitiv nicht.

Aber es hätte ja sein können, dass hier ein echter "freak" ist, der mit einem "fingerschnipp" die Antwort bzw. den Code posten kann.

Eben das was man aus meiner Sicht in einem Forum halt erwartet. Wer die Antwort weiß, soll es schreiben, wer nicht, ließt es halt, und geht woanders hin.

Aber Google ist Dein Freund....Ich bitte Dich...Das kann ja jeder Horst schreiben...Selbst ich, wenn ich mich in nem Forum für Quantenphysik anmelde, und dort in irgendnem Thread rein stolper, und ne X beliebiege Frage dann beantworte mit "Eh, Google ist Dein Freund"

Damit will ich jetzt keinen Angriff auf Dich starten...Nur darauf hinweisen dass das ne Antwort ist, die jeder wohl weiß, und kennt. Und wohl auch noch als erstes nutzt, damit aber nicht weiter kommt, und dann hier um Hilfe bittet. (Zumindest bei mir so)

Gut, dann werde ich mal ne zweite Runde google´n und mal fragen ob mein Freund jetzt mehr weiß...

Vielen Dank trotzdem an alle....
Titel: Re: xls automatisch schliessen
Beitrag von: ebs17 am Oktober 27, 2011, 16:01:11
Ein echter "freak" kennt zu dem Thema mehrere Antworten und Lösungen, womit die Lösung per Fingerschnipp ein Problem ist, und alles darzustellen ist einfach zuviel Arbeit.
Dass ein Code konkret ist und sich somit nach konkreten Umständen richten wird, hatte ich schon angedeutet.
(5 ... 6 Sätze in ihrem gesamten Inhalt und sofort, d.h. ohne mehrfache Wiederholung, zu erfassen scheint wohl ein Problem zu sein.)

Zitat... nicht unbedingt die Antwort die man erwartet
Vielleicht solltest Du Deine Erwartungshaltung überprüfen. In einem Forum wird man vor allem Hilfe zur Selbsthilfe geben, und da Dir an einem Studium gelegen ist, habe ich mit verwendbaren Stichworten einen gezielten Suchvorgang angeboten. Damit sollte auch ein beliebiger Horst über sein Wissen hinaus weiterkommen.

MfGA
ebs