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

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3224
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod atari » 01 kvě 2012 03:14

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?

Reklama
pavel.lasak
Level 2
Level 2
Příspěvky: 197
Registrován: duben 12
Pohlaví: Muž
Stav:
Offline
Kontakt:

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

Příspěvekod pavel.lasak » 01 kvě 2012 11:49

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"
Více o kancelářském balíku MS Office na http://office.lasakovi.com/ (Word, Excel, PowerPoint, Access, Outlook, Project, OneNote)

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3224
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod atari » 01 kvě 2012 23:39

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

Daniel.vrsek
Level 1.5
Level 1.5
Příspěvky: 117
Registrován: leden 12
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Daniel.vrsek » 02 kvě 2012 07:03

Tohle ti určitě pomůže

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3224
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod atari » 02 kvě 2012 12:20

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.

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

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

Příspěvekod Azuzula » 02 kvě 2012 12:30

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.

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3224
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod atari » 02 kvě 2012 22:57

Díky moc, to si nějak upravím a doladím.

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3224
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod atari » 07 kvě 2012 12:36

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

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

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

Příspěvekod Azuzula » 07 kvě 2012 13:12

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.
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.

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3224
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod atari » 07 kvě 2012 14:35

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.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • PC jde nastartovat až po mnoha pokusech
    od Prorock » 24 kvě 2024 18:10 » v Problémy s hardwarem
    4
    2524
    od Prorock Zobrazit poslední příspěvek
    25 kvě 2024 13:41
  • SW k hromadné změně datumu souborů
    od amaroun » 22 kvě 2024 17:48 » v Programy ke stažení
    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
  • Pád PC po spuštění hry be BSOD
    od Radoozek » 07 pro 2023 15:00 » v Problémy s hardwarem
    4
    2307
    od Radoozek Zobrazit poslední příspěvek
    08 pro 2023 16:45

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů