[access] Excel automation

Pagina: 1
Acties:

  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
Ik heb een probleempje met een access database.

Vanuit de database wil ik:

- een excel-bestand op de harddisk openen,
- gegevens uit de database wegschrijven in dit excel bestand,
- het excel bestand "opslaan als" onder een bepaalde naam
- het excel-bestand sluiten

Dat laatste is dus het probleem:

Bovenstaande werkt, maar excel wordt niet afgesloten. Het lijkt goed te gaan, maar in NT's taakoverzicht blijft hardnekkig het proces "EXCEL.EXE" actief.

Pas als access in zijn geheel wordt afgesloten wordt het proces beëindigd. Het openstaande proces levert problemen op zodra een gebruiker probeert andere excel-bestanden te openen.

Iemand een idee hoe ik excel helemaal kan aflsuiten? Ik gebruik de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set objXLS = CreateObject("Excel.Application")

With objXLS.Application
    .Visible = True
    .Workbooks.Open "W:\sjabloon.xls" '(fictief)
End With

Set y = objXLS.ActiveSheet

***hier een hoop bewerkingen***

y.SaveAs "W:\resultaat.xls" '(fictief)

objXLS.Quit
Set objXLS = Nothing


De eigenschap visible van objXLS staat momenteel opzettelijk op True, voor debug-doeleinden, als alles straks goed werkt wordt deze ingesteld op False. De instelling heeft geen invloed op bovenstaand probleem.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Ik denk dat je een

code:
1
2
y.close
Set y = nothing


bent vergeten, hierdoor wordt excel niet afgesloten omdat er nog een document actief is...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
Geprobeerd, maar zonder resultaat.

y = een worksheet, geen workbook en kan niet gesloten worden. Ik heb wel geprobeerd om via de code

code:
1
objXLS.activeworkbook.close


de workbook eerst te sluiten, maar dat had geen effect. De methode Quit zou in mijn ogen ook de hele apllicatie, inclusief alle openstaande workbooks moeten afsluiten, toch? (met waarschuwing voor opslaan indien er niet-opgslagen workbooks zijn)

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Heras schreef op 27 August 2003 @ 14:14:
Geprobeerd, maar zonder resultaat.

y = een worksheet, geen workbook en kan niet gesloten worden. Ik heb wel geprobeerd om via de code

code:
1
objXLS.activeworkbook.close


de workbook eerst te sluiten, maar dat had geen effect. De methode Quit zou in mijn ogen ook de hele apllicatie, inclusief alle openstaande workbooks moeten afsluiten, toch? (met waarschuwing voor opslaan indien er niet-opgslagen workbooks zijn)
Ja, heb je gelijk in :o (ben nog niet echt ver met vba), maar, als ik even logisch nadenk dan kan ik volgens mij in excel geen worksheets afsluiten, misschien een oplossing om in te vullen

ASP:
1
2
objXLS.activeworkbook.SaveAs ("c:/excel.xls")
objXLS.activeworkbook.Close


offtopic:
Als je gebruik maakt van Office XP dan zou ik als ik jou was ook eens kijken naar de XML ondersteuning van Excel, heb daar eens voorzichtig aan gesnuffeld, en dat werkte leuk en was een stuk vriendelijker voor de systeembronnen.
(Jammergenoeg hebben de meeste bedrijven nog geen Office XP :'( )

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Als ik bij mij bovenstaande code uitvoer, verdwijnt het proces EXCEL.EXE ook weer netjes uit het taakoverzicht. Dus waarschijnlijk zit het hem ergens in de ***hier een hoop bewerkingen***

  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
@FvKnijff: Helaas moet ik het hier op het werk doen met access8.0 idd. De rest van het ofice pakket is office2000.

@robjanssen: Daar heb ik ook al uitgebreid naar zitten kijken, maar in mijn ogen kan het daar niet zitten, het zijn namelijk allemaal simpele bewerkingen:

code:
1
2
3
4
5
6
7
Set db = CurrentDb()
Set out = db.OpenRecordset("ordergeg_export")

y.Range("a2") = out![Expr1]
y.Range("j5") = out![Type_opdr]
y.Range("j10") = out![Aard]
y.Range("j6") = out![Type_activiteit]


En dan zo een hele rits. Er worden dus alleen waarden uit en tabel naar wat cellen in de excel-sheet geschreven...

  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
Update:

Ik heb even een tijdelijke knop in mijn database gemaakt met de volgende code:

code:
1
2
3
4
If fIsAppRunning("Excel") Then
    Set sluit = GetObject(, "Excel.Application")
    sluit.Visible = True
End If


Als ik die code uitvoer dan opent "de verborgen" excel zich. Er treedt echter een soort error op, want op de plek van de workbook verschijnt een soort schermafdruk van het scherm zoals dat op dat moment open stond. Ik krijg dus alle werkbalken van excel te zien. Als ik vervolgens via het kruisje dat excel-venster sluit, blijfthet proces EXCEL.EXE nog steeds actief.

Deze excel-instance wil blijkbaar niet dicht, alleen via taakbeheer.

[ Voor 4% gewijzigd door Heras op 28-08-2003 09:23 ]


  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
Iemand enig idee?

  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
Nog 1 subtiel schopje, daarna geef ik het op en ga ik op zoek naar een andere methode.

Verwijderd

Heras schreef op 27 August 2003 @ 10:58:
..............Pas als access in zijn geheel wordt afgesloten wordt het proces beëindigd. Het openstaande proces levert problemen op zodra een gebruiker probeert andere excel-bestanden te openen.
En als je nu access eens afsluit en weer opnieuw opstart? Het zal ongetwijfeld een hoop problemen met zich meebrengen, maar het zou een optie kunnen zijn?!?

Door dan in je opstartscherm een variabele weg te zetten die aangeeft in welk form de user aanwezig was (opslaan in tabel voor afsluiten access), kan dit form weer gestart worden (automatisch).

Ik heb een dergelijke afsluit en opstartfunctie wel eens gebruikt, ging gedeeltelijk buiten access om.... niet echt gebruiksvriendelijk. :(

Wat je ook kan proberen is in je code de compact starten, dan wordt de applicatie ook afgesloten en weer opgestart.

Wordt de betreffende functie gestart door de gebruiker, of is het een algemene update?

Ik blaat maar een beetje, hopelijk heb je er iets aan :)

  • Heras
  • Registratie: December 2001
  • Laatst online: 20-04 13:23
Nee, de functie wordt iedere dag een aantal keer gestart door verschillende gebruikers. het aangemaakte excelbestand wordt na bovenstaande actie gemaild naar de opgegeven ontvangers. Ik blijf het vreemd vinden dat Excel half geopend blijft.
Pagina: 1