Toon posts:

[VBA] Sub Worksheet_Change maar dan voor MS Word..

Pagina: 1
Acties:

Verwijderd

Topicstarter
In een excel template start ik een macro zodra er op sheet1 een wijziging plaats vind door middel van onderstaande:

code:
1
2
3
Private Sub Worksheet_Change(ByVal Target As Range)
    LoopSheet1
End Sub


Nu wil ik voor een MS Word template iets soortgelijks gebruiken. Ik kan echter niet vinden hoe. Is dit mogelijk en zo ja hoe dan?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-08 12:58

NMe

Quia Ego Sic Dico.

Word heeft toch geen worksheets? Wat probeer je dan precies te doen?

VBA hoort trouwens in Officesuites en -software. :)

PW>>OFF

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ik weet natuurlijk ook wel dat Word geen Worksheets bevat. Alleen het is de bedoeling dat de macro wordt geactiveerd zodra er een wijziging heeft plaatsgevonden in het template. Net zoals het voorbeeld hierboven, maar dat gebeurd dan in een sheet. Ik weet niet of het mogelijk is maar ik hoop van wel. :)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Het document object kent geen change() event. Selection_change bestaat wel, afhankelijk van de versie die je gebruikt. Een volledig overzicht van alle events vind je hier.

offtopic:
titelfix: wotksheet staat zo dom ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Ik probeer vanuit een database een template te vullen met data. In een template file (.dot) heb ik de brief gemaakt en hier moet uiteindelijk een gemergde (.doc) brief uitkomen.
Het probleem wat ik ondervind is dat wanneer ik gebruik maak van Private Sub Document_Open() om de macro automatisch te laten starten de merge fields nog niet gevuld zijn. Oftwel, word voert eerst de macro uit en dan pas de merge van de fields. Het gevolg is dat ik niet het gewenste resultaat krijg dus.
Met Excel had ik een soorgelijk probleem maar daar kon ik het oplossen met Sub Worksheet_Change. Zodra de sheet gevuld isen dus gewijzigd word de macro gestart.
Inmiddels ben ik mede door hier er achter gekomen dat het in Word niet zo werkt.

Dit keer zal ik niet vragen naar een directe oplossing nadat ik er op ben geattendeerd dat dit niet helemaal de bedoeling was na een aantal eerdere posts van mij. Maar ik ben dan nog maar een beginneling in VBA. Mijn vraag is dus weet iemand in welke richting ik een oplossing kan zoeken voor mijn probleem? Is het bijvoorbeeld mogelijk om een macro te starten een x aantal miliseconden?

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op dinsdag 25 oktober 2005 @ 23:38:
Ik probeer vanuit een database een template te vullen met data. In een template file (.dot) heb ik de brief gemaakt en hier moet uiteindelijk een gemergde (.doc) brief uitkomen.
Het probleem wat ik ondervind is dat wanneer ik gebruik maak van Private Sub Document_Open() om de macro automatisch te laten starten de merge fields nog niet gevuld zijn. Oftwel, word voert eerst de macro uit en dan pas de merge van de fields. Het gevolg is dat ik niet het gewenste resultaat krijg dus.
???
Wat wil je nou hebben??? Want een template vul je niet met data. Vanuit een template maak je een nieuw document, dit vul je desgewenst in met data. Je template verander je niet!

Wat ik in mijn huisstijl doe is gewoon heel simpel,
maak 1 .dot bestand aan waarin je alle functies etc zet. Plaats dit .dot bestand in je wrdstart directory van word. Nu is het altijd beschikbaar met het openen van word. (In dit bestand staat in mijn geval al mijn code, en deze code kan dan een brief / fax / etc. template openen waar geen code instaat. De 1e code draait door dus vul ik hier ook de waardes in in de template die net geopend is)
Dus nu kan je doordat je 1e .dot altijd met word beschikbaar komt via office automation word opstarten en de startfunctie opstarten inc parameters.

Wat ik in dit geval zou doen ( uitgaande van access=database? als basis ) is eerst een template maken in word met 1 pagina zoals het eerste adres eruit moet komen te zien.
Dan via access wordautomation het template openen, dan de 1e pagina vullen met 1e adres. Dan new page commando geven via wordautomation, en 2e pagina vullen met 2e adres etc.
Of vanuit wordautomation een mailmerge commando geven.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Is dit nog hetzelfde probleem als waarmee je in augustus aan het stoeien was? In dat geval lijkt het me slim om even helemaal terug naar af te gaan en eerst even op een rijtje te zetten wat je nu exact wilt wat er gebeurt en in welke volgorde, en op welke manier dat in gang gezet moet worden, voordat je probeert oplossingen te vinden als een vertraging o.i.d.

In ieder geval moet je bij templates de gebeurtenissen 'document_new()'en document_open() gaat uit elkaar houden. Het eerste gebeurt als er een nieuw document wordt aangemaakt op basis van hettemplate, het tweede alleen als een bestaand document geopend wordt of het template zelf als document.

Code die uitgevoerd moet worden na het mailmergen kun je ook in de mailmerge events plaatsen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • DyStiC
  • Registratie: November 2000
  • Niet online

DyStiC

'Atta way, baby!

Inderdaad het beste kun je MailMergeAfterMerge gebruiken, die is er tenslotte voor bedoeld. Als ik naar je andere topic kijk dan ben je niet verder gekomen met die vertraging die zou je evt. ook kunnen doen met de volgende code
Visual Basic:
1
2
3
4
Sub AutoOpen()
Application.OnTime When:=Now + TimeValue("00:00:03"), Name:="<naam uit te voeren macro>"
'zie voor meer info http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbawd10/html/womthOnTime.asp
End Sub
Maar nogmaals die MailMerge events zijn beter te gebruiken in dit geval.

Verwijderd

Topicstarter
Niesje schreef op woensdag 26 oktober 2005 @ 14:39:
Is dit nog hetzelfde probleem als waarmee je in augustus aan het stoeien was? In dat geval lijkt het me slim om even helemaal terug naar af te gaan en eerst even op een rijtje te zetten wat je nu exact wilt wat er gebeurt en in welke volgorde, en op welke manier dat in gang gezet moet worden, voordat je probeert oplossingen te vinden als een vertraging o.i.d.

Code die uitgevoerd moet worden na het mailmergen kun je ook in de mailmerge events plaatsen.
Inderdaad het zelfde probleem. Ik heb nu gekozen voor een andere aanpak. Deze lijkt te werken, ik loop alleen nog tegen een klein probleempje aan. Zie het onderstaande topic.

[rml][ Word 2003] Mergefield leesteken vervangen voor enter[/rml]
Pagina: 1