Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - Automatyczna kopia zapasowa

mati810 05 Maj 2016 22:43 1560 17
  • #1 05 Maj 2016 22:43
    mati810
    Poziom 8  

    Witam,

    przedstawię zarys sytuacji. W firmie każdy pracownik posiada swój plik excel, do którego wprowadza na bieżąco wyniki sprzedaży, co pozwala mu na bieżące śledzenie realizacji celów. Dane pobierane są do osobnego pliku w którym śledzę wyniki całego zespołu. Pliki są co miesiąc archiwizowane, a co miesiąc każdy otrzymuje nowy plik z zaktualizowanymi limitami sprzedaży (ot, życie w korpo).

    W kwietniu stało się tak, że omyłkowo ktoś skasował cały folder z plikami z dysku sieciowego i wszystko piorun strzelił.

    Dlatego potrzebuję pomocy. Potrzebuję makra, które przy każdym zamknięciu lub w określonym interwale czasu będzie na innym dysku zapisywał kopię zapasową tego samego arkusza tak, aby gdy ktoś ze wspólnego katalogu usunie pliki to aby były zapisane jeszcze w innej lokalizacji. Dodam, że nie mogę użyć standardowych narzedzi i programów do backupu, bo nie posiadam uprawnień administratora.

    Da radę? :)

    0 17
  • #2 05 Maj 2016 23:00
    JRV
    Specjalista - VBA, Excel

    mati810 napisał:
    przy każdym zamknięciu

    w kodzie skoroszytu(zeszytu)
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    1
  • #3 09 Cze 2017 11:34
    defusor
    Poziom 10  

    Witam serdecznie,

    Miałbym pytanie odnośnie tego skryptu. Gdzie popełniam błąd podczas zamykania pliku wyskakuje taki oto błąd?

    Kod:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveWorkbook.SaveCopyAs "D:\kopiia " & Date & " Ser " & Time
    End Sub

    0
  • #4 09 Cze 2017 11:48
    JRV
    Specjalista - VBA, Excel

    JRV napisał:
    ThisWorkbook.SaveCopyAs "Z:\kopia " & Date & " " & Time 'tu lokalizacja, nazwa
    To bylo przykladowo.
    Nazwa pliku musi być zgodne z zasadami dla nazwy i koniec ".xls" lub ".xlsx"

    0
  • #5 09 Cze 2017 12:39
    defusor
    Poziom 10  

    Dzięki za tak szybką odpowiedź.

    Mam pytanie, czy to oznacza, że makro będzie działało tylko na plikach o rozszerzeniu *.xls lub *.xlsx. (na xlsm już nie ?)

    Czy postać musi wyglądać tak ?

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.SaveCopyAs "D:\kopia " & Date & " Serwiss " & Time & ".xlsx"
    End Sub

    Bez względu na rozszerzenie. Błąd jest ten sam.

    0
  • #7 09 Cze 2017 13:55
    defusor
    Poziom 10  

    Dzięki za link,

    Programowanie to nie do końca moja dziedzina. Potrzebuję, aby podczas zamknięcia lub przy skrócie ctrl+s lub kliknięciu na zapis, aby sama tworzyła się kopia z datą. Problem w tym, że przeszukałem już trochę forów i w zasadzie nic nie znalazłem. Sam Excel ma jakiś mechanizm kopi no on jest szczerze mówiąc kiepski. Tutaj znalazłem coś nowego i próbuje z twoim skryptem.

    I jest jakiś progres.

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

    ThisWorkbook.SaveCopyAs "D:\kopia Serwis" & Format(Date, "yyyymmdd") & "_" & Format(Time(), "hhmmss") & ".xlsm"

    End Sub

    Teraz co zrobić, żeby reagował także na ctrl+s lub samo kliknięcie zapisz?

    0
  • #8 09 Cze 2017 14:03
    JRV
    Specjalista - VBA, Excel

    Przeczytaj w pomocy VBA OnKey

    0
  • #9 09 Cze 2017 14:47
    defusor
    Poziom 10  

    Nie do końca wiem jeszcze jak to pracuje. Gdzie robię błąd?

    Code:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    

    ThisWorkbook.SaveCopyAs "D:\kopia Serwis" & Format(Date, "yyyymmdd") & "_" & Format(Time(), "hhmmss") & ".xlsm"

    End Sub


    Private Sub Workbook_Activate()

    Application.OnKey "^{s}", "Zapis"

    End Sub

    Sub Zapis()

    ThisWorkbook.SaveCopyAs "D:\kopia Serwis" & Format(Date, "yyyymmdd") & "_" & Format(Time(), "hhmmss") & ".xlsm"

    End Sub

    0
  • #10 09 Cze 2017 15:00
    JRV
    Specjalista - VBA, Excel

    's ' nie jest specjalny symwol jako np. F1, Tab, etc.
    Application.OnKey "^s", "Zapis"

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Zapis
    End Sub

    0
  • #11 09 Cze 2017 16:16
    defusor
    Poziom 10  

    Dzięki za informacje z tym skrótem. Jednak nadal nie chce tworzyć kopii po naciśnięciu skrótu.

    Code:


    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.SaveCopyAs "D:\kopia Serwis" & Format(Date, "yyyymmdd") & "_" & Format(Time(), "hhmmss") & ".xlsm"
    Application.OnKey "^s", "Zapis"
    End Sub

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Zapis
    End Sub


    Myślałem, że będzie to trochę prostsze.

    0
  • #12 09 Cze 2017 16:49
    JRV
    Specjalista - VBA, Excel

    Jeśli ogicznego myślenia, to nie ciężko
    Bylo dobrze - nowy skrot po otwarcju pliku

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Proc 'zapis'(w modulu)
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Wywolanie proc 'zapys' przed zamknieciem pliku
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #13 09 Cze 2017 17:10
    defusor
    Poziom 10  

    Dzięki wielkie,

    Miałem podobnie, ale ciągle podczas użycia skrótu wyskakuje taki błąd:

    Dlaczego on odwołuje się do dysku D:\

    Gdy skopiowałem słowo w słowo jest ten sam komunikat. W zasadzie wyskakuje przy użyciu jakiegokolwiek skrótu użytego z ctrl.

    0
  • #14 09 Cze 2017 17:36
    JRV
    Specjalista - VBA, Excel

    defusor napisał:
    Dlaczego on odwołuje się do dysku D:\
    JRV napisał:
    To bylo przykladowo.
    Wpisz sciezku jaku chcesz
    Sub Zapis() ma byc w modulu, nie w kodzie arkusza

    1
  • #15 09 Cze 2017 17:42
    defusor
    Poziom 10  

    Wielkie dzięki,

    Na to bym nie wpadł. Dlaczego część z sub zapis() musi znajdować się w części modules?
    Ogólnie masz u mnie browara

    0
  • #16 09 Cze 2017 18:07
    JRV
    Specjalista - VBA, Excel

    defusor napisał:
    Dlaczego część z sub zapis() musi znajdować się w części modules?

    To wszystko jest w pomocy F1

    0
  • #17 09 Cze 2017 18:09
    defusor
    Poziom 10  

    Jednak piwo się należy.

    A jest jakaś możliwość, że kopia będzie się robiła również po kliknięciu myszką na ikonę zapisu (dyskietki)?
    Bo przez rejestr makra wyłapuje tylko komendę save.as

    0
  • #18 09 Cze 2017 19:54
    clubs
    Poziom 29  

    defusor napisał:
    A jest jakaś możliwość, że kopia będzie się robiła również po kliknięciu myszką na ikonę zapisu (dyskietki)?

    Dodaj
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0