Avatar billede jette1 Nybegynder
21. marts 2001 - 09:52 Der er 15 kommentarer og
1 løsning

Lukning af program samt Winword

Jeg har lavet et program, der kort sagt går ud på at brugeren indtaster oplysninger i nogle tekstbokse. Herudfra dannes et word-dokument som udskrives.
Når jeg selv afprøver programmet på min egen maskine er der ingen problemer. Men når min kæreste f.eks. bruger det på sin maskine lukker programmet ikke helt når det afsluttes.

Jeg kan se i spørgsmålet \"Luk program\" fra medjeti, at man kan benytte End i proceduren, men der står også at programmet burde lukke hvis alle forms bliver unloaded, og jeg unloader netop alle forms i min luk-procedure.

Når man har brugt programmet og lukker det, kan man, når der trykkes Ctrl-Alt-Delete, også se en masse Winwords der kører.
Antallet af disse åbne Winwords passer nogenlunde med det antal dokumenter der er oprettet mens programmet kørte. Det forstår jeg heller ikke helt, da jeg i de procedurer der opretter wordobjekter lukker objektet vha. objektnavn.close til slut i proceduren.

Hvad gør jeg forkert?
Avatar billede preclean Nybegynder
21. marts 2001 - 10:40 #1
nu er jeg ikke så stærk i vb,men en mulighed er at bruge Unload isteden for/sammen med Close

eks.
private sub x_click()
Unload Me
end sub
denne skulle lukke den aktuelle form.
ved ikke om det hjælper dig, prøv evt at se under hjælp omkring unload
Avatar billede jette1 Nybegynder
21. marts 2001 - 10:45 #2
Jeg unloader samtlige forms i luk-proceduren, så det kan ikke være det.
Avatar billede scb Praktikant
21. marts 2001 - 10:47 #3
Hvad sker der hvis du bruger End når du afslutter programmet ?
-SCB
Avatar billede preclean Nybegynder
21. marts 2001 - 10:59 #4
objektnavn.delete 
Avatar billede preclean Nybegynder
21. marts 2001 - 11:01 #5
Delete Method (OLE Container)
     

Deletes the specified object and frees the memory associated with it.

Syntax

object.Delete

The object is anobject expression that evaluates to an object in the Applies To list.

Remarks

This method enables you to explicitly delete an object. Objects are automatically deleted when a form is closed or when the object is replaced with a new object.
Avatar billede jette1 Nybegynder
21. marts 2001 - 11:09 #6
preclean: Det lyder som noget der kan bruges. Jeg afprøver det når jeg kommer hjem... Tak for hjælpen :-)
Avatar billede jette1 Nybegynder
21. marts 2001 - 11:23 #7
SCB: Jeg har ikke forsøgt at bruge End. Der er et åbent spørgsmål der hedder \"Luk program\" hvor der citeres fra MSDN:

\"The End statement provides a way to force your program to halt. For normal termination of a Visual Basic program, you should unload all forms. Your program closes as soon as there are no other programs holding references to objects created from your public class modules and no code executing.\"

Iflg. ovenstående bør man altså ikke bruge End... oder was?
Avatar billede preclean Nybegynder
21. marts 2001 - 13:29 #8
virker det nu ?? ellers
en anden mulighed er at du kun får lukket det sidst oprettet objekt.
Dette kan du teste ved at tælle præsist ( ikke nogenlunde) men præsist hvormange winwords der køre efter programmet er lukket og hvis det passer præsist med  det antal -1 winwords der er blevet oprettet i programmet mens programmet kørte så er dit problem at du under kørelse at programmet ikke for deletet det \"gamle objekt\" før du opretter et nyt.
Løsningen på dette ville være at delete hvert objektet når du havede udskrvet det eller delete objektet inden der bliver oprettet et nyt objekt.
Avatar billede jette1 Nybegynder
21. marts 2001 - 14:06 #9
preclean: Jeg starter udskrivningsproceduren med at oprette et wordobjekt og afslutter med objekt.close.
Nu vil jeg imidlertid forsøge med at indsætte en  objekt.delete umiddelbart efter objekt.close.
Jeg kan (desværre) ikke afprøve det før jeg kommer hjem sidst på eftermiddagen, men jeg giver lige et prej i morgen.....
Avatar billede preclean Nybegynder
21. marts 2001 - 18:34 #10
jeg vil mene at du kun skal delete dit objekt.
Avatar billede jette1 Nybegynder
24. marts 2001 - 19:00 #11
preclean: Jeg kan ikke benytte delete, da den kun kan benyttes med en OLE Container Control. Så jeg er bange for at det ikke løser mit problem.
Avatar billede preclean Nybegynder
24. marts 2001 - 19:25 #12
jette1>> du skriver at der ikke er problemer på din egen maskine, men problemer på fx din kærestes maskine.
kan det måske skylles at du har installeret vb(visual studio) og der har han ikke ??? hvordan for du programmet over på hans maskine ?? jeg tænker på om du for lavet din setup korrekt, for includeret de rigtige dll.mm
Avatar billede jette1 Nybegynder
24. marts 2001 - 19:33 #13
preclean: Jeg benytter InstallShield Professional 2000 ... og jeg har kun prøvet det et par gange, så det er da muligt der er noget jeg overser.
Jeg har kørt et dependency check, og den fremkommer kun med *.ocx filer, ingen dll\'er.
Avatar billede preclean Nybegynder
24. marts 2001 - 19:44 #14
nu er jeg jo c++ mand (har dog udviklet vb programel) så jeg er ikke sikker på du skal have dll\'er men hvis programmet virker korrekt på din egen maskine og ikke på andre maskiner skal du måske tjekke om du kan have overset noget.
du kan prøve at vise mig lidt af din udskrivfunktion specilt der hvor du opretter et objekt og lukker (close)det igen.
Avatar billede jette1 Nybegynder
25. marts 2001 - 01:51 #15
preclean: Andre har åbenbart samme problem som mig (se \"Word igen\" d. 22/3 kl. 15:10), og her forslåes det at sætte objektet til nothing og/eller benytte word.application.quit ... så det vil jeg lige afprøve inden jeg belemre dig med min kode :-)

Fortsættelse følger...
Avatar billede jette1 Nybegynder
25. marts 2001 - 03:24 #16
preclean: Her er den forkortede udgave af sub\'en der udskriver et dokument. Der findes 3 af disse procedurer i programmet, men forskellen er kun dokumentets indhold, så derfor sætter jeg kun den ene ind her.

Der startes tilsyndelande en ny winword.exe for hver gang programmet lukkes og åbnes. Selv om man åbner programmet og udskriver 10 dokumenter startes altså kun én winword. Men hvis man så lukker programmet, åbner igen og udskriver påny er der 2 winword der kører osv.


Public Sub kundeordre()
\'oprettelse af wordobjekt
On Error Resume Next
Set WordApp = GetObject(\"Word.Application\")
   
If WordApp Is Nothing Then
  Set WordApp = CreateObject(\"Word.Application\")
  If WordApp Is Nothing Then
    MsgBox \"Word kunne ikke startes\" & vbCrLf
    & \"og der kan derfor ikke udskrives\"
    Exit Sub
  End If
End If
   
WordApp.Visible = False
   
\'erklæring af dokument- og afsnitobjekt
Dim udskrivDoc As Document
Dim thisRange As Range

\'dokument oprettes på baggrund af en word-
\'skabelon
WordApp.Documents.Add Template:=App.Path & \"\\udskriv_kundeordre.dot\"
Set udskrivDoc = WordApp.Documents(WordApp.ActiveDocument)
 
[her er indsat kode der skriver tekst mv. i dokumentet]
           
\'dokumentet gemmes
udskrivDoc.SaveAs FileName:=App.Path & \"\\kundeordre.doc\", FileFormat:=wdFormatDocument

\'dokumentet printes
udskrivDoc.PrintOut

\'dokumentet lukkes
udskrivDoc.Close

\'dokumentobjektet sættes til ingenting
Set udskrivDoc = Nothing

\'Word lukkes
Word.Application.Quit
   
\'Word applikationsobjektet sættes til ingenting
Set WordApp = Nothing
   
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester