Avatar billede steensommer Praktikant
14. april 2009 - 19:32 Der er 2 kommentarer og
1 løsning

Problem med PrintOut

Følgende forkortede kode i VB .Net forsøger at printe 3 dokumenter MEN der udprintes kun de 2 første. Hvis jeg sætter en "stopper" tidligt i koden og anvender F8 til springe fra linie til linie printes dokumenterne korrekt...HJÆLP


        ' Indkaldelser ---------------------------------------------------------------------------------------

        Gemmesti = "\\192.168.16.10\faelles\Index Data\Patienter\" & Cpr & "\"
        Dim D As DateTime
        D = Now.ToShortDateString

        Dim C As String
        C = Me.ComboBox1.Text
        If C <> "" Then

            ' Indkaldelser KAG/PCI ----------------------------------------------------------------------------


                Hentsti = "\\192.168.16.10\faelles\Index\dokumenter\Sekretariat\Fælles\"
                Filnavn = "IndkaldelseTilOperation.dot"

                'Undersøger om Word er startet
                On Error Resume Next
                WDApp = GetObject(, "Word.application")
                If Err.Number <> 0 Then
                    'Ellers starter vi word
                    WDApp = CreateObject("Word.Application")
                    WDApp.Visible = False
                    WDApp.Activate()
                End If

                'Opret et nyt Word dokument baseret på skabelonen
                WDApp.Documents.Add(Template:=Hentsti & Filnavn, NewTemplate:=False, DocumentType:=0)

                With WDApp.ActiveDocument
                    'Indsæt data i dokumentets bookmarks
                    .Bookmarks("Navn").Range.Text = Navn
                    .Bookmarks("Adr").Range.Text = Adr
                    .Bookmarks("PostBy").Range.Text = PostBy
                    .Bookmarks("IKl").Range.Text = IKl
                    .Bookmarks("IDag").Range.Text = IDag
                    .Bookmarks("IDato").Range.Text = IDato
                    .SaveAs(Gemmesti & "IndkaldelsetilOperation-" & D & ".doc")
                    .PrintOut(Background:=True, Copies:=2)
                    .Close(False)
                End With

                'WDApp.Quit(False)
                WDApp = Nothing

                GoTo OperationSkema


        'Skemaer ------------------------------------------------------

OperationSkema:

        Hentsti = "\\192.168.16.10\faelles\Index\dokumenter\Stamdata\"
        Filnavn = "Stamdata.dot"

        'Undersøger om Word er startet
        On Error Resume Next
        WDApp = GetObject(, "Word.application")
        If Err.Number <> 0 Then
            'Ellers starter vi word
            WDApp = CreateObject("Word.Application")
            WDApp.Visible = False
            WDApp.Activate()
        End If

        'Opret et nyt Word dokument baseret på skabelonen
        WDApp.Documents.Add(Template:=Hentsti & Filnavn, NewTemplate:=False, DocumentType:=0)

        With WDApp.ActiveDocument
            .Bookmarks("Cpr").Range.Text = Cpr
            .Bookmarks("Fornavn").Range.Text = FNavn
            .Bookmarks("Efternavn").Range.Text = ENavn
            .Bookmarks("Hcv").Range.Text = HCV
            .Bookmarks("Adresse").Range.Text = Adr
            .Bookmarks("Postnr").Range.Text = Postnr
            .Bookmarks("By").Range.Text = By
            .SaveAs(Gemmesti & "Stamdata-" & D & ".doc")
            .PrintOut(Background:=True, Copies:=1)
            .Close(False)
        End With

        'System.Threading.Thread.CurrentThread.Sleep(10000)

        WDApp = Nothing
        'WDApp.Quit(False)

        GoTo OPForside


        'Forsider --------------------------------------------------------------


OPForside:

        Hentsti = "\\192.168.16.10\faelles\Index\dokumenter\Sekretariat\Fælles\"
        Filnavn = "ForsideTilCABG.dot"

        'Undersøger om Word er startet
        On Error Resume Next
        WDApp = GetObject(, "Word.application")
        If Err.Number <> 0 Then
            'Ellers starter vi word
            WDApp = CreateObject("Word.Application")
            WDApp.Visible = False
            WDApp.Activate()
        End If

        'Opret et nyt Word dokument baseret på skabelonen
        WDApp.Documents.Add(Template:=Hentsti & Filnavn, NewTemplate:=False, DocumentType:=0)

        With WDApp.ActiveDocument
            'Indsæt data i dokumentets bookmarks
            .Bookmarks("Cpr1").Range.Text = Cpr
            .Bookmarks("Hcv1").Range.Text = HCV
            .Bookmarks("Navn1").Range.Text = FNavn & " " & ENavn
            .Bookmarks("Adr1").Range.Text = Adr
            .Bookmarks("PostBy1").Range.Text = Postnr & " " & By
            .Bookmarks("Tlf1").Range.Text = Tlf
            .Bookmarks("IDato1").Range.Text = IDato
            .Bookmarks("Mobil").Range.Text = Mobil
            .Bookmarks("Arbejdstelefon").Range.Text = Arbejdstelefon
            .Bookmarks("OpType1").Range.Text = Behandling
            .Bookmarks("El1").Range.Text = El
            .Bookmarks("ElAdr1").Range.Text = ElAdr
            .Bookmarks("ElPostBy1").Range.Text = ElPostNr & " " & ElBy
            .SaveAs(Gemmesti & "ForsideTilCABG-" & D & ".doc")
            .PrintOut(Background:=True)
            .Close(False)
        End With

        'WDApp.Quit(False)
        'WDApp = Nothing

        GoTo Slut
Slut:
        WDApp.Quit(False)
        WDApp = Nothing

        Me.Close()

    End Sub
Avatar billede CCodam Nybegynder
15. april 2009 - 02:30 #1
Hmm, det er generelt en dårlig praksis at benytte sig af GoTO statement, og i dit tilfælde ville jeg mene de er helt overflødige, da scriptet alligevel bare vil gå videre?

Prøv i stedet at del scriptet af de 3 dokumenter op i nogen Subs, og så i din main, eller hvor du starter dokument skrivningen, kald de 3 Subs en efter en:
Sub Main(...)
...
  DocOne()
  DocTwo()
  DocThree()
...
End Sub
Avatar billede steensommer Praktikant
15. april 2009 - 10:08 #2
Det er da muligt at GOTO er en dårlig praksis MEN som jeg skrev er ovenstående et (lille) UDDRAG af koden og GOTO kan i den fulde kode ikke undværes (i dens nuværende udgave.
Du har sandsynligvis ret men om det løser problemet ved jeg ikke.
Til gengæld fandt jeg ud af at ved at anbringe en pause (på 3 sek)efter printout kommandoen fungerer alt:

        System.Threading.Thread.CurrentThread.Sleep(3000)
Avatar billede steensommer Praktikant
19. august 2010 - 22:23 #3
Svar
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