Stránka 1 z 1

hromadné spuštění VBA v mnoha souborech

Napsal: 01 kvě 2012 03:14
od atari
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?

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 01 kvě 2012 11:49
od pavel.lasak
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"

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 01 kvě 2012 23:39
od atari
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.

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

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 02 kvě 2012 07:03
od Daniel.vrsek
Tohle ti určitě pomůže

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 02 kvě 2012 12:20
od atari
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.

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 02 kvě 2012 12:30
od Azuzula
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

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 02 kvě 2012 22:57
od atari
Díky moc, to si nějak upravím a doladím.

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 07 kvě 2012 12:36
od atari
Tak mi již všechno funguje :D . 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

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 07 kvě 2012 13:12
od Azuzula
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.

Re: hromadné spuštění VBA v mnoha souborech

Napsal: 07 kvě 2012 14:35
od atari
Jak jednoduché. :D

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.