< 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

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje