Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Excelin lopettaminen

Hannu [02.01.2006 19:53:57]

#

Onko joku onnistunut jollain keinolla poistamaan Visual Basic ohjelman käyttämän ja jo suljetun Excelin Windowsin tehtävienhallinnasta jotenkin?

Käytän Visual Basic.nettiä.
Siinä ei voi kirjoittaa Set App = Nothing, samoin kuin VB6:ssa.
Kokeilin laittaa App = Nothing, mutta sillä ei tunnu olevan vaikutusta. En edes ole varma onko tuo vastaava kuin Set App=Nothing.
End-komennon jälkeen Excel kyllä katoaa tehtävienhallinnasta.

Ongelmani on itseasiassa seuraavanlainen:
Käytän VB:ssä Exceliä jonka Visible on asetettu Falseksi. Haen Excelistä VB:llä vain nopeasti tarvitsemani tiedot ja sen jälkeen suljen Excelin. Ohjelmani jatkaa kuitenkin toimintaansa ja sillä tehdään kaikkea muuta vielä pitkään. Nyt jos joku yrittää avata Excel-tiedostoa, ennenkuin ohjelmani on lopetettu, niin avautuva Excel-tiedosto onkin myös näkymätön! Uskon että tuohon auttaisi jos vaan keksisi miten Excelin saa pois tehtävienhallinasta, koska heti ohjelmani End-komennon jälkeen Excel-tiedostot alkavat taas näkyä normaalisti.
Eli toinen vaihtoehto olisi saada Excel tiedostot vaan jotenkin näkyviksi. Tehtävienhallinnassa roikkuva Excel ei kai sinäänsä aiheuta muuta harmia, vaikka se sinne jäisikin ohjelmani päättämiseen asti.

Wiwwe [02.01.2006 23:18:32]

#

Eikös excel filejä voi lukea ihan oledbn kautta. Ei tarvitse sotkea koko exceliä sovellukseen...
Kysy googlelta lisää, se on (paljon) viisaampi kuin minä...

Hannu [03.01.2006 19:18:34]

#

Ahaa... Pitää tutustua ajan kanssa tuohon. Vaikuttaa ihan mielenkiintoiselta!
Kiitos vinkistä!

Mutta nyt ohjelmani on kuitenkin tehty jo niin että se käyttää koko Exceliä ja olisi kiva saada selville, miten Excelin saa lopetettua, jos joku tietäisi konstin siihen.
Niin kauan kun ohjelmani on käynnissä, Excel näkyy tehtävienhallinnassa ja jos jonkun Exceltiedoston yrittää avata hiirellä klikkaamalla, Windowsin ikkunasta, niin tiedosto avautuu näkymättömänä.
Sillä tavalla tiedoston saa avattua näkyvänä, että käynnistää ensin pelkän Excelin ja sinne sitten avaa erikseen tiedoston ylävalikon komennoilla Tiedosto - Avaa...

panttu [03.01.2006 20:19:28]

#

Oletko kokeillut kutsua Dispose()-metodia, kun lopetat käytön. .NETin pitäisi kutsua tuota metodia itsekkin kun kaikki viittaukset olioon katoaa ja muisti käy vähiin, mutta siihen menee yleensä tukulti aikaa.

Excel_olio.Dispose()
Excel_olio = Nothing

Hannu [10.01.2006 21:29:51]

#

panttu kirjoitti:

Excel_olio.Dispose()
Excel_olio = Nothing

Ei kelpaa tuo Dispose.
Valittaa:
Public member 'dispose' on type 'ApplicationClass' not found.

Mutta...!
Ratkaisukin löytyi lopulta! :)
Näin toimii:

Excel_olio.Quit
Excel_olio = Nothing
GC.Collect()

En ihan tarkkaan ymmärtänyt, mutta tuo GC.Collect() ilmeisesti jotenkin siivoaa käyttämättömiä objecteja pois muistista.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta