< návrat zpět

MS Excel


Téma: Předčasně se ukončuje program rss

Zaslal/a 13.6.2016 19:56

Zdar,
jakmile se program dostane k příkazu "uzavřít soubor" (jde o jiný než zdrojový soubor), ukončí se. Zkrácený kód:

Public JMFSE(32) As String, PL As Integer

Sub tlacitko1_Kliknuti()

NAB = ActiveWorkbook.Name

M = "01"
CD = "C:\ArchivVykazu\"

' pole JMFSE obsahuje "holé" názvy souborů, PL je počet názvů

For i = 1 To PL
MVPT = JMFSE(i) & ".xlsm"
Workbooks.Open Filename:=CD & MVPT, ReadOnly:=True
Sheets(M).Select
S = Range("B4:U199") 'uloží důležitou část listu "M" do pole S

Workbooks(MVPT).Close SaveChanges:=False 'ZDE SE PROGRAM PŘEDČASNĚ UKONČÍ (soubor "MVPT" se uzavře a program skončí)

' Workbooks(NAB).Activate 'tento příkaz by neměl být potřeba, ale stejně to na to nemá vliv
X = 0 'sem už se program nedostane

' atd. zde by mělo dojít ke zpracování dat z pole S

Workbooks(NAB).Save
Next i

End Sub

Zkoušel jsem místo Workbooks použít Windows, ActiveWorkbook.Close a ActiveWindow.Colse. Také jsem zkusilsoubor před uzavřením znovu "aktivovat". Nic na to nemá vliv.

Máte někdo nápad, co s tím je?

Zaslat odpověď >

#031739
Hav-Ran
Môže to byť riadkom
S = Range("B4:U199") 'uloží důležitou část listu "M" do pole S
Pole nie je zadefinované, naviac jeho meno je pre Excel neprijateľné - používa ho pre stlpec Scitovat
icon #031740
eLCHa
Nemyslím. V prostředí VBA "S" jako název proměnné použít může.
To bude nějaká blbost, ale bez přílohy to asi nepůjdecitovat
#031741
elninoslov
Pole JMFSE(32) má indexy od 0 do 32, nie od 1 do 32 ako ich voláte v cykle.
To pole JMFSE() má určite názvy, ktoré zodpovedajú reálnym súborom ?
PL nepresahuje hodnotu 32 ?

Dajte si do Watches premennú "i", "PL", "ERR", "JMFSE(i)", "MVPT" a krokujte makro.

Mne pri zachovaní toho, že pole JMFSE() má korektné názvy a PL nepresiahne počet názvov a zároveň hodnotu 32, to ide OK.
Akurát by som vypol ScreenUpdate a odstránil Select
S = Sheets(M).Range("B4:U199")

prípadne si ešte skúste celý kód obalit do On Error Goto CHYBA
a v časti CHYBA si BrakePointnite napr MsgBox alebo čo, aby Vám to stoplo, a pozrite si hodnoty zainteresovaných premenných.citovat
icon #031742
eLCHa
@elninoslov

Dajte si do Watches premennú "i", "PL", "ERR", "JMFSE(i)", "MVPT" a krokujte makro.

Mrkněte na okno Locals ve VBE - možná vám to ušetří nějaký klik ;)citovat
#031744
elninoslov
Áno, to len, že treba sledovať stav zainteresovaných premenných ...citovat
#031758
avatar
Zavírané soubory jsou "xlsm". Nevidím v uvedeném kódu "EnableEventsFalse". Nejsou v zavíraných souborech nějaké "BeforeClose"? A taky bych Cyklus doplnil o "DoEvents".citovat
#031761
avatar
ANO, všechny ty otevírané "xlsm" soubory mají stejnou strukturu a obsahují "BeforeClose" - už existují několik let a tak jsem na to zapomněl.

Vložení

Application.EnableEvents = False
ActiveWindow.Close
Application.EnableEvents = True

to zcela vyřešilo.
DoEvents jsem tam vložil také, správná připomínka.

VŠEM ZÚČASTNĚNÝM DĚKUJI
BoTlcitovat

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

Vynásobit hodnoty kurzem - Power Query

Alfan • 26.4. 7:56

Relativní cesta - zdroje Power Query

Alfan • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

elninoslov • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21