range copieren naar word met bep. sjabloon

Status
Niet open voor verdere reacties.

sylvietoin

Gebruiker
Lid geworden
5 feb 2007
Berichten
56
Hallo,

Ik heb een vraag,

Ik wil een bep. range in EXCEL automatisch copieren naar WORD met een bep SJABLOON
met hierin bedrijfslogo en in de koptekst de naam van het bestand.

Wat ik heb gedaan:

WORD opgestart en m.b.v. macro opnemen:
1: nieuw document
2: sjabloon gekozen op harde schijf
3: macro opnemen gestopt

Documents.Add Template: =_ =====> MACRO OPGENOMEN IN WORD
"C:\Documents and Settings\Toin\Application Data\Microsoft\Sjablonen\test-1.dot" _
, NewTemplate:=False, DocumentType:=0

Vervolgens deze code ingevoegd in de VBA van EXCEL.

Macro opent WORD BESTAND, maar zonder SJABLOON.
Foutcode 424 object vereist?

Ik weet niet wat hiermee bedoeld wordt.
Kan ik de gemaakte code in WORD niet 1 op 1 overnemen on EXCEL ?


Voor de volledigheid heb ik de code toegevoegd



Sub Verzendadvies() ====> MACRO OPGENOMEN IN EXCEL

'This routine will export a range to a Word document with sjabloon
'It opens Word, paste the Excel range, stores the Word document and closes the Word application

Dim oWordApp As Object
Dim oWordDoc As Object
Dim oWSH As Object
Dim rExport As Range
Dim sFileName As String, sPath As String
Dim i As Long, i2 As Long

Set rExport = Worksheets("verzendadvies").Range("c9:j51") '<- Change as needed

'Find the path to "C:/8606/VERZENDADVIEZEN"
Set oWSH = CreateObject("WScript.Shell")
sPath = "c:\" & Worksheets("verzendadvies").Range("d29") & "\" & "verzendadviezen\"

'Assemble a filename for the Word document
'In this case use the value that is in the first cell of the exported range and append date
sFileName = "verzendadvies"

'Optional: make sure you have a unique filename
i = 1
While FileExists(sPath & "\" & sFileName & ".doc")
i2 = InStr(1, sFileName & ".doc", "(", vbTextCompare)
If i2 = 0 Then
sFileName = sFileName & "(" & i & ")"
Else
sFileName = Left(sFileName & "verzendadvies.doc", i2) & i & ")"
End If
i = i + 1
Wend
'Create a Word document.
Set oWordApp = CreateObject("Word.Application")

'Make the newly created Word instance visible
oWordApp.Visible = True

'Create a new document ============> TOT HIER MACRO OPGENOMEN IN EXCEL
Set oWordDoc = oWordApp.Documents.Add


Documents.Add Template: =_ ============> CODE UIT WORD INGEVOEGD
"C:\Documents and Settings\Toin\Application Data\Microsoft\Sjablonen\test-1.dot" _
, NewTemplate:=False, DocumentType:=0


'Copy data ============> VERVOLG OPGENOMEN MACRO IN EXCEL
rExport.Copy

'Paste Excel range in Word (will be pasted in a table)
oWordApp.Selection.PasteSpecial Link:=False, Placement:=wdInLine

'Save the Word document
oWordDoc.SaveAs sPath & sFileName, wdFormatDocument

'Close Word Application
oWordApp.Quit SaveChanges:=False

End Sub

'FileExists Function -> geeft TRUE terug als de file bestaat
Function FileExists(fname As String) As Boolean
FileExists = Dir(fname, vbNormal) > Empty
End Function

End Sub



Wie weet raad ?

Toin
 
Laatst bewerkt:
waarom open je niet gelijk het juiste template vanuit excel?
bijv.
Code:
Set oWordDoc = oWordApp.Documents.Open("C:\Documents and Settings\henk.hoogerbrug\Desktop\sjabloon.dot")
 
Dank je Henkhoogerbrug,

Inderdaad zo kan het ook.

Nu heb ik echter weer een ander probleempje.

In mijn sjabloon sjabloon had ik ingesteld dat de koptekst ingevuld moet worden d.m.v.

invoegen \ veld \ Filename

draai ik mijn macro, dan komt echter in de koptekst document2 te staan i.p.v.
de eigenlijke bestandsnaam range d29-verzendadvies(1)

Hoe kan ik dit oplossen?
 
om de headertext in te voegen kun je bijv. de volgende code gebruiken (even de juiste verwijzing maken):

Code:
Dim WordHeader As String
WordHeader = Worksheets(1).Range("A1")

oWordApp.ActiveDocument.Sections(1).Headers(1).Range.InsertAfter WordHeader
 
Superrrr henkhoogerbrug!!!!!!

werkt precies zoals ik het bedoeld had.

Nu nog een laatse stap tot perfectie.

Ik probeer het word doc te printen,
hiervoor heb ik in word macro opgenomen, en getracht deze aan te passen voor in excel

Dim WordprintOut As Range


' Plot worddocument
PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0

hoe krijg ik deze werkend?

Groeten Toin
 
Even nog een aanvulling/correctie op mijn vorige antwoord:
Je kunt namelijk:
Code:
oWordApp.ActiveDocument.Sections(1).Headers(1).Range.InsertAfter WordHeader
Vervangen door:
Code:
oWordDoc.Sections(1).Headers(1).Range.InsertAfter WordHeader
Dit is korter, dus ook prettiger.

Hetzelfde geld ook voor het printen, volgens mij heb je de variabele WordprintOut niet nodig.
Code:
oWordDoc.PrintOut

Ik heb alleen geen printer aangesloten, dus heb niet getest met de marges e.d., maar volgens mij kun je al de eigenschappen er gewoon achter plaatsen (waarom heb je trouwens FileName = "").
 
nogmaals bedankt Henkhoogerbrug,

Ik heb je code voor wat het printen aangaat beprobeerd.

Omdat ik nog een beginner ben in VBA, denk ik dat ik moet starten met:

1: declarenen

Code:
Dim = WordPrintOut As Range

2; printer aanroepen

Code:
oWordDoc.PrintOut

3; instellingen printer bepalen

Code:
PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0


Note: bij punt 3: gebruik ik PrintOut Filename omdat ik een macro in word heb opgenomen, in deze macro stond vervolgens deze code.

macro werkt echter niet:

Zou jij mij misschien wat meer uitleg kunnen geven over wat er mis gaat omdat mijn kennis te beperkt is om er alleen m.b.v. de help uit te komen.

Nogmaals mijn dank

Toin
 
punt 1:
je declareert een variabele, die je vervolgens niet gebruikt (ik zie hem nergens terugkomen). Wat je niet gebruikt hoef je ook niet te declareren.

punt 2:
oWordDoc.PrintOut zorgt ervoor dat het geopende worddocument geprint wordt.
Je hebt in het begin namelijk de variabel oWordDoc gedeclareerd en deze opent het word-template.

punt 3:
volgens mij staan er allemaal standaardinstellingen, die hoef je dus niet specifiek te benoemen.

Volgens mij komt je code er dan zo uit te zien:
Code:
Sub Verzendadvies() ====> MACRO OPGENOMEN IN EXCEL

'This routine will export a range to a Word document with sjabloon
'It opens Word, paste the Excel range, stores the Word document and closes the Word application

Dim oWordApp As Object
Dim oWordDoc As Object
Dim oWSH As Object
Dim rExport As Range
Dim sFileName As String, sPath As String, WordHeader As String
Dim i As Long, i2 As Long

Set rExport = Worksheets("verzendadvies").Range("c9:j51") '<- Change as needed

'Find the path to "C:/8606/VERZENDADVIEZEN"
Set oWSH = CreateObject("WScript.Shell")
sPath = "c:\" & Worksheets("verzendadvies").Range("d29") & "\" & "verzendadviezen\"

'Assemble a filename for the Word document
'In this case use the value that is in the first cell of the exported range and append date
sFileName = "verzendadvies"

'Optional: make sure you have a unique filename
i = 1
While FileExists(sPath & "\" & sFileName & ".doc")
i2 = InStr(1, sFileName & ".doc", "(", vbTextCompare)
If i2 = 0 Then
sFileName = sFileName & "(" & i & ")"
Else
sFileName = Left(sFileName & "verzendadvies.doc", i2) & i & ")"
End If
i = i + 1
Wend
'Create a Word document.
Set oWordApp = CreateObject("Word.Application")

'Make the newly created Word instance visible
oWordApp.Visible = True
Set oWordDoc = oWordApp.Documents.Open("C:\Documents and Settings\henk.hoogerbrug\Desktop\sjabloon.dot")

'Copy data ============> VERVOLG OPGENOMEN MACRO IN EXCEL
rExport.Copy

'Inser header
WordHeader = Worksheets(1).Range("A1")
oWordDoc.Sections(1).Headers(1).Range.InsertAfter WordHeader

'Paste Excel range in Word (will be pasted in a table)
oWordApp.Selection.PasteSpecial Link:=False, Placement:=wdInLine

'Save the Word document
oWordDoc.SaveAs sPath & sFileName, wdFormatDocument

'Print the Word document
oWordDoc.PrintOut

'Close Word Application
oWordApp.Quit SaveChanges:=False

End Sub
 
Nogmaals heel erg bedankt henkhoogerbrug.

Werkt wel heel erg verhelderend zo'n uitleg
Ik begrijp nu ook dat ik het word doc moet declareren i.p.v.commando's o.i.d.

Ik heb je code voor het printen overgenomen

Code:
'Print the Word document
oWordDoc.PrintOut

Echter,
er wordt niets geprint en....
hoe weet de computer welke printer aangestuurd moet worden ?
(ik dacht dat dat dan o.a. gebeurde met mijn code, welke ik in word had opgenomen)
Gebeurd dit doordat er automatisch een printopdracht naar de standaardprinter gestuurd wordt?
Zo ja, hoe werkt het dan als dit niet het geval is?

==== Update printprobleem: dd.21-02-09 ====

Ik heb bij mijn printers gekeken hoe de instellingen staan.
Op het moment van printen zie ik heel even de printopdracht in de wachtrij verschijnen, maar deze verdwijnt meteen weer.
er wordt echter niet geprint.
geef ik gewoon een printopdrcht, dan wordt deze wel afgedrukt


normaals Raad ??

Groeten Toin
 
Laatst bewerkt:
de computer gebruikt de default printer (maar volgens mij kun je ook weer een code schrijven die een printer selecteert).

Als er wel een printopdracht wordt gecreëerd, dan denk ik dat het werkt. Controleer even wat je default printer is of probeer anders de code stap voor stap uit te voeren met behulp van F8 (dan heb je rustig de tijd om te kijken wat er precies gebeurt).

Bij mij worden de documenten netjes in de wachtrij gezet en blijven ze daar ook staan als het document al is afgesloten.
 
Hoi Henkhoogerdijk, alweer bedankt...


Ik heb je raad opgevolgd,

printer staat default
via F8 loopt de macro correct en wordt dus het bestandje wel geprint.
via macro uitvoeren echter niet

ik zal ,mijn probleempje FF op het forum zetten onder een andere titel omdat mijn probleem van "range copieren naar word met bep. sjabloon"inmiddels met jouw hulp is opgelost

heel er bedankt hiervoor

groeten

toin
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan