Stránka 1 z 1

Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 09 bře 2010 12:05
od JirkaT
Zdravim všechny, potřeboval bych poradit. Je možný vytvořit kopii excel, nebo word souboru do jiné složky tak, že pokud provedu nějakou změnu v originále, promítne se mi do kopie? Díky

//podle pravidel by měl název co nejpřesněji popisovat podstatu dotazu

//změna původního názvu Duplicita souboru

//mmm

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 09 bře 2010 14:48
od mike007
Ano, to lze.
Lze napsat makro, které by při každém uložení originálního dokumentu vytvořilo novou kopii, tzn. přepsalo tu starou.

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 09 bře 2010 15:46
od JirkaT
Makra nejsou moje silná stránka, můžeš mi, prosím, poradit postup? Díky

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 09 bře 2010 18:26
od mike007
Otevři Excelový dokument, na který chceš vytvářet zálohu a přejdi do prostředí VBA (kl.zkratka Alt+F11)

1. V panelu nalevo dvakrát klikni na ThisWorkBook:

Obrázek

3. Do prázdného okna vlož toto makro:

[syntax lang=vb filename=makro.txt]
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call zaloha
End Sub
[/syntax]

4. V menu VBA: Insert --> Module

5. Do prázdného okna vlož toto makro:

[syntax lang=vb filename=makro2.txt]
Sub zaloha()
Dim sesit As Workbook, BackupFileName As String, i As Integer, OK As Boolean
If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
Set sesit = ActiveWorkbook
If sesit.Path = "" Then
Application.Dialogs(xlDialogSaveAs).Show
Else
BackupFileName = "zaloha.xls"
OK = False
On Error GoTo chyba
If Dir("c:\" & BackupFileName) <> "" Then
Kill "c:\" & BackupFileName
End If
With sesit
Application.StatusBar = "Vytvářím zálohu..."
.Save
Application.StatusBar = "Ukládám zálohu..."
.SaveCopyAs "c:\" & BackupFileName
OK = True
End With
End If
chyba:
Set sesit = Nothing
Application.StatusBar = False
If Not OK Then
MsgBox "Záloha nebyla vytvořena!", vbExclamation, ThisWorkbook.Name
End If
End Sub
[/syntax]

Prostředí VBA zavři klasicky křížkem v pravém horním rohu.

Nyní při každém uložení dokumentu bude vytvořena jeho záloha, která bude umístěna na C:\

Makro lze spustit kdykoliv budeš chtít, nejen tedy při ukládání. Spustíš ho klasicky ze seznamu maker (Alt+F8)

Také je zde možnost vytvářet zálohu po každé provedené změně v dokumentu. Stačí v událostní proceduře (první makro) změnit první řádek z
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) na
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range). Toto ale v případě velkých souborů nedoporučuji, protože může během vytváření zálohy docházet ke zpomalení práce. Určitě bys byl nerad, kdyby po každé změně si musel čekat třeba půl minuty než Excel vytvoří zálohu... To bys toho moc neudělal :) To bych se spíše přikláněl k tomu udělat makro, které by vytvářelo zálohu třeba každých 5-10 minut. To už se dá přežít ;)

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 10 bře 2010 08:53
od JirkaT
Je to paráda, funguje to bezvadně, jen mam ještě takovou doplňující otázku. Je možný, aby kopie byla přístupná pouze pro čtení, aby uživatel neměl možnost provést změny a následně je uložit?
Jinak díky

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 10 bře 2010 09:20
od alenka_v_říši_divů
http://office.microsoft.com/cs-cz/excel ... 91029.aspx zkoušel si?
Nebo co zaheslovat? Snad to platí i pro kopii. V případě války bych to řešil jednoduchou dávkou s příkazem attrib.
Ale pokud to jde, tak jistě někdo znalej excelu dá echo :)

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 12 bře 2010 10:50
od JirkaT
Zaheslovat soubor při uložení znam, já myslel, jestli to jde nějak udělat přes to makro, abych nemusel každej originál zaheslovávat.

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 12 bře 2010 10:53
od alenka_v_říši_divů
To nevím, ale viděl sem v tomto tématu dva znalce excelu a neodpověděli... takže asi tak.
Já jakožto neznalej, bych to řešil baťáky...

Re: Automatické provádění změn v kopii v souhlasu s originálem

Napsal: 12 bře 2010 15:56
od mike007
alenka_v_říši_divů: Nemaluj čerta na zeď. Nemám na starosti jenom Pc-help ...


Tady je upravená subrutina (to druhé makro)

[syntax lang=vb filename=makro2.txt]
Sub zaloha()
Dim sesit As Workbook, BackupFileName As String, i As Integer, OK As Boolean
Application.ScreenUpdating = False
If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
Set sesit = ActiveWorkbook
If sesit.Path = "" Then
Application.Dialogs(xlDialogSaveAs).Show
Else
BackupFileName = "c:\zaloha.xls"
OK = False
On Error GoTo chyba
If Dir(BackupFileName) <> "" Then
Kill BackupFileName
End If
With sesit
Application.StatusBar = "Vytvářím zálohu..."
.Save
Application.StatusBar = "Ukládám zálohu..."
.SaveCopyAs BackupFileName
OK = True
End With
End If
Application.Workbooks.Open (BackupFileName)
With ActiveWorkbook
.WritePassword = "111"
Application.DisplayAlerts = False
.Save
.Close
Application.DisplayAlerts = True
End With
chyba:
Set sesit = Nothing
Application.StatusBar = False
If Not OK Then
MsgBox "Záloha nebyla vytvořena!", vbExclamation, ThisWorkbook.Name
End If
Application.ScreenUpdating = True
End Sub
[/syntax]

Na řádku 25 si do uvozovek vlož heslo (nyní nastaveno 111), kterým se bude záloha zamykat proti úpravám. Záloha nyní půjde otevřít pouze pro čtení.

Kdyby jsi to chtěl mít zamčené komplet, aby se do zálohy nikdo nedostal, tak .WritePassword nahraď .Password

Vřele ti doporučuji VBA zamknout, aby ti někdo to heslo z makra neokoukal...
Ve VBA: Tools --> VBAProject Properties... --> záložka Protection --> zaškrtni Lock project for viewing a dole zadej heslo