2016-08-05 14 views
6

Mam dokumenty Excel z makrami z formularzami wejściowymi i aktualizacyjnymi dla informacji, dokument służy jako miesięczna baza danych, z której można również uruchamiać raporty.Udostępniony dokument Excel

Problem polega na tym, że przy korzystaniu z dokumentu czasami opcje wprowadzania i aktualizacji są używane w tym samym czasie, powodując utratę informacji. Zarówno wejściowe i wyjściowe zapisać na końcu makra, aby zminimalizować straty, ale zastanawiałem się, czy istnieje mimo to sprawdzanie w czasie wykonywania, jeśli istnieje makro używane przez innego użytkownika, a jeśli tak, opóźnić następne uruchomienie makro, aż do drugiego użytkownik jest skończony?

+1

Dobre pytanie ... Czy przez chwilę myślałem przez chwilę :) –

Odpowiedz

2

Jest jeden sposób, jaki mogę wymyślić. Logicznie powinno działać. Jednak nie przetestowałem tego pod .

  1. Tworzenie arkusza temp i ukryć go
  2. Kiedy ktoś uruchamia makro, sprawdź czy komórka A1 tego arkusza jest pusta lub nie
  3. Jeśli jest pusta następnie uruchomić makro
  4. przed uruchomieniem makro, napisać do tej komórki i po uruchomieniu makra, wyczyścić zawartość drugiej komórce
  5. Sandwich kodu makra jak wspomniano poniżej

Kodeksu

Sub Sample() 
    Dim ws As Worksheet 

    ThisWorkbook.Save 
    Doevents 

    Set ws = ThisWorkbook.Sheets("HiddenSheetName") 

    If Len(Trim(ws.Range("A1").Value)) = 0 Then 
     ws.Range("A1").Value = "Macro Starts" 
     ThisWorkbook.Save 
     Doevents 

     ' 
     '~~> Rest of your code goes here 
     ' 

     ws.Range("A1").ClearContents 
     ThisWorkbook.Save 
     Doevents 
    Else 
     MsgBox "Please try after some time. There is a macro running... Blah Blah" 
    End If 
End Sub 

UWAGA: Gdy kod działa, nie można cofnąć zmiany, ponieważ kod zapisać plik programowo. Zmiany są trwałe. W pliku, który nie jest udostępniony, możesz cofnąć, zamykając plik bez zapisywania i ponownego otwierania.

+0

https://en.wikipedia.org/wiki/Semaphore_(programming) –

+0

Och, to naprawdę genialne, myślałem o tym przez tydzień bez skutku i wymyślić coś tak prostego i eleganckiego tak szybko. Dziękuję Ci bardzo. @Siddharth Rout –

+0

Przetestowałeś to tak, jak tego nie testowałem .... @SaraC –