Excel shranjevanje (z datumom/časom v imenu datoteke)

Pomoč pri delu z MS Excelom
Odgovori
ant
Prispevkov: 7
Pridružen: So Mar 07, 2009 10:38 am

Excel shranjevanje (z datumom/časom v imenu datoteke)

Odgovor Napisal/-a ant »

Kako bi se ob vsakokratnem shranjevanju (Alt-F-S) datoteka - brez intervencije uporabnika - shranila z imenom, ki bi vsebovalo poleg (le prvič vpisanega) fiksnega dela imena še variabilni del z navedbo časa zapiranja (npr. TABELA_yyyymmddhhmmss).

Ali pa - alternativno (glede na to, da se datum hranjenja itak beleži kot samostojno polje) - da bi se datoteka shranjevala vedno pod istim imenom, vendar NE BI "povozila" predhodnih datotek z istim imenom.

Idealno bi bilo, da bi se ob tem (celotna) datoteka šla še v status "protect sheet - all cells locked".
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Koda: Izberi vse

Sub Shrani()
Dim list As Worksheet

For Each list In ThisWorkbook.Sheets
    list.Protect "geslo"
Next

ThisWorkbook.SaveAs "FiksenDelImena" & "TABELA_" & Year(Date) & "-" & Month(Date) & "-" & Day(Date) & "+" & Hour(Time) & "-" & Minute(Time) & "-" & Second(Time), xlNormal
End Sub

Naprimer nekaj takega. Jaz sem dodal še neke znake za ločevanje med posameznimi elementi (mm dd yyy ...).
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
ant
Prispevkov: 7
Pridružen: So Mar 07, 2009 10:38 am

Odgovor Napisal/-a ant »

Hmm, tole mi pa ne dela... Kot ste me naučili v sosednji temi, sem kodo shranil (alt-F11, "zalepi" v worksheet_1)... ampak mi ne naredi čisto nič. Kje ga lomim ?
(ali je mogoče izvesti tudi na drugi način... da datoteka (bez spreminjanja imena) ob hranjenju ne bi "povozila" prehodne... tako bi imel več datotek z istim imenom, a z različnimi datumi hranjenja).
admin
Site Admin
Prispevkov: 3712
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Kljuka13 vam je napisal funkcijo, ki bo željeno delo opravila, če jo pokličete. Torej če izberete Orodja/Makri/Zaženi in funkcijo izvedete, boste s tem zvezek shranili pod novim imenom - imenu bo dodan datum.

Ker pa vi želite, da se to zgodi avtomatično ob vsakem shranjevanju, torej ko pritisnete CTRL+S ali Datoteka/Shrani, pa morate to kodo tam tudi izvesti. Odprite torej VBA urejevalnik ter pod ThisWorkbook skopirajte sledečo programsko kodo:

Koda: Izberi vse

Option Explicit

Sub Shrani()
  Dim list As Worksheet

  For Each list In ThisWorkbook.Sheets
    list.Protect "geslo"
  Next

  ThisWorkbook.SaveAs "FiksenDelImena" & "TABELA_" & Year(Date) & "-" & _
                      Month(Date) & "-" & Day(Date) & "+" & Hour(Time) & _
                      "-" & Minute(Time) & "-" & Second(Time), xlNormal
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Shrani
End Sub
lp,
Matjaž Prtenjak
Administrator
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Ups ... Pa sem res slabo prebral :oops:
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
ant
Prispevkov: 7
Pridružen: So Mar 07, 2009 10:38 am

Odgovor Napisal/-a ant »

Mojstri, svaka čast ... Zadeva deluje že (skoraj) tako, kot sem si predstavljal - ampak samo prvič. Ko pa poskusim datoteko (že enkrat shranjeno s tem avtomatizmom) shraniti drugič, se Excel "upre" (Microsoft Excel has encountered a problem and needs to close...) Kaj je narobe?
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Hja. Poskusite debuggirati kodo. Odprite VBA. Nato pa kliknite pred vrstico

list.Protect "geslo"

na tisti visok sivi trak ob robu. Prikazala se bo rdeča pika. Tukaj se bo poganjanje makra delno zaustavilo. Potem kliknite še pred vrstico

ThisWorkbook.SaveAs

Sedaj poženite makro. Najprej se bo rumeno obarvala vrstica list.Protect ... Kliknite F5. Če se izvajanje nadaljuje pomeni, da je problem pri shranjevanju. Tukaj pa nimam pametne ideje za izboljšanje. :(
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
ant
Prispevkov: 7
Pridružen: So Mar 07, 2009 10:38 am

Odgovor Napisal/-a ant »

...po tem, ko "porumenim" vrstico LIST.PROTECT "GESLO" moram 3x pritisniti F5, da se "porumeni" "THIS WORKBOOK SAVE AS" vrstica. Ko pa še naslednjič pritisnem F5, pa Excel spet javi "MS Excel has encountered a problem..."
Očitno prihaja do nekakšnega dvojnega shranjevanja. Ko namreč to funkcijo skopiram v čisto svežo Excel datoteko in pritisnem altF_S za hranjenje, mi odpre okno za shranjevanje (Save As...), kjer je ta datoteka (s pravilno pripetim datumom) že shranjena. Zanimivo pa je, da pri nadaljnjih hranjenjih tega okna (Save As..) ne prikazuje več, ampak se takoj upre "MS Excel has encountered a problem..."
admin
Site Admin
Prispevkov: 3712
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Res bo kar pravite... Excel pade v neskončno zanko... ampak ne bom vam sedaj razlagal tega :). Zamenjajte funkcijo Workbook_BeforeSave s spodnjo:

Koda: Izberi vse

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error GoTo konec:
  Cancel = True
  Application.EnableEvents = False
  Shrani
  
konec:
  Application.EnableEvents = True
End Sub
lp,
Matjaž Prtenjak
Administrator
kljuka13
Prispevkov: 257
Pridružen: Po Sep 10, 2007 4:29 pm
Kraj: Maribor

Odgovor Napisal/-a kljuka13 »

Hja. Pa res. Namreč, ko vi shranite on požene makro Shrani. Makro potem želi shraniti dokument in spet se pokliče makro Shrani ... 8)
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
Odgovori