V adresáři D:\moje\*.xlsm mám mnoho souborů Excel s různými jmény. Potřebuji nějak automaticky udělat následující operaci se všemi soubory:
Každý soubor otevřít, spustit makro (ve všech souborech je stejné), počkat až se makro provede (stahuje data z netu) a uložit.
Poradí někdo, děkuji?
hromadné spuštění VBA v mnoha souborech
-
- Level 2
- Příspěvky: 197
- Registrován: duben 12
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: hromadné spuštění VBA v mnoha souborech
Vypsat soubory http://office.lasakovi.com/excel/vba-so ... -adresare/ do listu
cyklem for to http://office.lasakovi.com/excel/vba-te ... ext-cykly/
provést spuštění makra v jednotlivých souborech jsou načteny z předchozího (makro pod názvem například Program)
Application.Run "D:\moje\soubor-s-makre.xlsm!Program"
if staženo (makro je u konce) ulož a ukončí daný soubor
ActiveWorkbook.SaveAs "soubor-s-makre.xlsm"
cyklem for to http://office.lasakovi.com/excel/vba-te ... ext-cykly/
provést spuštění makra v jednotlivých souborech jsou načteny z předchozího (makro pod názvem například Program)
Application.Run "D:\moje\soubor-s-makre.xlsm!Program"
if staženo (makro je u konce) ulož a ukončí daný soubor
ActiveWorkbook.SaveAs "soubor-s-makre.xlsm"
Více o kancelářském balíku MS Office na http://office.lasakovi.com/ (Word, Excel, PowerPoint, Access, Outlook, Project, OneNote)
Re: hromadné spuštění VBA v mnoha souborech
Dík za návod. Vyzkouším.
--- Doplnění předchozího příspěvku (02 Kvě 2012 03:00) ---
Tak jsem si udělal makro, načetl soubory do List1 (ta ukázka v odkazu nefungovala, takže jsem si našel jiný vzor), ale skončil jsem na příkazu "Application.Run". Do proměnné "f" jsem načetl název souboru (včetně cesty), ale nevím jak to správně zadat do toho Application.Run.
Tak jak jsem to napsal já (Application.Run "f!Program") to nefunguje, ale nevím jaká je správná syntaxe.
--- Doplnění předchozího příspěvku (02 Kvě 2012 03:00) ---
Tak jsem si udělal makro, načetl soubory do List1 (ta ukázka v odkazu nefungovala, takže jsem si našel jiný vzor), ale skončil jsem na příkazu "Application.Run". Do proměnné "f" jsem načetl název souboru (včetně cesty), ale nevím jak to správně zadat do toho Application.Run.
Tak jak jsem to napsal já (Application.Run "f!Program") to nefunguje, ale nevím jaká je správná syntaxe.
Kód: Vybrat vše
Sub nacist_soubory()
adresar = "d:\moje\"
f = Dir(adresar)
x = 1
Do While f <> ""
Cells(x, 1) = f
f = Dir
x = x + 1
Loop
For i = 1 To x
f = "d:\moje\" + Cells(i, 1)
Application.Run "f!Program"
Next i
End Sub
-
- Level 1.5
- Příspěvky: 117
- Registrován: leden 12
- Pohlaví:
- Stav:
Offline
Re: hromadné spuštění VBA v mnoha souborech
Tohle ti určitě pomůže
Re: hromadné spuštění VBA v mnoha souborech
Daniel.Vrsek: nevim co mě pomůže, ve zprávě nic víc není.
Ještě jsem zkoušel tento zápis Application.Run "d:\moje\" + cells(i,1)"!Program", (plus podobné varianty), aby si to přímo načetlo název souboru z listu, ale to je také špatně. Nějak tu syntaxi neumím vymyslet. V nápovědě Excelu jsem také nic podobného nenašel, ani na netu.
Ještě jsem zkoušel tento zápis Application.Run "d:\moje\" + cells(i,1)"!Program", (plus podobné varianty), aby si to přímo načetlo název souboru z listu, ale to je také špatně. Nějak tu syntaxi neumím vymyslet. V nápovědě Excelu jsem také nic podobného nenašel, ani na netu.
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: hromadné spuštění VBA v mnoha souborech
našla jsem tohle řešení na otevření sešitu, volání makra, uložení a zavření sešitu. Stačí to už jen vložit do cyklu a vždy aktualizovat jen proměnnou "NameOfFile"
Kód: Vybrat vše
Sub RunMacro_NoArgs()
'Macro purpose: Use the application.run method to execute
'a macro without arguments from another workbook
Dim PathToFile As String, _
NameOfFile As String, _
wbTarget As Workbook, _
CloseIt As Boolean 'Set file name and location. You will need to update this info!
NameOfFile = "File.xlsm" 'název souboru
PathToFile = "C:\temp\" 'cesta k souboru
MakroName = "MakroName" 'název makra
'Attempt to set the target workbook to a variable. If an error is
'generated, then the workbook is not open, so open it
On Error Resume Next
Set wbTarget = Workbooks(NameOfFile)
If Err.Number <> 0 Then 'Open the workbook
Err.Clear
Set wbTarget = Workbooks.Open(PathToFile & "\" & NameOfFile)
CloseIt = True
End If 'Check and make sure workbook was opened
If Err.Number = 1004 Then
MsgBox "Sorry, but the file you specified does not exist!" _
& vbNewLine & PathToFile & "\" & NameOfFile
Exit Sub
End If
On Error GoTo 0 'Run the macro! (You will need to update "MacroName" to the
'name of the macro you wish to run)
Application.Run (wbTarget.Name & "!" & MakroName)
If CloseIt = True Then 'If the target workbook was opened by the macro, close it
wbTarget.Close savechanges:=False
Else 'If the target workbook was already open, reactivate this workbook
ThisWorkbook.Activate
End If
End Sub
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: hromadné spuštění VBA v mnoha souborech
Díky moc, to si nějak upravím a doladím.
Re: hromadné spuštění VBA v mnoha souborech
Tak mi již všechno funguje . Jen mám ještě dotaz:
Jak zajisit platnost proměnné, aby si proměnná pamatovala hodnotu i v jiném sešitě?
(Příklad: v sešitě1 jedna nastavím hodnotu proménné, zavolám makro v jiném sešitu a tam otřebuji tu proménnou použít)
Nikde jsem to nenašel, všude se píše jenom jak dekaklarovat pro proceduru, nebo modul, nebo všechny moduly, ale vždy v rámci jen jednoho sešitu. Děkuji
Jak zajisit platnost proměnné, aby si proměnná pamatovala hodnotu i v jiném sešitě?
(Příklad: v sešitě1 jedna nastavím hodnotu proménné, zavolám makro v jiném sešitu a tam otřebuji tu proménnou použít)
Nikde jsem to nenašel, všude se píše jenom jak dekaklarovat pro proceduru, nebo modul, nebo všechny moduly, ale vždy v rámci jen jednoho sešitu. Děkuji
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: hromadné spuštění VBA v mnoha souborech
Můžeš předat proměnnou přímo s voláním makra.
Např:
nazev_makra(1) 'v závorce je proměnná kterou chceš předat
a volané makro doplníš o přebíranou proměnnou
sub nazev_makra (cislo as integer) 'tohle převezme proměnnou a pak s ní lze dál pracovat.
Např:
nazev_makra(1) 'v závorce je proměnná kterou chceš předat
a volané makro doplníš o přebíranou proměnnou
sub nazev_makra (cislo as integer) 'tohle převezme proměnnou a pak s ní lze dál pracovat.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: hromadné spuštění VBA v mnoha souborech
Jak jednoduché.
Jenom takové info - tento zápis nefunguje, soubor se sice otevře, ale makro se nespustí (nahlásí to chybu, že makro v sešitě není.)
Tento zápis již funguje (makro "Program" se spustí) , ovšem nevím proč to musí být ve dvou příkazech.
Ale už to dále zkoumat nebudu, hlavně že to funguje. Takže všem děkuji.
Jenom takové info - tento zápis nefunguje, soubor se sice otevře, ale makro se nespustí (nahlásí to chybu, že makro v sešitě není.)
Kód: Vybrat vše
Application.Run "D:\moje\A1.xlsm!Program"
Tento zápis již funguje (makro "Program" se spustí) , ovšem nevím proč to musí být ve dvou příkazech.
Kód: Vybrat vše
Workbooks.Open "D:\moje\A1.xlsm"
Application.Run "A1.xlsm!Program"
Ale už to dále zkoumat nebudu, hlavně že to funguje. Takže všem děkuji.
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 4
- 2524
-
od Prorock
Zobrazit poslední příspěvek
25 kvě 2024 13:41
-
- 3
- 3491
-
od amaroun
Zobrazit poslední příspěvek
14 čer 2024 18:34
-
-
Jak hromadně změnit datum a čas souborů?
od atari » 11 črc 2023 14:41 » v Programování a tvorba webu - 3
- 3500
-
od X
Zobrazit poslední příspěvek
14 črc 2023 15:17
-
-
-
MS Outlook - Hromadné vytvoření složek Příloha(y)
od czTANIScz » 22 zář 2023 11:36 » v Kancelářské balíky - 6
- 4480
-
od czTANIScz
Zobrazit poslední příspěvek
23 zář 2023 22:34
-
-
- 4
- 2307
-
od Radoozek
Zobrazit poslední příspěvek
08 pro 2023 16:45
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů