< návrat zpět

MS Excel


Téma: VBA prechod medzi zošitmi rss

Zaslal/a 23.11.2018 20:22

Ahojte, mám vytvorený kód (VBA) na prechod z jedného otvoreného zošita (Excel 2016) do druhého. Následne potrebujem ten prvý zošit zatvoriť (bez uloženia) a pracovať v druhom. Toto makro mi nepracuje korektne, keď mám otv. viacej zošitov a chcem prejsť na iný. Viete mi pomôcť. Ďakujem za každý podnet.
Sub Prechod()
Dim miesto As String, cesta As String
Application.ScreenUpdating = False
cesta = "C:\Users\Public\Documents\Skuska_2.xls"
miesto = Dir(cesta)
On Error Resume Next
If miesto <> vbNullString Then
Workbooks.Open (cesta)
Workbooks(1).Close (False)
Else
MsgBox "ZOSIT NIE JE", vbInformation, "SKÚŠKA"
End If
End Sub

Zaslat odpověď >

Strana:  1 2   další »
#041956
elninoslov
Uvidíme, ako to presne myslíte, a čo chcete so súbormi robiť, koľko ich je atď ... atď. Nechce sa mi to zbytočne zdokonaľovať, keď to možno bude na nič. Pretože treba myslieť aj na zatvorenie ovládaného zošitu ovládacím zošitom, ak je tento zatváraný, a pod...
Příloha: zip41956_prepinanie-zositov-bez-ulozenia.zip (35kB, staženo 23x)
citovat
#041958
avatar
Ospravedlňujem sa za nedokonalosť, tie informácie mali byť podrobnejšie. Takže:

1, Makrá mám riešené v doplnku .xlam (vždy rovnaký, len jeden), pripojené k týmto zošitom - bezpečnosť. Tento je stále otvorený, pokiaľ je otv. ktorýkoľvek zošit zo skupiny.
2, Vždy potrebujem mať OTV. len jeden zošit Excel zo skupiny zošitov (názov na začiatku Skuska*.xls), umiestnenie rôzne.
3, Náhodne otv. iné zošity nemôžu mať vplyv na tieto zošity (tu je problém).
4, Pracujem v jednom zošite a v jednej chvíli potrebujem otv. druhý a ten prvý zatvoriť bez uloženia.

Ďalší problém je sled udalosti Workbook. Zdá sa, že postup z tohto nie vždy platí http://pixcels.nl/events-in-workbooks/. No toto je trochu iný problém...Zatiaľ by som bol vďačný za riešenie prvého problému. Dopredu vďaka.citovat
#041959
elninoslov
Do doplnku, opakujem ešte raz, DO DOPLNKU (!), vložte do modulu Tento_zošit kód:
Private WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal WB As Workbook)
Dim WBS As Workbook, MenoS As String, MenoN As String
MenoN = WB.Name
If Left$(MenoN, 7) = "Skuska_" Then
For Each WBS In App.Workbooks
MenoS = WBS.Name
If Left$(MenoS, 7) = "Skuska_" And MenoS <> MenoN Then WBS.Close False: Exit For
Next WBS
End If
End Sub

Private Sub Workbook_Open()
Set App = Application
End Sub

Doplnok, znovu opakujem DOPLNOK (!) uložte.

Zámer je taký, že sa v doplnku vytvorí premenná App, ktorá sa pri Workbook_Open toho doplnku (čo sa udeje pri akomkoľvek prvotnom otvorení Excelu, keď sa aktivujú aj iné doplnky) naplní objektom samotnej aplikácie aj s udalosťami. A potom sa kontroluje každá globálna-aplikačná udalosť App_WorkbookOpen, vznikajúca pri akomkoľvek otvorení akéhokoľvek súboru. Vtedy sa zkontroluje či ide o súbor "Skuska_*", ak áno, nájde sa prípadný otvorený predošlý "Skuska_*" a zavrie sa. Takže tak. Skúste.citovat
#041961
avatar
Excelentná práca ako vždy...a aké je to zrazu jednoduché, pracuje tak ako má.VEĽKÉ ĎAKUJEM.

No pri testovaní som prišiel na jeden problém, ktorý sa mi dovtedy nepreukazoval.
Celý tento prechod medzi skupinou zošitov sa štartuje od úvodného zošita UVOD.xls. Pôvodne sa mi pri otv. prvého zo "skupiny" zošitov uzavrel a viacej som ho nepotreboval.
No teraz premýšľam, že by som ho využíval na "ľahký" prechod medzi týmito zošitmi. Keďže skupina zošitov bude po novom na sieti, tento by som ponechal u užívateľa v PC (oznamy pre prípad výpadku sieti a tak). Pravidlá by platili tie isté ako som uviedol hore, okrem tejto výnimky -zošit UVOD. Ako doplniť túto podmienku nielen do doplnku, ale aj pre zatváranie samotného UVODU?citovat
#041962
elninoslov
Prečítal som si to asi 7x a stále som nechápal čo chcete. Na 8-mi som to možno pobral. Vy chcete toto ? :

-Pri otvorení akéhokoľvek zošitu Skuska_* sa má kontrolovať, či je otvorený súbor UVOD.xls. Ak nieje, má sa otvoriť aj ten. Teda vždy, ak je nejaký Skuska_* otvorený musí byť aj UVOD.xls otvorený.
-Ak nieje otvorený žiaden Skuska_*, zatvorí sa aj UVOD.xls (bez uloženia) ?citovat
#041963
avatar
NIE, nie...skúsim načrtnúť celú postupnosť:
1, Otvorí sa UVOD užívateľovi na PC, kde si vyberie "skupinu zošitov"
2, Po výbere sa otvorí SKUSKA_*(sieť) a zatvorí UVOD
3, Ďalej na prechod medzi skupinou zošitov využívať UVOD, t.j. otv. UVOD a zatv. SKUSKA_* a atď.
4, Myslím aj na to, že UVOD sa môže otv. bez prístupu siete, vtedy sa zatv. len on.

Toto všetko musí pracovať bez vplyvu ostatných zošitov.citovat
#041964
elninoslov
"Otvorí sa UVOD užívateľovi na PC" - Akože "sa" ? Pri štarte akéhokoľvek Excelu "sa" automaticky má otvoriť UVOD ? Naplánovanou úlohou pri štarte PC ? Alebo "si" ho užívateľ otvorí sám ? V tom prípade to má byť "Užívateľ si otvorí UVOD na PC", to je predsa veľký rozdiel.

"kde si vyberie "skupinu zošitov"" - Teda otvorenie UVOD-u vyvolá akciu, kde nabehne nejaký formulár v ktorom si má užívateľ vybrať skupinu zošitov ?

"skupinu zošitov" - To je čo ? Adresár so súbormi rovnakého typu ? Teda treba zistiť na aké slová súbory začínajú (určujúcim znakom môže byť podčiarknik). Alebo skupina zošitov znamená už výber priamo tých začínajúcich slov (napr. "Skuska_"), ImputBox-om alebo formulárom ?

"Po výbere sa otvorí SKUSKA_*(sieť) a zatvorí UVOD" - Teda sa má po výbere skupiny sám automaticky otvoriť prvý súbor danej skupiny ? Alebo sa má niekde v skrytom liste v doplnku uchovávať aktuálny výber skupiny (alebo aj zoznam možných skupín), a čakať či si súbor z danej skupiny užívateľ otvorí sám ? Vtedy je to rovnako zle napísané ako hore - nie "sa" ale "si".

No a čo ak si užívateľ svojprávne otvorí koľko chce súborov z inej ako z vybratej skupiny ?

Ak sa/si opätovne otvorí UVOD, zatvoria sa všetky zošity doteraz otvorených skupín (lebo mohol si svojvoľne otvoriť aj X zošitov z nevybratej skupiny), a načíta sa opäť prvý zošit z novovybranej skupiny ?

Ak sa pri otvorení UVOD zistí, že prvý súbor vybranej skupiny sa nedá otvoriť, tak sa z nejakou hláškou o nedostupnosti ukončí aj tento UVOD (bez uloženia)? Rovnako aj všetky doteraz otvorené súbory zo všetkých skupín?

Ak bude umožnené užívateľovi otvoriť svojvoľne aj iné skupiny, na ich zatvorenie je potreba dopredný zoznam všetkých skupín, a všetkých súborov v nich. Ak sa jedná o zložky, dá sa urobiť zoznam súborov v nich uložených, a tie uchovať v doplnku. A potom porovnávať s otvorenými zošitmi.

A to ma určite nenapadá všetko...citovat
#041965
avatar
1, "Užívateľ si otvorí UVOD na PC" - toto je správne

2,"kde si vyberie "skupinu zošitov"" - Teda otvorenie UVOD-u vyvolá akciu, kde nabehne nejaký formulár v ktorom si má užívateľ vybrať skupinu zošitov ? - tiež správne, vyberie len jeden zošit, výber mi pracuje bez problémov

3, "skupinu zošitov" - To je čo ? Adresár so súbormi rovnakého typu? - Alebo skupina zošitov znamená už výber priamo tých začínajúcich slov (napr. "Skuska_"), ? - všetky začínajú na SKUSKA_

4, "Po výbere sa otvorí SKUSKA_*(sieť) a zatvorí UVOD" - výber zošita na otv. urobí sám užívateľ cez UVOD z ponuky formulára, nemusí sa nič uchovávať

5, No a čo ak si užívateľ svojprávne otvorí koľko chce súborov z inej ako z vybratej skupiny ? -toto je problém, môže otv. no nesmie to mať vplyv na zatv. a otv. spomínaných zošitov

6, Ak sa/si opätovne otvorí UVOD, zatvoria sa všetky zošity doteraz otvorených skupín (lebo mohol si svojvoľne otvoriť aj X zošitov z nevybratej skupiny),- zatv. sa len jeden zo skupiny, lebo v jednej chvíli môže mať otv. len jeden SKUSKA_. Ostatné (mimo skup.) nesmie zatv.

7, Ak sa pri otvorení UVOD zistí, že prvý súbor vybranej skupiny sa nedá otvoriť, tak sa z nejakou hláškou o nedostupnosti ukončí aj tento UVOD (bez uloženia). - riešené znova cez formulár UVODU, to mi pracuje OK

8, Ak bude umožnené užívateľovi otvoriť svojvoľne aj iné skupiny, na ich zatvorenie je potreba dopredný zoznam všetkých skupín, a všetkých súborov v nich. Ak sa jedná o zložky, dá sa urobiť zoznam súborov v nich uložených, a tie uchovať v doplnku. A potom porovnávať s otvorenými zošitmi.- mne stačí pred zatv. porovnávať či ide o zošit skupiny. t.j. SKUSKA_ alebo UVOD. Inak zošit nezavriem.

Samozrejme je to komplikované a tých možnosti je viacej. Mne to chodí s chybami, t.j. ak mám otv. UVOD a otv. "cudzí" zošit (mimo skup.), tak pri zatv. nezatvorí UVOD, ale cudzí zošit a pod..citovat
#041966
avatar
Ešte raz ďakujem za Váš čas a trpezlivosť.citovat
#041967
elninoslov
Teda "skupina zošitov" je iba jedna jediná ? Lebo výraz "vybrať skupinu zošitov" jasne evokuje možnosť výberu z viacerých možností. Nie jednu.
Uveďte ešte toto, a uvidím, porozmýšľam nad tým...citovat

Strana:  1 2   další »

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