Hej Båda sätten kan användas. Hej Jag tog koden rakt ur från mitt projekt (dumt av mig) tänkte att du mer skulle se Hm.. var nog lite förhastad där testade scriptet inte ordentligt. Vilken version av MS Word Object Library refferar du till i ditt project ? Mjaha Nääää i'm clueless tyvärr. Det borde fungera alldeles finemangs. Hoppas nån annan har nån bright ide. Fattar inte varför Ni håller på med en massa krångel med konstiga objekt. Rekommenderar på det varmaste att du installerar denna Printer. Vad som är en snygg utskrift, är ofta en smakfråga, men det finns vissa grundläggande fakta för hur dokument ska se ut för att var lättlästa. Jag tycker att du ska satsa på att först göra en korrekt layout av det dokument du ska skriva ut, sedan är det mera teknikaliterar hur utskriften görs. Djä.. bullshit resonemang.Göra en snygg utskrift
Jag håller på att göra ett sorts beställnings program när man har skrivit klart beställningen skall man då skriva ut ett papper med alla uppgifter på.
I utskriften vill jag ha en Logo och diverse tabeller där texten står i. Finns det något effektivt o lätt sätt att skapa detta i vb6.0 om inte. finns det något effektivt sätt att skapa allt detta i word genom visual basic?Sv: Göra en snygg utskrift
1. Att koda det i VB är statiskt och ändras inte så lätt. Mycket pill att få till det
och det kommer gå åt en del papper innan du är nöjd. Sedan är det en bugg
i printerobjektet som gör att den kompilerade koden vänder på Y-Scalan tror
jag, för vissa metoder som line har jag för mig. Det betyder att när du utvecklar
så ser det bra ut o när du kompilerat ser det skit ut.
2. Att skapa en "mall" i word och sedan utföra search and replace är enkelt
och effektivt. Mallen kan också ändras av andra, vilket man kanske inte vill.
exempel på 1:an
<code>
Option Explicit
Private Sub Form_Load()
Printer.PaperSize = vbPRPSA4 'A4 papper
Printer.Scale (0, 0)-(210, 297) 'mm på A4 pappers format
Printer.CurrentX = 100 'X position
Printer.CurrentY = 100 'Y position
With Printer.Font
.Name = "Tahoma"
.Size = 20
.Bold = True
End With
Printer.Print "Hej detta är ett test"
Printer.EndDoc 'Gör så det skrivs ut
End Sub
</code>
exmpel på 2:an (visar hur jag gjorde i ett tidigare project med search and replace i word)
Editerad: Tog bort koden. Se istället koden i mitt nästa inlägg i tråden.Sv:Göra en snygg utskrift
Den sista koden kan jag inte få att fungera jag har lagt itll word referensen men massa andra grejer är odimensionerade, finns det ingen lätt läst guide om hur man fixar det i ett word dokument eller har inte du/någon annan någon mer lättläst kod?. jag har tittat runt på google och planet-source-code ett tag men hittar dock inget därSv: Göra en snygg utskrift
principipen där. Jag förklarar hur det ska funka och visar ett litet exempel. Detta
exempel funkar bara att infoga text (search and replace).
Skapa ett worddokument som vi kallar för MALLEN. Mallen kan innehålla
text, bilder och allt du vill ha med på utskriften. På vissa ställen i ditt word-
dokument vill du infoga egen text från ditt VB-program. Då skapar du exvis
egna små "taggar" kan vi kalla dem. <<fält x>> där x är ett nummer.
Genom att från VB utföra search and replace så kan du ersätta <<fält x>> med
din egna text. Egentligen är det VBA du sysslar med när du gör denna search
and replace operation. VBA = Visual Basic for Applications. Nåja spara mallen
på exvis c:\temp\mall.doc (Annan sökväg eller namn så måste du ändra i koden
nedan).
Klistra in denna kod i ett formulär samt en Command1 och sen bara att testa.
OBS: Innan du kör måste du lägga till en referens till Word Object Library och det gör
du under Project --> Referenses --> Väljer Microsoft Word 8.0[9.0,10.0] Object Library (Vilket du nu har)
<code>
Option Explicit
Option Base 1
Private Const FIELDS = 5 'Antal fält
Private dFields(1 To FIELDS) As String 'Fem fält i detta exempel
Private dReplacements(1 To FIELDS) As String 'Fem ersättningstexter i detta exempel
Private Sub Command1_Click()
dFields(1) = "<<fält 1>>"
dFields(2) = "<<fält 2>>"
dFields(3) = "<<fält 3>>"
dFields(4) = "<<fält 4>>"
dFields(5) = "<<fält 5>>"
dReplacements(1) = "Min ersättningstext 1"
dReplacements(2) = "Min ersättningstext 2"
dReplacements(3) = "Min ersättningstext 3"
dReplacements(4) = "Min ersättningstext 4"
dReplacements(5) = "Min ersättningstext 5"
'Anropa subben
Call searchAndReplace("c:\temp\mall.doc", dFields(), dReplacements())
End Sub
Public Sub searchAndReplace(myWordDoc As String, myFields() As String, myReplacements() As String)
Dim objWord As Word.Application 'Måste lägga till en referens till Word Object Library
Dim objWordDoc As Word.Document 'Project --> References --> Microsoft Word X.0 Object Library
Dim WordRuns As Boolean
Dim i As Integer
'Kontrollera om en instans av word redan kör
On Error Resume Next
Set objWord = GetObject(, "Word.application")
If objWord Is Nothing Then
WordRuns = False 'Wordinstans finns inte laddad
Set objWord = New Word.Application 'Skapa en instans
If objWord Is Nothing Then 'Det gick inte att skapa en
MsgBox "Kunde inte skapa instans av Word"
Exit Sub 'Ingen ide att fortsätta
End If
Else
WordRuns = True 'Word kör redan
End If
Set objWordDoc = objWord.Documents.Open(myWordDoc)
If objWordDoc Is Nothing Then
MsgBox "Kunde inte öppna dokumentet " & myWordDoc
objWord.Quit
Set objWord = Nothing
Set objWordDoc = Nothing
Exit Sub
End If
objWordDoc.Activate
For i = 1 To FIELDS
'Nu skall vi utföra lite seacrh and replace
'REPLACE myFields(i) med myReplacements(i)
With objWordDoc.Content.Find
.Text = myFields(i)
.Replacement.Text = myReplacements(i)
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With
Next i
'Skriv ut dokumentet
objWordDoc.PrintOut
'// Vänta tills skriva ut processen är klar med det. Finns säkert
'nåt bra sätt att vänta på att jobbet skickas till skrivaren. Men
'orkar inte implementera denna kod här. Grejen är att väntar man
'inte så hinner jobbet inte skickas till skrivaren innan word stängs
'och då står man där utan att fatta varför inget kom till skrivaren
'Vänta 3 sekunder. Labba med 3:an om det inte funkar. Men tips är
'att byta denna delay mot en kod som kollar på nåt sätt om skrivaren
'fått jobbet.
Dim s As Single
s = Timer
Do
DoEvents
Loop Until (Timer > s + 3)
'// Spara dokumentet.
objWord.ActiveDocument.SaveAs "c:\temp\myMall.doc"
If WordRuns = False Then
'// Stäng ner Word.Application om det inte körde innan
objWord.Application.Quit wdDoNotSaveChanges
ElseIf WordRuns = True Then
'// Annars stäng bara aktuellt dokument.
objWordDoc.Close wdDoNotSaveChanges
End If
'Släpp referensen
Set objWordDoc = Nothing
Set objWord = Nothing
End Sub
</code>Sv: Göra en snygg utskrift
När jag kommer till:
With objWordDoc.Content.Find
.Text = myFields(i)
.Replacement.Text = myReplacements(i)
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With
slutar hela programmet fungera och hela vb 6.0 stängs ner och det kommer upp en ruta att något allvarligt fel har hänt.. aldrig sett något liknade förrSv:Göra en snygg utskrift
Sv:Göra en snygg utskrift
[Peter.H]Sv: Göra en snygg utskrift
Med VB:s PrinterObjekt kan du göra precis vad du vill på ett logiskt och(jobbigt sätt).
Men ! det är en halv "könis" när man ser att det blev bra.
Kolla min Printerrutin i program PPMfonder mnuPrint och försök härma.
Programarkivet:708Sv:Göra en snygg utskrift
Då kan du kolla hur det kommer att se ut i slutändan.
Du installerar precis som vilken Printer som helst.
Sen är det bara att kolla på Layout.
Du spara en massa papper !
http://www.pdf995.com/pdfedit.html
När du kör denna skrivare tillverkas det en .pdffil som du kan kolla med AdobeSv: Göra en snygg utskrift
Hur ett korrekt dokument ska se ut finns som svensk standard ss 61 41 14, kan köpas från SIS, kolla in på www.sis.se Om du använder dig av den standarden slipper du alla diskussioner var datum, nr, dokumentnamn, adressuppgifer ska stå. Och dessutom ansluter du dig till en standard som övriga Europa använder sig.
/FimSv:Göra en snygg utskrift
Vad som är snyggt och inne bestämmer Vi konstnärer själv.
Lyssna inte på vad dessa falska profeter säger.
Budskapet skall var tydligt ! Hur det framförs är mindre viktig.
Skjut inte på budbäraren !