21. marts 2001 - 09:52Der 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.
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
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.
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?
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.
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.....
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
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.
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.
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 :-)
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]
\'dokumentobjektet sættes til ingenting Set udskrivDoc = Nothing
\'Word lukkes Word.Application.Quit
\'Word applikationsobjektet sættes til ingenting Set WordApp = Nothing
End Sub
Synes godt om
Ny brugerNybegynder
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.