Avatar billede N00b Novice
22. august 2007 - 18:31 Der er 68 kommentarer og
1 løsning

Word fakture, Bruge word til at lave faktura i

Hej, jeg er ved at lave en faktura skabelon i word, jeg sætter den op med formulare. selve udsenet er intet problem, og jeg tror oxe godt at jeg kan finde ud af at få formlerne til at regne pris og sådan noget ud.

Det der er mit problem er at jeg, ikke har nogle anelse om hvordan jeg kan generere en fortløbende faktura nummer, kalkulere mig frem til betalingsdatoen samt at "auto" gemme dokumentet med det genereret faktura nummer.

Er der nogle her der kan hjælpe ???

Kopi af fakturen kan hentes her (renset udgave)(designet er ikke færdigt men jeg gidder ikke gøre formeget ud af det hvis jeg ikke kan få det til at virke) www.kancaie.dk/fak.doc

/Rex
Avatar billede bufferzone Praktikant
22. august 2007 - 18:35 #1
Det er lige før jeg vil sige, hvis du har så mange transaktioner at du har behov for at lave den slags automatisk, så bør du kukke på f.eks. regnskabsprogrammet Summa Sumarum fra stones der dels kan dette og en del mere, ellers gør det manuelt
Avatar billede word-hajen Nybegynder
22. august 2007 - 18:40 #2
For fakturanummer, prøv at se http://www.eksperten.dk/spm/777861

Mht. betalingsdato - hvordan skal den så være? Er det løbende måned + et eller antal dage, er det 8 dage kontant eller?
Avatar billede word-hajen Nybegynder
22. august 2007 - 18:46 #3
Glem lige det med betalingsbetingelserne. Kunne se af dit oplæg at det er lb. måned + 15 dage (men hvorfor angive selve datoen, når du har angivet betalingsbetingelserne?)

Jeg ved godt, at designet ikke er færdigt, men når du skal lave det færdigt, bør du overveje at ændre din opstilling med varenumre osv. til at være en tabel med en kolonne pr. oplysning.
Avatar billede N00b Novice
22. august 2007 - 20:38 #4
Er der ikke en anden måde at gøre det på... Mere jeg ville gerne undgå at skulle indsætte et exel ark i dokumentet, kan man ikke via en makro gøre at on open add +1 to {faknr} and save to filename X:\faknr.doc

Fatter spasser af vb :-)så jeg kan ikke makro selv

/Rex
Avatar billede N00b Novice
22. august 2007 - 20:45 #5
@Buffzone
Det er dovenskab, der gør det :-), ikke antallet af faktura

/Rex
Avatar billede bufferzone Praktikant
22. august 2007 - 20:54 #6
de rigtig dovne anvender summa sumarum, den hjælper også med regnskabet ;-)
Avatar billede word-hajen Nybegynder
22. august 2007 - 21:01 #7
Du skal nu ikke bruge noget Excel, men der var noget kode til at generere fakturanumre med. Hvis du ikke vil rode dig ud i nogle former for kode, står den på los manuelos.

Men jeg kan da også anbefale, at du kigger på summa summarum. Det har vi brugt på jobbet på et tidspunkt (hmm... måske bruger vi det stadig).
Avatar billede N00b Novice
22. august 2007 - 21:01 #8
@bufferzone
Kan ikke benytte stones, der hvor denne faktura skal benyttes (citrix server, med fælles drev osv.)

/Rex
Avatar billede N00b Novice
23. august 2007 - 04:55 #9
Jeg har ikke noget mod at benytte koder.
Men jeg syntes ikke om måde at skulle gøre det på, altså at skulle hente et nyt doc for at læse et tal, jeg ville hellere bruge et "skjult" felt til det i skabelonen.
Hvis det kunne lade sig gøre.
/Rex
Avatar billede word-hajen Nybegynder
23. august 2007 - 09:52 #10
Du kan ikke bruge et felt til det. Den skal kunne tælle op, hvilket betyder, at du i givet fald skulle have et stort Word-dokument med alle dine fakturaer. Og det er sikkert ikke så smart.
Avatar billede N00b Novice
23. august 2007 - 14:17 #11
Det er rigtig nok, kan må gøre det på anden måde ??
Den kode du refere til, kan man benytte en normal txt fil istedet for?, og gemmer den dokumentet med faktura nummeret ?

/Rex
Avatar billede N00b Novice
23. august 2007 - 14:23 #12
Hmm kan man ikke korregere koden, så den opdatere feltet {faknr} ??

/Rex
Avatar billede word-hajen Nybegynder
23. august 2007 - 17:20 #13
Ja, du kan godt bruge en txt-fil i stedet, men jeg synes måske, at det er lidt fjollet. Og nej, koden, som jeg har henvist til, gemmer ikke dokumentet med fakturanummeret. Men det kan tilføjes.

Din kommentar 14:23:46 - Hvad mener du? Opdatere et felt? Er det, fordi koden blot indsætter nummeret der, hvor markøren står og du gerne vil have det stående et andet sted? For i så fald skal det blot rettes, så nummeret bliver indsat i et bogmærke i stedet i din faktura.
Avatar billede N00b Novice
23. august 2007 - 18:21 #14
Yeps opdatere det felt "formel" der hedder {faknr}, hvis det kan lage sig gøre... Og hvis det kan lade sig gøre at auto gemme dokumentet med fak nummer så er det bare 10-4, fakturaen bliver lavet som .dot, så ikke at der bliver gemt i orginalen.

/Rex
Avatar billede N00b Novice
23. august 2007 - 18:23 #15
evt. kan man gøre så det sker automatsk når man åbner skabelonen (altså at der bliver sat nyt fak. nr, og så bliver gemt) så man bare skal huske at sige ja til at gemme ændinger når man lukker

/Rex
Avatar billede word-hajen Nybegynder
23. august 2007 - 18:27 #16
Det er ikke noget problem at generere fakturanummeret, indsætte det og gemme dokumentet, når det bliver åbnet. Du skal dog lige overveje en ting. Hvad nu, hvis man laver en ny faktura, som ikke er korrekt og den derfor ikke skal gemmes? Skal den altid det og så må brugeren bare skrive i den, at den ikke bliver brugt? For der er så også "brugt" et fakturanummer.

Hvor skal fakturaerne gemmes?
Avatar billede N00b Novice
23. august 2007 - 18:41 #17
F:\data\Faktura\Filnavn.doc

Så må brugeren, lade vær med at fejle :-), det er vel kun skabelonen der bliver opdatert (baseret på filnavn, if doc.name = fak.dot then update {faknr} else;) eller noget ligende

/Rex
Avatar billede N00b Novice
23. august 2007 - 18:42 #18
se evt hvad jeg mener her http://rex.homeftp.org/Fak1.xlt
Avatar billede word-hajen Nybegynder
23. august 2007 - 18:48 #19
Der sker ingen former for opdatering af skabelonen. Der bliver indsat et nyt fakturanummer i det ny-oprettede dokument, som derefter gemmes i ovenstående sti med fakturanummeret som filnavn.
Avatar billede word-hajen Nybegynder
23. august 2007 - 19:20 #20
Filen med fakturanummer (se http://www.eksperten.dk/spm/777861) skal placeres i samme folder som skabelonen. Nedenstående kode skal placeres i skabelonens Document_New event.

Hvis der mangler noget undervejs (f.eks. bogmærket, eller filen med fakturanummer), får brugeren en meddelelse herom og dokumentet bliver lukket uden at være gemt.

*******************
Private Sub Document_New()
    Dim objInvoiceDoc As Document
    Dim objDoc As Document
    Dim strNumber As String
    Dim strInvoiceFile As String
    Dim strSavePath As String
    Dim lngNumber As Long
   
    strSavePath = "F:\data\Faktura"
   
    If Dir(strSavePath, vbDirectory) <> "" Then
        If ActiveDocument.Bookmarks.Exists("faknr") Then
            Set objInvoiceDoc = ActiveDocument
            strInvoiceFile = objInvoiceDoc.AttachedTemplate.Path & "\Fakturanummer.doc"
   
            If Dir(strInvoiceFile) <> "" Then
                Set objDoc = Documents.Open(strInvoiceFile)
                strNumber = objDoc.Range.Text
               
                If IsNumeric(strNumber) Then
                    lngNumber = CLng(strNumber)
                    lngNumber = lngNumber + 1
                    objDoc.Range.Text = CStr(lngNumber)
                    objDoc.Close True
                    With objInvoiceDoc
                        .Activate
                        .Bookmarks("faknr").Range.Text = lngNumber
                        .SaveAs strSavePath & "\" & CStr(lngNumber) & ".doc"
                    End With
                Else
                    MsgBox "Dokumentet med fakturanumre indeholder enten ikke et nummer eller også indeholder dokumentet " & _
                        "mere end blot et tal.", vbCritical, "Hent fakturanummer"
                    objInvoiceDoc.Close wdDoNotSaveChanges
                End If
            Else
                MsgBox "Kan ikke finde filen med fakturanumre (" & strInvoiceFile & "). Kontakt administrator.", _
                    vbCritical, "Generér fakturanummer"
                objInvoiceDoc.Close wdDoNotSaveChanges
            End If
        Else
            MsgBox "Bogmærke til indsættelse af fakturanr. mangler. Kontakt administrator.", vbCritical, "Indsæt fakturanummer"
            ActiveDocument.Close wdDoNotSaveChanges
        End If
    Else
        MsgBox "Kan ikke finde folderen, hvor fakturaen skal gemmes (" & strSavePath & "). Kontakt administrator", vbCritical, "Gem faktura"
        ActiveDocument.Close wdDoNotSaveChanges
    End If

    Set objDoc = Nothing
    Set objInvoiceDoc = Nothing

End Sub
*****************
Avatar billede N00b Novice
24. august 2007 - 12:45 #21
Hvor finder jeg den der "skabelonens Document_New event." ting ??
Kan man evt. tilføje ordre nummeret til save path så filnavnet bliver. Ordre nummer-faknr.doc ??

/Rex
Avatar billede word-hajen Nybegynder
27. august 2007 - 00:39 #22
Åbn skabelonen. Klik på Alt+F11. Du står nu i kodevinduet og umiddelbart bør din markør stå i det, der hedder ThisDocument (bør du kunne se til venstre i skærmbilledet). Dobbeltklik på ThisDocument. Du får nu 2 rulleliste samt noget, der ligner et blankt ark. Vælg Document i den første rulleliste. Der sker nu noget i selve kodevinduet, som kommer til at se således ud:

Private Sub Document_New()

End Sub

Det er skabelonens Document_New event, hvor koden skal placeres.

Mht. ordrenummeret, så bliver det jo indtastet, når koden er afviklet og dokumentet er derfor allerede gemt. Så der er lidt med rækkefølgen (men selvfølgelig kan det lade sig gøre; det skal bare gøres på en anden måde).
Avatar billede N00b Novice
28. august 2007 - 13:49 #23
Jeg har prøvet at indsætte koden, men jeg kan ikke få det til at virke :-(
Er der nogle speciele kunstner man skal for at det virker?, Jeg får ikke engang nogle fejlmeldinger.

/Rex
Avatar billede word-hajen Nybegynder
28. august 2007 - 20:35 #24
Du har sat koden ind i skabelonen (altså en fil med .dot som "efternavn")? For når du har gjort det og efterfølgende laver et nyt dokument baseret på skabelonen, bliver koden afviklet. Medmindre dit sikkerhedsniveau er sat til højt og du ikke har placeret skabelonen i en skabelonfolder (som default bliver anset som trusted folder fra Office 2000 - 2003).

Tjek sikkerhedsniveau, hvis du har placeret koden i Document_New-eventet i en skabelon. Format - Makro - Sikkerhed..(et eller andet).
Avatar billede N00b Novice
29. august 2007 - 06:32 #25
Det hjalp at sætte makro sikkerheden ned.
Men nu får jeg følgende fejl,
"Run-Time error '6124'
You are not allowed to edit this region because document protection is in effect."

Og det er lige det, for jeg benytter jo felter og for at de virker er jeg nød til at låse resten af dokumentet...

Men det undre mig, da feltet faknr jo ikke er låst - og derfor bør kunne opdateres
Kan dette omgås på nogle måder ?

/Rex
Avatar billede word-hajen Nybegynder
29. august 2007 - 09:30 #26
Du beskytter jo hele dokumentet til det, der hedder Protected for forms. Det betyder, at man kun kan udfylde formularfelterne. Du skal undlade at beskytte din skabelon og derefter tilføje kode til Document_New-eventet, der beskytter det nye dokument, når fakturanummer er gemt.

Tilføj følgende linje kode:

ActiveDocument.Protect wdAllowOnlyFormFields

efter linjen .Bookmarks("faknr").Range.Text = lngNumber
Avatar billede N00b Novice
31. august 2007 - 15:40 #27
"Mht. ordrenummeret, så bliver det jo indtastet, når koden er afviklet og dokumentet er derfor allerede gemt. Så der er lidt med rækkefølgen (men selvfølgelig kan det lade sig gøre; det skal bare gøres på en anden måde)."

:-) Hvordan ...? ved at gemme ved afslutning vil jeg gætte, men...

/Rex
Avatar billede word-hajen Nybegynder
01. september 2007 - 14:32 #28
Njaeh, mere noget med at bede om ordrenummeret ved oprettelse af fakturaen. Men hvad vil du bruge ordrenummeret til - en slags søg? For så kunne der måske være en anden mulighed.
Avatar billede N00b Novice
01. september 2007 - 18:02 #29
Nemmelig lige præsis, det er for at vi har mulighed for at lokalicere fakturaen, hvis den skulle bruges igen, og da vi ikke benyter faktura nummere til referancer men ordre nummere, ville det være fedt at kunne tilkoble ordre nummeret til faktura nummeret, det er nemmelig sådan at der kan ære et kæmpe spring mellem ordre nummere ifht. faktura nummeret da det kun er ordre der bliver sendt til ikke eu lande (norge og sååen) ((ikke spørge hvorfor )).

Og da alle faktura ender på et fælles drev, ville det gøre det meget nemmere for hvem der nu skulle benytte dem, at finde den korrekte.

Men hvis det ikke kan lade sig gøre, så er det oki, lidt øv,, men oki.

/Rex
Avatar billede word-hajen Nybegynder
01. september 2007 - 18:36 #30
Alt kan som udgangspunkt lade sig gøre :-) - også dettte. Jeg ville bare høre hvorfor, fordi der så kan være en anden løsning end at bruge både fakturanummer og ordrenummer som filnavn.

Et dokument indeholder nogle dokumentegenskaber. Nogle af disse kan man se i stifinderen (man kan f.eks. tilføje en kolonne i stifinderen til at vise subject, som er en dokumentegenskab). På den måde kan du faktisk sortere i stifinderen på fakturanummer eller ordrenummer. Måske var det en fordel for dig/jer?
Avatar billede N00b Novice
02. september 2007 - 15:13 #31
Nej for oftest bliver der søgt efter fakturaen gennem word, og vi er desværre meget begrænset hvad bruger dygtighed angår, samt at vi er begrænset mht. til søg i stifinder oglig. grundet system sikkerhed...

Det var der for at det ville, være fedest at det blev tilknyttet filnavnet...

Det her Q. er totalt ude i måske kan de(t egentlig ladesiggøre osv. Kan man via koder fjerne makroen fra de "færdige" faktura, det er mere kun af nysgeriehed end af praktis, og hvis man kan hvordan?)
Avatar billede word-hajen Nybegynder
02. september 2007 - 19:37 #32
Ok. Jeg synes bare, at det er en bedre idé at have 2 kolonner at kigge i. Du kan i øvrigt få vist nøjagtig det samme, når man bruger Word til at åbne med i stedet for stifinder.

Jeg har tilpasset proceduren, så brugeren bliver bedt om at indtaste ordrenummeret, når der genereres en ny faktura.

*********
Private Sub Document_New()
    Dim objInvoiceDoc As Document
    Dim objDoc As Document
    Dim strNumber As String
    Dim strInvoiceFile As String
    Dim strOrderNumber As String
    Dim strSavePath As String
    Dim lngNumber As Long
   
    strSavePath = "F:\data\Faktura"
   
    If Dir(strSavePath, vbDirectory) <> "" Then
        If ActiveDocument.Bookmarks.Exists("faknr") Then
            Set objInvoiceDoc = ActiveDocument
            strInvoiceFile = objInvoiceDoc.AttachedTemplate.Path & "\Fakturanummer.doc"
   
            If Dir(strInvoiceFile) <> "" Then
                Set objDoc = Documents.Open(strInvoiceFile)
                strNumber = objDoc.Range.Text
               
                If IsNumeric(strNumber) Then
                    lngNumber = CLng(strNumber)
                    lngNumber = lngNumber + 1
                    objDoc.Range.Text = CStr(lngNumber)
                    objDoc.Close True
                    With objInvoiceDoc
                        .Activate
                        .Bookmarks("faknr").Range.Text = lngNumber
                        strOrderNumber = InputBox("Indtast ordrenummer", "Ordrenummer på faktura")
                        If strOrderNumber <> "" Then
                            .Bookmarks("ordrenr").Range.Text = strOrderNumber
                            .Protect wdAllowOnlyFormFields
                            .SaveAs strSavePath & "\" & strOrderNumber & "-" & CStr(lngNumber) & ".doc"
                        Else
                            MsgBox "Du indtastede ikke ordrenummrer.", vbExclamation, "Manglende ordrenummer"
                            objInvoiceDoc.Close wdDoNotSaveChanges
                        End If
                    End With
                Else
                    MsgBox "Dokumentet med fakturanumre indeholder enten ikke et nummer eller også indeholder dokumentet " & _
                        "mere end blot et tal.", vbCritical, "Hent fakturanummer"
                    objInvoiceDoc.Close wdDoNotSaveChanges
                End If
            Else
                MsgBox "Kan ikke finde filen med fakturanumre (" & strInvoiceFile & "). Kontakt administrator.", _
                    vbCritical, "Generér fakturanummer"
                objInvoiceDoc.Close wdDoNotSaveChanges
            End If
        Else
            MsgBox "Bogmærke til indsættelse af fakturanr. mangler. Kontakt administrator.", vbCritical, "Indsæt fakturanummer"
            ActiveDocument.Close wdDoNotSaveChanges
        End If
    Else
        MsgBox "Kan ikke finde folderen, hvor fakturaen skal gemmes (" & strSavePath & "). Kontakt administrator", vbCritical, "Gem faktura"
        ActiveDocument.Close wdDoNotSaveChanges
    End If

    Set objDoc = Nothing
    Set objInvoiceDoc = Nothing

End Sub
**********

Den færdige faktura indeholder ikke makroen; det gør den bagvedliggende skabelon. Og ja, man kan godt fjerne den bagvedliggende skabelon, men så bliver Normal.dot koblet på i stedet.

ActiveDocument.AttachedTemplate = ""
Avatar billede N00b Novice
02. september 2007 - 20:03 #33
Det ville oxe være fint med stifinder, men af administrative/sikkerheds hensyn kan man ikke andet end browse normalt i vores stifinder (citrix miliø og'såen)

Jeg tester koden senere (har kun lige fået sat pc til, efter en uge uden)

/Rex
Avatar billede word-hajen Nybegynder
02. september 2007 - 20:14 #34
Hmm... du ved selvfølgelig bedst, hvad I har gjort/spærret osv., men jeg har virkelig svært ved at tro, at I har spærret for muligheden for at tilføje en kolonne i stifinderen. Og hvis du nu vil teste det, så åbn din stifinder, vælg detaljevisning/details i en folder, højreklik på en kolonneoverskrift. Kan du vælge at få vist andre informationer/kolonner?
Avatar billede word-hajen Nybegynder
02. september 2007 - 20:14 #35
Jeg tillader mig at smide et svar.
Avatar billede N00b Novice
02. september 2007 - 20:48 #36
Klart, du fortjener sq oxe alle point'sne + 10.000 tak og altmuligt.

Kancaie bukker,skraber og meddeler word-hajen at han er en WordGud :-)

/Rex
Avatar billede word-hajen Nybegynder
02. september 2007 - 21:35 #37
Bukker og takker (og meddeler, at word-hajen er en kvinde ;-))
Avatar billede N00b Novice
02. september 2007 - 22:09 #38
woops sorry, men stadig en WordGud ;-)
Avatar billede N00b Novice
03. september 2007 - 13:08 #39
Hvorfor kan jeg ikke få mine felter til at beregne automatisk ?
Jeg benytter funktionen calculation og har noget der ligener sådan i feltet = b * a + d * c + f * e
Hvor felterne indeholder henholdsvis antal og pris af, og calc feltet er så totalen.
Det virker finthvis man opdatere feltet :-(

Please hjælp :-)

/Rex
Avatar billede word-hajen Nybegynder
03. september 2007 - 13:26 #40
Word opdaterer ikke felter automatisk. Dvs. at du er nødt til at markere felterne og klikke på opdatér (F9) eller sørge for, at felterne automatisk bliver opdateret ved udskrift.

Hvis du smider følgende kode ind i Document_New-eventet, sikrer du, at Opdater ved udskrift er slået til (men så piller du til gengæld også i brugerens opsætning):

Options.UpdateFieldsAtPrint = True
Avatar billede N00b Novice
03. september 2007 - 16:12 #41
Hmm det er det der undre mig, for sådan noget som dato og sådan det kan word godt finde ud af at opdatere ved print. (de faste felter), hvorfor så ikke calc felterne.

Jeg smider koden ind i skabelon feltet, det gør ikke noget at der bliver ændret i den bruger opsætning :-)...

Jeg overvejde noget med, at indsætte en knap, der så opdaterede (doc.opdater.nu-forpokker) og derefter gemte (doc.gem.nu-så.viikkemisterdatating) og slutligt printetde hele pivtøjet (uden knappen) (doc.print.nu-ud)

Men så opdagede jeg at det oxe skulle kodes og så lukkede jeg bare dokumentet, og kørte hjem :-)

Kunne man evt. gøre det på den måde ?

Og nu skal jeg vist oprette et nyt Q så du kan få nogle points, for alle de svar jeg har fået :-)

/Rex
Avatar billede word-hajen Nybegynder
03. september 2007 - 19:26 #42
Ja, det kunne man godt.

Public Sub OpdaterGemPrint
    With ActiveDocument
        .Unprotect
        .Range.Fields.Update
        .Protect wdAllowOnlyFormFields
        .Save
        .PrintOut
    End With
End Sub
Avatar billede N00b Novice
03. september 2007 - 21:54 #43
Jeg prøvede, det virkede ikke felterne blev bare "slettet" :-(

Men efter at have fjernet beskyttelsen så virkede det ;-)

Men hvordan kan jeg undgå at knappen bliver printet med på fakturaen, det ser lidt ufedt ud :-P

Og og et sidste Q. (jeg skal nok oprette 2 nye Q's så du k'a få points)

Kan man spærre felterne i den færdige faktura så ingen af dem kan ændres? (uden at deaktivere, doc sikerheden.

/Rex
Avatar billede word-hajen Nybegynder
03. september 2007 - 22:19 #44
Ahh.. mangler lige en parameter på følgende linje

.Protect wdAllowOnlyFormFields, True

Knappen? Hvilken knap? Du skal ikke lave en knap på dokumentet, men en værktøjslinje med en knap (hader knapper midt i et dokument).

Hvad med at skrivebeskytte dokumentet - ikke for forms - men hele dokumentet, evt. med et password? I så fald skal du ændre

.Protect wdAllowOnlyFormFields, True

til

.Protect wdAllowOnlyReading, True, "LukOgSluk"

Det, som jeg har sat i "", er passwordet. Det skal du selvfølgelig ændre til noget, du vil have.
Avatar billede N00b Novice
04. september 2007 - 05:34 #45
Det var selvfølig oxe en måde at gøre det på, beskytte hele dokumentet.

jeg ændrede koden til
[code]
With ActiveDocument
        .Range.Fields.Update
        .Save
        .PrintOut
    End With
[/code]
Så virkede det, med feltopdateringerne.

Grunden til at jeg ville en knap i dokumenttet, var at når man havde tastet den sidste oplysning i bunden, så var man lige vedsiden af knappen og såen...

/Rex
Avatar billede N00b Novice
05. september 2007 - 20:24 #46
Så har jeg oprette et nyt q, smider du et svar så jeg kan give points
http://www.eksperten.dk/spm/795037

Findes der også en kommando der hedder options.opdaterevedgem ???

Eller kan man komme uden om det på en anden måde (fakturen bliver nemmelig ikke printet (hos dem der laver den) kun gemt, og vedhæftet en mail.
For jeg kan ikke finde ud af hvordan jeg skal lave den der værktøjslinie knap ting :-((

/Rex
Avatar billede word-hajen Nybegynder
05. september 2007 - 23:40 #47
Værktøjslinje:
Åbn skabelonen. Vælg Vis-Værktøjslinjer-Brugerdefineret-Tilføj-Giv passende navn. Vælg 2. fane. Klik på makro. Find den rigtige makro og træk den ud på den nye værktøjslinje. Voila :-)

Og ja, du kan f.eks. placere koden på Document_Close-eventet. Men det duer vist ikke, hvis de sender fakturaen direkte fra Word (via Filer-Send mail). Så skal du have fat i de øvrige Document-events via kode.
Avatar billede N00b Novice
06. september 2007 - 10:55 #48
kan jeg tjekke om dokumenter er beskyttet ?, for hvis man kommer til at klikke
på "knappen" 2 gange, bliver word forviret (wrong password, eller noget i den henretning), og det resultere i at felterne bliver slettet og det er mega øv :-(((, så hvis jeg kunne lave en If doc = protect, false then do kode else do ingen ting, så ikke at det sker.
Og en måde at undgå debug promt hvis man annulere indtastning af ordrenr.
/Rex
Avatar billede word-hajen Nybegynder
06. september 2007 - 14:32 #49
Ja, du kan godt tjekke om dokumentet er beskyttet og så agere derefter.

If ActiveDocument.ProtectionType <> wdNoProtection Then
   
End If
Avatar billede N00b Novice
12. september 2007 - 16:38 #50
Jeg har nu denne kode.

[code]
Private Sub Calc_Click()
With ActiveDocument
        .Range.Fields.Update
        .Save
    End With
End Sub

Private Sub Document_Close()
With ActiveDocument
        If ActiveDocument.ProtectionType <> wdNoProtection Then
        .Range.Fields.Update
        .Unprotect
        .Protect wdAllowOnlyReading, True, "rexersej"
        .Save
End If
       
    End With
End Sub

Private Sub Document_New()
Dim objInvoiceDoc As Document
    Dim objDoc As Document
    Dim strNumber As String
    Dim strInvoiceFile As String
    Dim strOrderNumber As String
    Dim strSavePath As String
    Dim lngNumber As Long
    Options.UpdateFieldsAtPrint = True
    strSavePath = "F:\DATA\Faktura"
   
    If Dir(strSavePath, vbDirectory) <> "" Then
        If ActiveDocument.Bookmarks.Exists("faknr") Then
            Set objInvoiceDoc = ActiveDocument
            strInvoiceFile = "F:\DATA\Fak.doc"
   
            If Dir(strInvoiceFile) <> "" Then
                Set objDoc = Documents.Open(strInvoiceFile)
                strNumber = objDoc.Range.Text
               
                If IsNumeric(strNumber) Then
                    lngNumber = CLng(strNumber)
                    lngNumber = lngNumber + 1
                    objDoc.Range.Text = CStr(lngNumber)
                    objDoc.Close True
                    With objInvoiceDoc
                        .Activate
                        .Bookmarks("faknr").Range.Text = lngNumber
                        strOrderNumber = InputBox("Indtast ordrenummer", "Ordrenummer på faktura")
                        If strOrderNumber <> "" Then
                            .Bookmarks("ordrenr").Range.Text = strOrderNumber
                            .Protect wdAllowOnlyFormFields
                            .SaveAs strSavePath & "\" & strOrderNumber & "-" & CStr(lngNumber) & ".doc"
                        Else
                            MsgBox "Du indtastede ikke ordrenummrer.", vbExclamation, "Manglende ordrenummer"
                            objInvoiceDoc.Close wdDoNotSaveChanges
                        End If
                    End With
                Else
                    MsgBox "Dokumentet med fakturanumre indeholder enten ikke et nummer eller også indeholder dokumentet " & _
                        "mere end blot et tal.", vbCritical, "Hent fakturanummer"
                    objInvoiceDoc.Close wdDoNotSaveChanges
                End If
            Else
                MsgBox "Kan ikke finde filen med fakturanumre (" & strInvoiceFile & "). Kontakt administrator.", _
                    vbCritical, "Generér fakturanummer"
                objInvoiceDoc.Close wdDoNotSaveChanges
            End If
        Else
            MsgBox "Bogmærke til indsættelse af fakturanr. mangler. Kontakt administrator.", vbCritical, "Indsæt fakturanummer"
            ActiveDocument.Close wdDoNotSaveChanges
        End If
    Else
        MsgBox "Kan ikke finde folderen, hvor fakturaen skal gemmes (" & strSavePath & "). Kontakt administrator", vbCritical, "Gem faktura"
        ActiveDocument.Close wdDoNotSaveChanges
    End If

    Set objDoc = Nothing
    Set objInvoiceDoc = Nothing

End Sub
[/code]

Men jeg oplever når at jeg åbner en gemt faktura, og så lukker den at den melder at koden er forkert :(, og når jeg så tager F11 kan jeg se at den ikke overføre if delen af koden :(

Hvordan kan jeg omgå dette

/Rex
Avatar billede word-hajen Nybegynder
12. september 2007 - 19:29 #51
Ti-hi, du skal lige kigge på din if-sætning (og undskyld det lille fnis; det er ikke ment så hårdt). Jeg kommenterer:

I første linje spørger du på, om beskyttelse er forskellig fra ingen beskyttelse (dvs. at hvis koden går ind i if-delen, så er dokumentet beskyttet).

If ActiveDocument.ProtectionType <> wdNoProtection Then

Så forsøger du at opdatere felterne (og vi har lige konstateret at dokumentet ER beskyttet
        .Range.Fields.Update

Så fjerner du beskyttelsen
        .Unprotect

For derefter at sætte den på igen med det samme
        .Protect wdAllowOnlyReading, True, "rexersej"
        .Save
*******
Flyt Unprotect op til før .Range.Fields.Update, så skulle den være hjemme :-)
Avatar billede N00b Novice
12. september 2007 - 20:03 #52
verdammt jeg har overhoved ikke skænket <> en tanke, jeg skal jo "bare" rette <> til == så hvis dokumentet ikke er beskyttet, så skal det beskyttes.

"Flyt Unprotect op til før .Range.Fields.Update, så skulle den være hjemme :-)"
Hvis jeg gør dette, så tja bliver felterne rydet :( det var det problem jeg havde tidliger.

Jeg tror at jeg prøver at skiftet <> ud med == og ser om ikke det virker, ellers så smider jeg en "else" ind og samler koden der 8}.

/Rex
Avatar billede word-hajen Nybegynder
12. september 2007 - 20:28 #53
Jamen hvorfor så unprotecte for derefter at protecte igen?
Avatar billede N00b Novice
13. september 2007 - 12:53 #54
Det er fordi at der kom en fejl hvis jeg prøvede at protecte et protecet dokument. (jeg protecter det jo for at felterne ikke skal blive slettet), derfor hæver jeg beskyttelsen, og derefter ligger jeg beskyttelse med kode på :-()

Tror at det er den rigtigeste måde at gøre det på ;)

/Rex
Avatar billede N00b Novice
13. september 2007 - 15:25 #55
Hvorfor bliver if sætningen ikke overført til selve fakturen ????
Den er i min skabelon, men ikke i min færdige skabelon :(, dette gør at jeg får en debug promt, vedr. forkert password

/Rex
Avatar billede word-hajen Nybegynder
13. september 2007 - 16:54 #56
Aha.... så det er ikke, fordi du ikke får opdateret felterne, men "alene" fordi du ville tjekke om arket var beskyttet. Du skal nok flytte lidt rundt på det, se her:

.Range.Fields.Update
If ActiveDocument.ProtectionType = wdnoprotection then .protect wdallowonlyreading, true, "rexersej"
.Save
*******

Hvad mener du med, at din if-sætning ikke bliver overført til fakturaen? Og hvad pokker mener du med, at den er i skabelonen, men ikke den færdige skabelon? Du arbejder da vel forhåbentlig kun med én skabelon og nix weiter?
Avatar billede N00b Novice
13. september 2007 - 20:49 #57
Jo selvfølig har jeg kun en skabelon, det er jo faktura jeg mener, dumme mig :)

den kode der er i den endelige faktura er

[code]
Private Sub Calc_Click()
With ActiveDocument
        .Range.Fields.Update
        .Save
    End With
End Sub

Private Sub Document_Close()
With ActiveDocument
        .Range.Fields.Update
        .Unprotect
        .Protect wdAllowOnlyReading, True, "rexersej"
        .Save
     
End With
End Sub

Private Sub Document_New()
Dim objInvoiceDoc As Document
    Dim objDoc As Document
    Dim strNumber As String
    Dim strInvoiceFile As String
    Dim strOrderNumber As String
    Dim strSavePath As String
    Dim lngNumber As Long
    Options.UpdateFieldsAtPrint = True
    strSavePath = "F:\DATA\Faktura"
 
    If Dir(strSavePath, vbDirectory) <> "" Then
        If ActiveDocument.Bookmarks.Exists("faknr") Then
            Set objInvoiceDoc = ActiveDocument
            strInvoiceFile = "F:\DATA\Fak.doc"
 
            If Dir(strInvoiceFile) <> "" Then
                Set objDoc = Documents.Open(strInvoiceFile)
                strNumber = objDoc.Range.Text
             
                If IsNumeric(strNumber) Then
                    lngNumber = CLng(strNumber)
                    lngNumber = lngNumber + 1
                    objDoc.Range.Text = CStr(lngNumber)
                    objDoc.Close True
                    With objInvoiceDoc
                        .Activate
                        .Bookmarks("faknr").Range.Text = lngNumber
                        strOrderNumber = InputBox("Indtast ordrenummer", "Ordrenummer på faktura")
                        If strOrderNumber <> "" Then
                            .Bookmarks("ordrenr").Range.Text = strOrderNumber
                            .Protect wdAllowOnlyFormFields
                            .SaveAs strSavePath & "\" & strOrderNumber & "-" & CStr(lngNumber) & ".doc"
                        Else
                            MsgBox "Du indtastede ikke ordrenummrer.", vbExclamation, "Manglende ordrenummer"
                            objInvoiceDoc.Close wdDoNotSaveChanges
                        End If
                    End With
                Else
                    MsgBox "Dokumentet med fakturanumre indeholder enten ikke et nummer eller også indeholder dokumentet " & _
                        "mere end blot et tal.", vbCritical, "Hent fakturanummer"
                    objInvoiceDoc.Close wdDoNotSaveChanges
                End If
            Else
                MsgBox "Kan ikke finde filen med fakturanumre (" & strInvoiceFile & "). Kontakt administrator.", _
                    vbCritical, "Generér fakturanummer"
                objInvoiceDoc.Close wdDoNotSaveChanges
            End If
        Else
            MsgBox "Bogmærke til indsættelse af fakturanr. mangler. Kontakt administrator.", vbCritical, "Indsæt fakturanummer"
            ActiveDocument.Close wdDoNotSaveChanges
        End If
    Else
        MsgBox "Kan ikke finde folderen, hvor fakturaen skal gemmes (" & strSavePath & "). Kontakt administrator", vbCritical, "Gem faktura"
        ActiveDocument.Close wdDoNotSaveChanges
    End If

    Set objDoc = Nothing
    Set objInvoiceDoc = Nothing

End Sub
[/code]
Selvom koden i skabelonen indeholder, if sætningen og det er det der undre mig :-? at den så ikke ender i det endelige dokument...

Jeg har også prøvet at se om jeg kunne if'e mig ud af debug'en ved annulering af ordrenummer, men så gik det helt i fisk øv øv...

Jeg prøve med den nye if sætning i morgen når jeg er tilbage på arb.

/Rex
Avatar billede word-hajen Nybegynder
13. september 2007 - 21:07 #58
Jeg er et stort spørgsmålstegn.

1. Hvad er det for en if-sætning, vi taler om?
2. Og hvorfor skal en if-sætning ende i det endelige dokument? (eller er det bare mig, der ikke forstår, hvad du mener?)
3. Hvilken debug - hvordan annullering af ordrenummer?
Avatar billede N00b Novice
14. september 2007 - 14:04 #59
Denne er i skabelonen.
[code]
Private Sub Document_Close()
With ActiveDocument
        If ActiveDocument.ProtectionType <> wdNoProtection Then
        .Range.Fields.Update
        .Unprotect
        .Protect wdAllowOnlyReading, True, "rexersej"
        .Save
End If
       
    End With
End Sub
[/code]

Men når man åbner fakturen (den færdige) har jeg kun denne.

[code]
Private Sub Document_Close()
With ActiveDocument
        .Range.Fields.Update
        .Unprotect
        .Protect wdAllowOnlyReading, True, "rexersej"
        .Save
     
End With
End Sub
[/code]
Det giver desvære en error når man lukker, da koden jo prøver at unprotecte en kode beskyttet dokument uden at have koden...

Egentlig ville det jo være fedest at koden slet ikke blev kørt, da fakturen jo er "færdig".

Jeg får følgende hvis jeg starter en faktura, og der efter vælger at lukke på [x] når der bliver spurgt efter ordrenr.
Det kan ikke lade sig gør at fjerne beskyttelsen fra et ikke beskyttet dokument, eller nget i den henretning.

Men jeg tror at det er noget der hænger sammen med min close kode.

Jeg må arb. lidt vidre på det.

/Rex
Avatar billede N00b Novice
14. september 2007 - 15:18 #60
Ha, jeg fik den.
Jeg opdaterede koden sådanne.

[code]
Private Sub Document_Close()
Dim objInvoiceDoc As Document
Dim objDoc As Document
With ActiveDocument
        If ActiveDocument.ProtectionType <> wdNoProtection Then
        .Range.Fields.Update
        .Save
        Else
        .Protect wdAllowOnlyReading, True, "rexersej"
        .Range.Fields.Update
        .Save
        End If
    End With
    Set objDoc = Nothing
    Set objInvoiceDoc = Nothing
End Sub
[/code]
Og det fjernede onclose fra den færdige fakture....

/Rex
Avatar billede word-hajen Nybegynder
14. september 2007 - 16:38 #61
Fint, at du har fået det til at virke :-)

Jeg bliver lidt småbekymret, når du siger, at du har en kode i skabelonen og en anden i fakturaen.... Fakturaen skulle jo gerne være baseret på skabelonen og dermed have fat i koden derigennem. Der skal ikke være nogen kode i selve dokumentet (tjek lige, om din faktura rent faktisk har fat i skabelonen).

Mht. om Close-koden skal køre eller ej, så kan man godt lægge en lille tjekker ind, så den "bare" springer Close-koden mere eller mindre over, hvis det nu er en faktura, man bare har åbnet for at kigge lidt i/print.
Avatar billede N00b Novice
14. september 2007 - 17:54 #62
LOL for at det ikke skal være løgn, så virker den kode jeg har sat ind ikke helt alligevel, da den ikke spærre dokumentet ??

Jeg er faktisk endnu mere forbløffet, over måden at den "opføresig"
Men jeg gætter at det er fordi at word køre via en citrix, men jeg tør ikke garantere at det er derfor, dog ved jeg at koden bliver ført over i fakturaen :(, eller retter det virker som om at skabelone ligger åben bagved/bliver åbnet samtidig med eller noget der ligner. Hverfald har jeg begge i VB kode vinduet. Og jeg bruger den kode jeg har pastet tidligere.

Jeg smider lige enfærdig fak på nettet, så kan du se hvad jeg mener.

/Rex
Avatar billede N00b Novice
14. september 2007 - 18:00 #63
Ahh jeg prøvede at omdøbe skabelonen, og nu er der ikke makroer i fakturaen.

www.kancaie.dk/fak.zip (det er både skabelon, og faktura)

/Rex
Avatar billede word-hajen Nybegynder
14. september 2007 - 18:20 #64
Det er sådan set rigtigt, at du har adgang til både skabelonen og din faktura i kodevinduet. Fakturaen har nemlig fat i skabelonen, og der adskiller Word sig fra både Excel og Powerpoint.

At Word kører via citrix skulle ikke give nogle problemer (jeg har op til flere løsninger kørende på citrix).

Det er i øvrigt et "dårligt link", du har postet. Gider du prøve igen eller sende mig dine filer, så jeg evt. kan rode lidt i dem? lemontree snabelting jubii dot dk (udskift de relevante steder *s*)
Avatar billede N00b Novice
14. september 2007 - 18:35 #65
prøv linket igen, havde dobbelt .zip'et den :-)

/Rex
Avatar billede N00b Novice
23. september 2007 - 11:16 #66
Har du kunne se hvorfejlen ligger ???

/Rex
Avatar billede word-hajen Nybegynder
23. september 2007 - 18:07 #67
Har siddet og rodet med det på et tidspunkt; måtte så lægge det fra mig og nulstillede åbenbart hukommelsen. Det beklager jeg. Men nu har jeg kigget på det igen. Lav din Document_Close om til følgende:

Private Sub Document_Close()
    With ActiveDocument
        If .Type <> wdTypeTemplate Then
            If .Path <> "" Then
                If .ProtectionType <> wdAllowOnlyReading Then
                    .Range.Fields.Update
                    .Unprotect
                    .Protect wdAllowOnlyReading, True, "rexersej"
                    .Save
                End If
            End If
        End If
    End With
End Sub

Så kører opdateringskoden ikke, når du har lukker en "gammel faktura", der allerede er opdateret, gemt og beskyttet. Den kører heller ikke, hvis det er en faktura, hvor man har trykket på Cancel/Annullér i inputboxen (tager jeg hånd om ved at spørge på, om dokumentet har en sti - hvis ikke den har det, er den ikke gemt og skal derfor heller ikke gemmes).

Med hensyn til,
Avatar billede N00b Novice
11. oktober 2007 - 10:53 #68
Hov, jeg mangler da at melde tilbage...
Jeg fandt fejlen (mht. at den fangede den gl. skabelon) det var forde at jeg havde kopieret skabelonerne til mit H: drev, hvilket viste sig til at oxe være skabelon mappen (tosset opsætning fra IT side), så derfor referede fakturaen jo logsik til den skabelon der lå der da den jo var trusted :-)

Rex takke og bukker endnu en gang.

Ps. jeg poster lige et link til en færdig skabelon så andre der måske ville bruge en sådanne kan kigge på den

/Rex
Avatar billede word-hajen Nybegynder
11. oktober 2007 - 22:40 #69
Aha.. ;-)

Tak for tilbagemeldingen.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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