< návrat zpět

MS Excel


Téma: makro pro ikládání sešitu rss

Zaslal/a 2.1.2012 23:32

Dobrý den, prosil bych o radu jak makrem uložit sešit s nějakým daným názvem a přiřadit mu ještě uktuální datum nebo datum z vybrané buňky. příklad pokus_2.1.2012.xls

děkuji za nějakou pomoc

Zaslat odpověď >

#006838
avatar
Ahoj. Vyber si co potřebuješ z této funkce.
- Vytváří nový adresář podle datumu nebo nakopíruje do existujícího adresáře
- Vytvoří (zkopíruje) více listů najednou
- Uloží pod datumem a jménem
- Pokud máš nějaký kommrimační program, pak se Ti vytvoří archív. Archív vytvářím proto, že konti tabulky jsou objemné ale dají se velmi dobře komprimovat. Po tomto volám funkci na sestavení a odeslání emailu. 7z je free a vypadá to moc hezky, když jej voláš z VBA. R.

Function uloz_sestavu_do_souboru()
Dim i As Long
Dim OutSesit As Workbook
Dim SrcSesit As Workbook

Dim fs As Object
Dim f As Object
Dim adresar As String
Dim NewFileName As String
Dim exc As String

On Error GoTo LabelErr
With Worksheets(cWorkData)
.Activate
Set fs = CreateObject("Scripting.FileSystemObject")

adresar = cPathFile & Format(Now(), "yyyy mm dd")

If Not fs.FolderExists(adresar) Then
fs.CreateFolder (adresar)
End If
'Set f = fs.GetFile(cPathFile)
End With

GoTo LabelOK
LabelErr:
MsgBox "Chyba : " & Err.Number & " - " & Err.Description
Exit Function
LabelOK:
On Error GoTo 0

Set SrcSesit = ActiveWorkbook

Worksheets(Array("DATA", "PIVOT", "PIVOT 1", "PIVOT 2")).Copy
Set OutSesit = ActiveWorkbook
SrcSesit.Activate

NewFileName = adresar & "\" & Format(Now(), "yyyy mm dd") & " - FG.xls"

' Call kopiruj_vba_kody

Application.DisplayAlerts = False
OutSesit.SaveAs Filename:=NewFileName
OutSesit.Close SaveChanges:=True
Application.DisplayAlerts = True

exc = cPath7z & "7zG.exe a """
exc = exc & adresar & "\" & Format(Now(), "yyyy mm dd") & " - FG.zip"" """
exc = exc & adresar & "\" & Format(Now(), "yyyy mm dd") & " - FG.xls"""

' Debug.Print exc

Call ChDir(cPath7z)
Call Shell(exc, 1)

' Nastav zpět adresář pro otevírání souborů.
Call ChDir("c:\GTable\")

End Function

citovat
#006862
avatar
No pěkné, pěkné,,, díky. Ještě ale něco. mám toto makro

adresar = cPathFile
NewFileName = adresar & "DKM_" & Format(Now(), "yyyy.mm.dd") & ".xls"
ActiveWorkbook.SaveAs Filename:=NewFileName

po jeho provedení se ocitnu v tom konkrétním souboru DKM_datum.xls .Potřebuji však abych zůstal v původní šabloně. A pak ještě další věc. Ta šablona má dva listy. potřebuji tím makrem uložit pouze jedenebo druhý list. To znamená aby uložený soubor obsahoval jen jeden list. Nevím jestli je to dostatečně pochopitelné.citovat
#006863
avatar
Do tohoto pole si můžeš vložit více listů najednou a najednou se zkopírují a vytvoří nový soubor.
Worksheets(Array("DATA", "PIVOT", "PIVOT 1", "PIVOT 2")).Copypokud je jen jeden stačí bez "array"Worksheets("DATA").Copy
Po uložení a uzavření souboru se vrátíš do předchozího souboru. Pokud bys byl jinde, můžeš primárně doplnit na konec makra
SrcSesit.Activate
a vrátíš se do sešitu který chceš, který chceš.
Všimni jsi kdy nastavují "SET"
Po uzavření nesmíš použít OutSesit.??? Protože již neobsahuje instanci Workbook.
Čistejší by ještě bylo, kdyby jsi po uzavření sešitu dopsal set OutSesit = Nothing citovat
#006888
avatar
když celou tu funkci nakopíruju do do nějakého sešitu a spustím tak vygazuje chybu 9 - Subscript out of range a nemohu to najít.citovat
#006925
avatar
Asi máš něco špatně. Zkus krokovat makro až k chybě a nebo pošli vzorek.citovat
#006950
avatar
No jedná se o ten kod co jsi mi poslal jako první. Celé jsem to zkopíroval do sešitu, upravil názvy listů a to je vše. Když to pak spustím tak vyskočí ta chyba. Nebo je potřeba tam ještě něco co bych měl upravit podle sebe?citovat
#006952
avatar
v editore VBA si to odkrokuj tlacitkom F8 (ako Ti pisal RomanNTA) potom uvidis v ktorom riadku Ti vyhodi chybucitovat
#006957
avatar
když najedu kurzorem na tento řádek

With Worksheets(cWorkData)

tak se zobrazí " Worksheets(cWorkData) = <Subscript out off range> "

Ale nevím co s tím.citovat
#006970
avatar
cWorkData je moje konstanta ... mám ji definovanou jako GLOBAL CONST cWorkData = "List1" (např.)

pokud použiješ konstrukci with nejaký objekt pak již tento nemusíš psát a odkazuješ se na něj tečkou na počátku
tj
with Worksheets(cWorkData)
.Range("A1").value = "blabla"
end with

tento kousek kodu znamená, že chceš pracovat s excelovským listem podle jména v konstantě cWorkData a na tomto listu zapíšeš hodnotu do buňky A1. Není důležité, na kterém listu se nacházíš a "vždy" to bude fungovat.
Chyba kterou to hází je proto, že nezná proměnnou nebo konstantu cWorkData. R.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse