Toon posts:

Excel werkblad delen auto-opslaan om de minuut

Pagina: 1
Acties:
  • 1.215 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo, ik wil straks met meerdere gebruiker op verschillende computers aan 1dezelfde excel werkmap werken. Dat moet dus gaan via de ingebouwde werkmap delen functie van excel 2007. Nu kun je hem automatisch op laten slaan bij bijwerken, maar om de 5 minuten. En hij synchroniseert pas als je op slaat. Dit zou ik graag om de minuut ofzo willen doen. Ik maakte deze macro:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Macro1()
'
' Macro1 Macro
'

'
Do
ActiveWorkbook.Save
Sleep 30000
Loop
End Sub
Maar dan crasht excel volledig bij het uitvoeren.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Excel crashed niet, maar gaat exact doen wat jij het programma voorschrijft:
bestand bewaren, 30 seconden helemaal niks doen , bestand bewaren en dat tot het einde der tijden. :)

Je zult een timer component uit de kast moeten trekken die iedere minuut een routine aanroept.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 07:30
Wat je kan doen is een global variabele definieren met de laatste savetime. Vervolgens maak je een Workbook_sheetchange macro (dat is een speciale macro die iedere keer als er iets is veranderd in het blad wordt gedraaid. Daarin kijk je of de huidige tijd meer dan 30 seconden groter is dan de opgeslagen tijd. Ja? -> sla op en overschrijf de opgeslagen tijd.

Verwijderd

Topicstarter
Lijkt me een aardig idee. Als ik
code:
1
2
3
4
Private Sub Workbook_SheetChange(Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range 
Sub Macro1()
'
' Macro1 Macro

boven mijn script zet, wordt dan alles eronder in sub Macro1 alleen uitgevoerd als de state van het document veranderd? En kun je ondertussen wel gewoon doorwerken aan je xls map?

  • Notna
  • Registratie: November 2002
  • Laatst online: 09:04

Notna

Moderator General Chat / Wonen & Mobiliteit

Where are you?®

Lijkt mij dan dat elke keer dat je een cel aanmaakt/veranderd dat hij dan gaat opslaan. Niet echt handig voor de snelheid van het werken imo :P

Verder snap ik het niet echt dat je zo snel wilt opslaan continu.... Als je gewoon die 5 mins aanhoud, dan kom je er toch prima (geen afkraken bedoelt, gewoon intresse over de redenering)

Xbox Live ID:Notna8310


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 07:30
Niet als je zo refereeert aan macro 1.
Dan moet je de "Sub" weglaten. En als er nog steeds een oneindige loop in je macro1 staat, zal dit je echt niet helpen, dan locked excel bij de eerste wijziging die je maakt.
Probeer dit eens in het workbook codepaneel te zetten.
Visual Basic:
1
2
3
4
5
6
7
8
9
Dim savetijd As Date


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If DateDiff("s", savetijd, Now) > 30 Then
    ActiveWorkbook.Save
    savetijd = Now
End If
End Sub


En, met Notna, 30 seconden (waar dit op ingesteld is) is echt niet prettig. Overweeg inderdaad een minuut of vijf of meer.

Verwijderd

Topicstarter
onkl schreef op woensdag 28 maart 2007 @ 11:32:
Niet als je zo refereeert aan macro 1.
Dan moet je de "Sub" weglaten. En als er nog steeds een oneindige loop in je macro1 staat, zal dit je echt niet helpen, dan locked excel bij de eerste wijziging die je maakt.
Probeer dit eens in het workbook codepaneel te zetten.
Visual Basic:
1
2
3
4
5
6
7
8
9
Dim savetijd As Date


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If DateDiff("s", savetijd, Now) > 30 Then
    ActiveWorkbook.Save
    savetijd = Now
End If
End Sub


En, met Notna, 30 seconden (waar dit op ingesteld is) is echt niet prettig. Overweeg inderdaad een minuut of vijf of meer.
Hoe maak ik dan die macro zo aan, codepaneel? Want als ik een macro maak met jouw code dan kan ik hem niet uitvoeren...

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 07:30
In excel: Alt-F11. Je komt in de VBA editor. In de project explorer (het windows explorer achtige geval links boven): Zoek het betreffende bestand (probeer het eerst uit op een leeg bestand), vouw open en dubelklik op "This Workbook". Paste daar de volgende code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
Dim savetijd As Date 


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox DateDiff("s", savetijd, Now)
If DateDiff("s", savetijd, Now) > 30 Then 
    ActiveWorkbook.Save 
    savetijd = Now 
End If 
End Sub

Ga terug naar excel. Verander iets. Er verschijnt een messagebox (dialoog) met een nogal groot getal. Klik OK. verander nog iets. Er verschijnt een box met het aantal seconden sinds de laatste wijziging. Om de dertig seconden wordt die "teller" gereset en het werkboek gesaved.
Haal de MsgBox regel weg zodra je alles wel OK vindt.

Verwijderd

Topicstarter
Ik krijg dit:
Afbeeldingslocatie: http://elektron.its.tudelft.nl/~dokter99/temp/proj.png
Ik kan dus niet door mappem bladeren somehow!?
EDIT: Ik krijg 'het project kan niet worden geopend' als ik dubbelklik op het bestand

[ Voor 25% gewijzigd door Verwijderd op 28-03-2007 15:09 ]


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 07:30
? Spannend. Kijk eens of je macro beveiliging misschien op "hoog" staat? (Eigenlijk heb ik geen idee, dit is vrij ongebruikelijk.)

Verwijderd

als je map gedeeld is kan je niet door het vbaproject bladeren. tijdelijk uitzetten.

Verwijderd

Topicstarter
Had inderdaad met delen te maken. Ik heb nu de code van onkl ingevoerd, maar er gebeurd niets, terwijl ik de inhoud wel verander!

EDIT: ik heb het opgeslagen als .xlsm (dus met ondersteuning voor macro's)

[ Voor 23% gewijzigd door Verwijderd op 28-03-2007 15:36 ]


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 07:30
Verwijderd schreef op woensdag 28 maart 2007 @ 15:29:
Had inderdaad met delen te maken. Ik heb nu de code van onkl ingevoerd, maar er gebeurd niets, terwijl ik de inhoud wel verander!

EDIT: ik heb het opgeslagen als .xlsm (dus met ondersteuning voor macro's)
Het zou als xls gewoon moeten werken. Ik heb je een werkend bestandje gemaild. Probeer daar de code even te vinden.

Verwijderd

Topicstarter
Bedankt voor het bestand, dat doet prima wat het moet doen. Alleen nu zoek ik een scriptcode om gewoon om de 30 sec op te slaan en niet als er iets veranderd.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

Excel is daar niet voor gemaakt. Ik zie het dan ook op een gegeven moment gebeuren dat het bestand wordt gesloopt. Verwacht je dat het bestand elke {30/aantal gebruikers} seconden wordt opgeslagen? Heb je daar de bandbreedte voor?

Waarom eigenlijk in puur Excel? Ik kan me zo 1-2-3 geen reden voor de geest halen waarom je dit zo zou willen, zonder dat er heel veel betere manieren zijn. Ik zou al snel gaan kijken naar een onderliggende DB en waarschijnlijk ook een andere frontend dan Excel.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

F_J_K heeft gelijk, het lijkt erop alsof je databasetransactiefunctionaliteit wil inbouwen in excel. maar als je dat persé wil, bekijk dan eens application.ontime, zoals al eerder in deze draad door Lustucru aangegeven.

Verwijderd

Topicstarter
Ja, maar ik wil nu gewoon in plaats van onstatechange altijd zeg maar, maar als ik er simplel sub test van maak in de alt f11 editor, dan gebeurd er niet veel.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zit je F1 vast ofzo? Met alles wat hierboven geroepen is zou je er toch uit moeten komen.

Voorkauwmodus:
maak een aparte module en plaats het volgende:
code:
1
2
3
4
5
6
Public sub SaveMe
    if not thisworkbook.saved then
          thisworkbook.save
    end if
    application.ontime now+Timevalue("00:01:00"), "SaveMe"
end sub

Een keer runnen en hij blijft het doen, of in workbook.open al meteen starten.

[ Voor 3% gewijzigd door Lustucru op 29-03-2007 12:50 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

Hoebedoelje, wat zet je in een Test()? En natuurlijk werkt dat niet zonder het met de hand te draaien, als je het in een Test() zet.

En het lijkt me toch verstandig antwoord te geven op mijn vraag over (tenminste) het aantal seconden en de bandbreedte :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
Ok, het leek mooi te werken in een bron bestand. Alleen toen ging ik delen. Je krijgt de melding dat je macro's niet meer kan bewerken, akkoord. Dan ga ik het bestand nog een keer openen en voer daar dezelfde macro uit, maar die heeft geen effect. Het bestand wordt niet opgeslagen.
Ik heb al geprobeerd om thisworkbook te vervangen door activeworkbook, maar dat maakt niets uit.

Verwijderd

Topicstarter
F_J_K schreef op donderdag 29 maart 2007 @ 14:29:
Hoebedoelje, wat zet je in een Test()? En natuurlijk werkt dat niet zonder het met de hand te draaien, als je het in een Test() zet.

En het lijkt me toch verstandig antwoord te geven op mijn vraag over (tenminste) het aantal seconden en de bandbreedte :)
Het wordt maar door 2 gebruikers geopend, dus dat valt wel mee hoor!

Verwijderd

Topicstarter
Lustucru schreef op donderdag 29 maart 2007 @ 12:47:
Zit je F1 vast ofzo? Met alles wat hierboven geroepen is zou je er toch uit moeten komen.

Voorkauwmodus:
maak een aparte module en plaats het volgende:
code:
1
2
3
4
5
6
Public sub SaveMe
    if not thisworkbook.saved then
          thisworkbook.save
    end if
    application.ontime now+Timevalue("00:01:00"), "SaveMe"
end sub

Een keer runnen en hij blijft het doen, of in workbook.open al meteen starten.
Dit werkt, maar niet als ik de wermap deel, dan werkt de macro slechts in de eerst geopende versie van het bestand. (ik run ze op beide)

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

Het werkt precies zoals je het systeem opdracht geeft te werken: sla op als het meer dan 30 seconden geleden is dat het is opgelagen. En bij persoon 2 is het al net steeds opgeslagen door persoon 1 :P

De eerste reply -> [google=excel timer] -> de eerste hit -> http://www.cpearson.com/Excel/ontime.htm -> klaar \o/

(Al herhaal ik mijn mening over het verkeerde tool gebruiken, maar dat is niet aan mij).
offtopic:
Gebruik ajb de edit knop als je iets wilt toevoegen terwijl niemand anders heeft gereageerd. Anders lijkt het zo op je topic 'omhoog schoppen'.

[ Voor 4% gewijzigd door F_J_K op 29-03-2007 19:11 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
Haha, idd, (beetje) dom van mij. Maar wat is er mis met excel. Je kunt nu op 1 computer cellen aanpassen en op de andere worden de waardes aangepast en daar sluit je een beamer op aan.

Verwijderd

een live aanpassing van de data is wel niet mogelijk via delen. daarvoor dient het werkblad gesloten en opnieuw geopend te worden.

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 30 maart 2007 @ 10:13:
een live aanpassing van de data is wel niet mogelijk via delen. daarvoor dient het werkblad gesloten en opnieuw geopend te worden.
Nee hoor, dat gaat perfect!

  • Notna
  • Registratie: November 2002
  • Laatst online: 09:04

Notna

Moderator General Chat / Wonen & Mobiliteit

Where are you?®

Een klein beetje eigenwijs ben je wel he ;)

Excel is een mooi prgramma, maar wat jij ermee wil is het niet voor geschikt. Jij wil een DB maken die dynamisch is en waar continu data in veranderd kan worden. Excel zal het misschien nu wel trekken, maar houd er rekening eme dat als het vast loopt (door teveeld ata/oplsaan enz) het corrupt wordt en je dus niks meer hebt.

Wil je dit verder nemen zal je moete kijken naar een andere programma wat meer gericht is op dynamisch groep werk :)

Xbox Live ID:Notna8310


  • Johny58
  • Registratie: Juni 2002
  • Laatst online: 12-04 16:06
Google heeft in zijn webbased-excel-kloon standaard deze functionalieit zitten. Als ik het me correct herinner worden de openstaande werkbladen realtime bijgewerkt via wat XML communicatie op de achtergrond. Dus zonder dat het venster zelf ververst. En ik meende dat het ook de mogelijkheid had om xls bestanden te importeren.

"Hippopotomonstrosesquippedaliophobia" is the term used to describe the fear of long words.

Pagina: 1