[VB in Access] Automatisch velden laten invoegen in Word

Pagina: 1
Acties:

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Ik heb een tabel genaamd Intake. Daar staat informatie van bedrijven met een stel velden. Een paar velden zijn bv Naam, Adres, Postcode, Telefoon, enz.

Nu wordt die tabel, als een (nieuwe) klant belt, ingevuld door een medewerker van een bedrijf. Nu gaat er een tijdje overheen (die data blijft natuurlijk gewoon in de tabel staan) todat het dan zover komt dat er een offerte gemaakt moet worden. Ik heb dus een formuliertje gemaakt, waar netjes gezien kan worden of alles klopt (indien niet, kan je dat natuurlijk veranderen).

Nu wil ik dus dat je met 1 druk op de knop (ergens op me formuliertje) een groot aantal gegevens van het huidige record (waar je naar aan het kijken bent met je formuliertje) kunt invoegen in een word document.

Dus bv: je opent het formuliertje. Gaat met de navigatie knoppen van Access ff naar het goede record. Je kijkt of alles klopt (jah het klopt) en je drukt op het knopje "voeg in word" (zomaar ff een naam die op de knop staat, boeit verder niet). PRRRRR (mijn computer ratelt :P) en hup hij opent een word document, waar al tekst staat. Hij voert ff wat gegevens op bepaald plekken in... en bam klaar. Ff printen en op de post die offerte , en dat zonder enige ingave van een medewerker...

Nu kun je in Access onder het database menu, tabblad "Tabellen" al een tabel selecteren (dus niet openen), en dan staat er bovenin ergens een knopje genaamd "samenvoegen met word" (als je die natuurlijk ook aan heb staan in je "werkbalken aanpassen").

Nu wil ik eigenlijk EXACT wat dat doet, maar hij doet 1. zoveel word documenten maken als dat er records zijn (maar hij voert natuurlijk wel alles netjes in voor elke record), en ik wil dat voor het huidige geselecteerde record. En 2. ik wil dat knopje in mijn formuliertje hebben, en niet daar hebben staan.

En voor de slimme die zeggen "rapportje maken?"

nee daar lukt het niet mee.
1. Moet het opgeslagen worden in een word document
2. Kun je daarmee niet simepl tekst aanpassen (dus als je ff iets wilt aanpassen aan de standaard tekst. En de medewerkers mogen niet in de ontwerpweergave komen (dadelijk verneuken die me mooie documentje .).
3. Het gaat wel dat naar word (zie hierboven) converteren, waarom kan dan gewoon niet wat ik wil?

Nu heb ik nog wat nazoekwerk gedaan, maar ik denk dat dit niet mogelijk is met Access zelf, of met VB. Dus daarom denk ik aan een API voor Access. Nu heb ik nog ff geen API bouwer voor Access bij de hand (heb een pro versie, geen developer edition) maar die heb ik maandag dus wel tot me beschikking. Hoe moet ik dit aanpakken? Zou je kunnen zien wat de code van die knop zelf is (de "samenvoegen in word" knop), of zit dat in de Access code, die natuurlijk niet open-source is :( (ik vermoed zelf het laatste, maargoed.)?

Ik post dit alvast, maar als jullie zoiets hebben "w8 maar ff tot je die API kunt bouwen, en kijk er zelf eerst ff naar" post dan maar nix, en dan schop ik dit ding wel omhoog als ik em weer nodig heb :P (en geen slotje :| plz).

Alvast bedankt ocke

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Ik ben ondertussen al wat verder gekomen. Ik heb dit geprogd:
(de "waarde" die moet ingevoerd worden als string, is een nummer om te kijken welk record het huidige is)

[code, vb, 1, 4]
Function MergeIt(waarde As String)
Dim objWord As Word.Document

Set objWord = GetObject("C:\Rapport.doc", "Word.Document")
' Make Word visible.
objWord.Application.Visible = True
' Set the mail merge data source as the bob database.
objWord.MailMerge.OpenDataSource _
Name:="C:\bob.mdb", _
LinkToSource:=True, _
Connection:="TABLE InTake", _
SQLStatement:="SELECT * FROM InTake"
' Execute the mail merge.
objWord.MailMerge.Execute
End Function
[/code]

Dit werkt.. althans, hij doet tot hier gewoon alles hetzelfde als het knopje indruk "samenvoegen met word", en ik wil natuurlijk maar 1 record invoegen in het word document, en niet alle records.

Ik weet niet prcies hoe het werkt, maar ik dacht aan een record type, met alleen het record wat ik nodig heb. Dus heb ik er dit van gemaakt:

[code, vb, 1, 4]
Function MergeIt(waarde As String)
Dim objWord As Word.Document
Dim dbs As Database
Dim rst As Recordset

Set dbs = CurrentDb 'OpenDatabase("C:\bob.mdb")
Set rst = dbs.OpenRecordset("SELECT * FROM InTake WHERE RelatieNummer=" & waarde, dbOpenSnapshot)

Set objWord = GetObject("C:\Rapport.doc", "Word.Document")
' Make Word visible.
objWord.Application.Visible = True
' Set the mail merge data source as the bob database.
objWord.MailMerge.OpenDataSource _
Name:=dbs, _
LinkToSource:=True, _
Connection:="TABLE rst", _
SQLStatement:="SELECT * FROM rst"
' Execute the mail merge.
objWord.MailMerge.Execute
rst.Close
dbs.Close
End Function
[/code]

Maar dit werkt dus niet echt.. Wat doe ik fout?

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
* ocke schopt omhoog :Y)

Ik ben nml ondertussen niet verder gekomen. Heeft niemand een idee? :(

Verwijderd

Waarom wil je de merge functie van Access gebruiken ?
Je kan nl zelf ook iets proggen wat alleen je data velden op de goede plek zet in Word en een nieuw of bestaand document.
Werkt perfect, heb al tientallen rapporten draaien en Word en Excel vanuit VB en Access.

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
ohwjah dat zou ook perfect zijn. Maar hoe maak je zoiets? Kun je me de source ff passen :P, dat zou mij een hoop zoek- en progtijd schelen.

Verwijderd

ocke schreef op 03 september 2002 @ 18:37:
ohwjah dat zou ook perfect zijn. Maar hoe maak je zoiets? Kun je me de source ff passen :P, dat zou mij een hoop zoek- en progtijd schelen.
Je zou opzich toch een standaardbrief kunnen maken met samnvoegvelden? Zorg je dat de recordbron een query is met parameter zodat je ook kan selecteren van wie er een iets uitgeprint moet worden.

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

En als je het zo doet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function MergeIt(waarde As String)
Dim objWord As Word.Document
Dim dbs As Database
Dim rst As Recordset

Set dbs = CurrentDb 'OpenDatabase("C:\bob.mdb")
Set rst = dbs.OpenRecordset("SELECT * FROM InTake WHERE RelatieNummer=" & waarde, dbOpenSnapshot)

Set objWord = GetObject("C:\Rapport.doc", "Word.Document")
' Make Word visible.
objWord.Application.Visible = True
' Set the mail merge data source as the bob database.
objWord.MailMerge.OpenDataSource _
Name:=dbs, _
LinkToSource:=True, _
Connection:="TABLE rst", _
SQLStatement:="SELECT * FROM rst WHERE ID = " + CStr(id)
' Execute the mail merge.
objWord.MailMerge.Execute
rst.Close
dbs.Close
End Function


id = vul je dan met het id van de geselecteerde record.

Verwijderd

ocke schreef op 03 september 2002 @ 18:37:
ohwjah dat zou ook perfect zijn. Maar hoe maak je zoiets? Kun je me de source ff passen :P, dat zou mij een hoop zoek- en progtijd schelen.
Als je interesse hebt dan heb ik wel een Word document wat ik je kan mailen waarin staat hoe je met Word objecten moet werken. Dit gaat wel over Word 97.

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
ah mooi. ik heb ook word 97 hier. Mail maar naar ocke@exploder.nl

  • ocke
  • Registratie: Juni 2000
  • Laatst online: 10-04 18:26
Het is me al gelukt ErikvSon. Het werkt nog beter dan ik in eerste instantie d8.

thx ErikvSon :)
Pagina: 1