ich habe mal wieder ein Problem.
Wir haben sehr viele Dateien die auf dem Server liegen und von mehreren
Personen bearbeitet werden sollen.
Das Problem:
Hat jemand die Datei offen kann man diese ja nur Schreibgeschützt öffnen.
Jetzt geht die telefoniererei los, bitte Datei schließen...
Meine Frage:
Kann man eine Datei mit Hilfe von VBA nach einer gewissen Zeit, wenn nicht
mehr daran gearbeitet wird, automatisch schließen? Wichtig wäre aber das nur
diese Datei und nicht eventuell andere offene Dateien geschlossen werden.
Ich stelle mir da so eine Art Timer vor der merkt ob an einer Datei
gearbeitet wird oder nicht. Ist man inaktiv soll diese einfach nach bsw. 10
Minuten gespeichert und geschlossen werden.
Ich bin gespannt ob man so etwas mit VAB lösen kann. Vielen Dank für Eure
Hilfe.
--
Gruß Jens
Office 2003
Moinmoin Jens!
> Kann man eine Datei mit Hilfe von VBA nach einer gewissen Zeit, wenn nicht
> mehr daran gearbeitet wird, automatisch schließen?
Ja ;-)
> Wichtig wäre aber das nur
> diese Datei und nicht eventuell andere offene Dateien geschlossen werden.
ist klar ...
> Ich stelle mir da so eine Art Timer vor der merkt ob an einer Datei
> gearbeitet wird oder nicht. Ist man inaktiv soll diese einfach nach bsw. 10
> Minuten gespeichert und geschlossen werden.
na, denn mal los ...
Deine Anforderung kannst Du mit der OnTime-Methode umsetzen.
Die *kleine* Schwierigkeit ist lediglich, dass Excel kein Event
"EsHatSichIrgenwasInDerMappeGeändert" bereithält. Du mußt also Deine
Prozedur an verschiedene Events binden, die dann aber alle eventuellen
Änderungen abdeckt:
im VBA-Bereich [DieseArbeitsmappe] fügst Du folgende Prozeduren ein:
Private Sub Workbook_Open()
SetStartTime
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
SetStartTime
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Excel.Range)
SetStartTime
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Excel.Range)
SetStartTime
End Sub
Dann fügst Du in die Arbeitsmappe noch ein Standardmodul ein, in dem
folgendes steht:
Dim dblZeit As Double
Sub SetStartTime()
dblZeit = Now + TimeValue("00:02:00")
Application.OnTime dblZeit, "MappeSchliessen"
End Sub
Sub MappeSchliessen()
dblZeit = Empty
Thisworkbook.Close savechanges:=true
End Sub
Fertig. Das war's schon. Im Sub SetStartTime kannst Du den Wert für Dauer
des Timers noch einstellen, ich hab's mal auf zwei Minuten gesetzt.
Vielleicht hilfts Dir ja weiter.
schönen Abend!
--
Gruß, Dimo
'Gott ist tot!' -> Nietzsche, 1887
'Nietzsche ist tot!' -> Gott, 1900
perekt... das spart in zukunkt viele Anrufe und wird so manchen zur Weißglut
bringen :-).
Danke für deine schnelle Hilfe.
Jens
"Dimo Tabken" <use...@fit-4-office.de> schrieb im Newsbeitrag
news:uugplhg20wtd$.fo78zshrcdq8$.dlg@40tude.net...
habe da noch eine Frage kann man das Flackern abschalten.
Die Events werden anscheinend nacheinander abgearbeitet. Dabei schiebt sich
bei mir die Datei immer in der Vorder.- und Hintergrund. Das geht so 2-3
Sekunden und dann ist die Datei geschlossen.
Gruss Jens
"Dimo Tabken" <use...@fit-4-office.de> schrieb im Newsbeitrag
news:uugplhg20wtd$.fo78zshrcdq8$.dlg@40tude.net...
> habe da noch eine Frage kann man das Flackern abschalten.
Moinmoin Jens,
in den eigentlichen Timer kannst du noch die Funktion
application.screenupdating einbauen, dann flackert da nix mehr:
Sub SetCounter()
Application.ScreenUpdating = False
dblZeit = Now + TimeValue("00:02:00")
Application.OnTime dblZeit, "MappeSchliessen"
Application.ScreenUpdating = True
End Sub
hallo,
die Ursache für das flackern sind mehrere parallel laufende OnTime-
Aufrufe. Solange Excel offen ist, wird die geschlossene Datei dadurch
kurz wieder geöffnet, um den Code abzuarbeiten. Vor einem neuen OnTime
sollte man einen bereits laufenden erst beenden, hier mehr dazu
http://www.cpearson.com/excel/OnTime.aspx
Noch ein Hinweis: wenn eine Zelle im Edit-Modus ist (cursor blinkt in
der Zelle), funktioniert OnTime nicht.
Gruß
stefan
Danke für den Tipp. Was auf dieser Seite beschrieben steht verstehe ich zwar
aber wie ich das jetzt in meine Datei einbinden kann verstehe ich nicht.
Kannst Du mir da ein bissel auf die Sprünge helfen.
Vielen Dank
Jens
"stefan onken" <steo...@web.de> schrieb im Newsbeitrag
news:294a3651-9ad2-4fef...@a6g2000prm.googlegroups.com...
ich habe das heute mal auf unserem Server probiert. Leider klapp es nicht
ganz so wie erwartet. So wie stafan geschrieben hat wird die Datei immer
wieder geöffnet und schlossen sobald noch andere Exceldateien offen sind.
Er hat da ein Link beschrieben den ich twar verstehe aber das beschriebene
kann ich nicht einbauen. Vielleicht hast Du noch eine Idee.
Vielen Dank Jens
"Dimo Tabken" <use...@fit-4-office.de> schrieb im Newsbeitrag
news:1dwkxnvdpr901$.1m666dv8cck1w.dlg@40tude.net...
Dim dblZeit As Double
Sub SetStartTime()
On Error Resume Next
Application.OnTime dblZeit, "MappeSchliessen", Schedule:=False
On Error GoTo 0
dblZeit = Now + TimeValue("00:00:30")
Application.OnTime dblZeit, "MappeSchliessen"
End Sub
Sub MappeSchliessen()
dblZeit = Empty
ThisWorkbook.Close savechanges:=True
End Sub
Die Codezeile Ontime mit Schedule:=False beendet die OnTime-Prozedur,
bevor eine neue augerufen wird.
On Error ist nötig, da beim ersten Aufruf noch kein OnTime existiert.
Gruß
stefan
Danke und Gruss Jens
"stefan onken" <steo...@web.de> schrieb im Newsbeitrag
news:494b6c20-0e48-408c...@d1g2000hsg.googlegroups.com...
irgend iwe verstehe ich das nicht. Wenn ich das an meinem PC teste geht es
ohne Probleme. Bei uns in der Firma. Gibt es da ein Problem. Die Datei geht
nach der eingestellten Zeit zu. Es ist aber egal ob daran gearbeitet wird
oder nicht. Sie speichert einfach und geht zu. Und machmal (nicht immer
abhängig wieviele Dateien gerade offen sind) öffnet und schließt sich die
Datei immer wieder. Man kann den Vorgang nicht abbrechen, es gibt nur noch
ein abbrechen über den Taskmanager.
Ich verstehe das nicht.
Gruss Jens
"stefan onken" <steo...@web.de> schrieb im Newsbeitrag
news:494b6c20-0e48-408c...@d1g2000hsg.googlegroups.com...
Ich hatte mir für eine zentral genutzte Exceldatei auch mal ein
automatisches schliessen überlegt, bin aber davon abgekommen. Da
könnte was gespeichert werden, was gar nicht gespeichert werden
sollte. Ich mache das nun über die Sicherungskopie (eine beim öffnen
automatisch erstellte Kopie), allerdings braucht die Datei nur 1 user
schreibend, die anderen nur lesend.
Gruß
stefan
en Beim schliessen automatisch speichern speichert ja evtl Daten, die
gar nicht gespeichert werden sollten.
On 31 Jul., 11:13, "Jens Wennemede" <wennem...@hotmail.de> wrote:
> Hallo Stefan,
>
ich hatte es nur allein getestet. Die Datei wurde nur von 1 User bearbeitet.
Ich verstehe das nicht. Habe das auch an 2 verschiedenen Rechner ausprobiert
immer das gleiche. :-(
Schade. Vielleicht werde ich jetzt doch auf die Datenbankvariante umsteigen
nur leider haben wir kein Access in der Firma. Muss mal sehen wie man das
mit Excel hinbekommt.
Gruss Jens
"stefan onken" <steo...@web.de> schrieb im Newsbeitrag
news:bbf21de0-70ef-445f...@a70g2000hsh.googlegroups.com...
hallo Jens,
noch eine Idee: hast du 2 Dateien (eine zuhause, eine zweite auf der
Arbeit) und bei der auf der Arbeit vergessen, den Ereignissen
Worksheet_Change etc den Code zuzuweisen ? Dann hättest du nur im
Workbook_Open das OnTime, was zumindest den ersten Teil der
Problematik erklären würde.
stefan
leider nicht. Ich habe die Datei Daheim getestet und dann per Stick mit auf
Arbeit genommen.
Jens
"stefan onken" <steo...@web.de> schrieb im Newsbeitrag
news:f5dc6023-0789-4410...@i76g2000hsf.googlegroups.com...
schade ;)
Ich habe im Moment keine Idee, ausser irgendwie zu versuchen, die
Ursache einzugrenzen.
Lösen auf der Arbeit Worksheet-Selectionchange etc denn die OnTime-
Prozedur aus? Ggfls mal eine Msgbox in den Code von SetStartTime
einfügen. Evtl sind diese Ereignisse durch ein EnableEvents = False
irgendwie ausser Kraft.
Ansonsten würde ich neue Datei nehmen und den Code darin (auf der
Arbeit) testen.
Gruß
stefan
> Schade. Vielleicht werde ich jetzt doch auf die Datenbankvariante
> umsteigen nur leider haben wir kein Access in der Firma. Muss mal sehen
> wie man das mit Excel hinbekommt.
Ich stand vor Jahren vor dem gleiche Problem. Seit dem wird bei uns jede
Mehrnutzer Dateneingabe in einer DB abgebildet. Um eine DB zu erstellen/
bearbeiten brauchts kein Access. Das geht mit VBA ganz prima (Die Jet
muß allerdings installiert sein) Mach mal den VBA Editor auf und guck
unter Extras/Verweise ob Du "Microsoft DAO 3.6 Object Libary" in der
Liste hast und anhaken kannst.
folgendes Beispiel baut Dir mit DAO eine Datenbank mit einer Tabelle und
5 Feldern komplett ohne Access ;-) Man kann Sie sich danach natürlich
mit Access anschauen
(FAVORITES_FILE enthält "P:\Pfad\zu\meiner\DB.mdb"):
Public Sub create_DB_Favorites()
Dim db As DAO.Database
Dim myTable As DAO.TableDef
Dim myTableName As String
Dim Feld1 As DAO.Field
Dim Feld2 As DAO.Field
Dim Feld3 As DAO.Field
Dim Feld4 As DAO.Field
Dim Feld5 As DAO.Field
myTableName = "Favorites"
On Error Resume Next
Set db = CreateDatabase(FAVORITES_FILE, dbLangGeneral, dbEncrypt)
'Tabelle erzeugen
Set db = OpenDatabase(FAVORITES_FILE)
Set myTable = db.CreateTableDef(myTableName)
'Felder erzeugen
With myTable
Set Feld1 = .CreateField("UserName", dbText, 20)
Set Feld2 = .CreateField("Doc_ID", dbLong)
Set Feld3 = .CreateField("DocName", dbText, 50)
Set Feld4 = .CreateField("UID", dbInteger, 5)
Set Feld5 = .CreateField("ID", dbLong)
Feld5.Attributes = dbAutoIncrField
.Fields.Append Feld1
.Fields.Append Feld2
.Fields.Append Feld3
.Fields.Append Feld4
.Fields.Append Feld5
End With
'Tabelle hinzufügen
db.TableDefs.Append myTable
'Datenbank schliessen
db.Close
End Sub