Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

tab terug en VBA Access/Word

Paulus
5 antwoorden
  • Beste soortgenoten, hierbij 2 vragen:

    1: Hoe zet je de cursor weer in het invoerveld na verkeerde invoer? Na LostFocus komt bij verkeerde invoer een msgbox en bij vbNo wil ik dat de cursor teruggaat naar het oude veld. Setfocus in de LostFocus-sub werkt niet en screen.previouscontrol.setfocus helaas ook niet.

    2: Ik heb een kleine kantoorapp in VBA Access gemaakt en wil die gegevens in de juiste opmaak in modelbrieven van Word zetten. Wat is nu beter:
    a) in Access allemaal verschillende functies maken en dan naar Word wegschrijven (waarschijnlijk kan je dan de opmaak niet beinvloeden denk ik) of
    b) in Word zelf velden maken, bijv. <achternaam>, en deze laten inlezen door Access, die dan weer de achternaam teruggeeft aan Word. Hoe dat laatste moet weet ik niet, graag advies . Met deze methode ben je flexibeler want als je je model wil aanpassen kan je dat in Word doen. :)
  • 1) Je kan misschien de gebeurtenis Voor Bijwerken (BeforeUpdate) gebruiken. Daar zit een argument Cancel bij:
    [code:1:a4be646937]Sub txtNaam_BeforeUpdate(Cancel As Integer)
    If Len(txtNaam) > 25 Then
    MsgBox "Ingevoerde naam is te lang"
    Cancel = 1
    End If
    End Sub[/code:1:a4be646937]

    2) Bij a. kun je best de opmaak in Word manipuleren, afhankelijk van de methode die je gebruikt. Ik gebruik wel es een Word.Application-object waarnaar ik instructies uit de Word-objectbibliotheek kan sturen, dus incl. instructies om opmaak te doen:
    [code:1:a4be646937]
    Set appWord = CreateObject("Word.Application")
    appWord.Documents.New "brief.dot"
    appWord.Selection.TypeText txtNaam
    appWord.Selection.TypeParagraph
    appWord.Selection.TypeText txtAdres
    appWord.Selection.TypeParagraph
    appWord.Selection.TypeText txtPostcode & " " & UCase(txtPlaats)
    appWord.Selection.TypeParagraph
    appWord.Selection.TypeParagraph
    appWord.Selection.Font.Bold = True
    appWord.Selection.TypeText "Datum: " & Format(Date(), vbLongDate)
    appWord.Selection.Font.Bold = False

    appWord.Visible = True
    [/code:1:a4be646937]
    b. kun je met een afdruksamenvoegen-oplossing doen. Dan kun je inderdaad de sjabloon naar believen inrichten. Als je beide methoden combineert, dan kun je dus van onder je knop in Access Word starten, hoofddocument openen, samenvoegen en afdrukken. .Visible kun je dan op False laten staan, maar dan moet je wel appWord.Application.Quit wdDoNotSaveChanges erin zetten, anders blijft er een niet-zichtbare toepassing actief (killen via taakbeheer, en tijdens testen als eerste instructie die .Visible = True erin zetten, anders zit je de hele tijd te taakbeheren. Voor gebruik van een Word.Application-object moet je in Access een verwijzing maken naar de objectbibliotheek van Word (menu Extra - Verwijzingen in de VB-editor).
  • Bedankt Paulus, weer een stuk verder gekomen. Ik heb nog een vervolgvraag: met een functie van Access maak ik de NAW-gegevens van een persoon en zet deze gegevens in het Word-bestand. Nu wil ik alleen de achternaam vet hebben. De achternaam heb ik gemarkeerd met \b en /b, bijv. Jan Peter \bBalkenende/b. Hoe zorg ik dat het Jan Peter [b:9be911a5a1]Balkenende[/b:9be911a5a1] wordt in de Worddoc.

    Bachus
  • Dat kun je vervangen met jokertekens, maar dan kun je niet zoeken naar \ want dat is een jokerteken. Die vervang ik dus eerst en maak van de starttag PPP en van de sluittag QQQ, de tekst daartussen vervang ik naar vet:
    [code:1:c713f9b355]
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    End With
    Selection.Find.Execute FindText:="\b", ReplaceWith:="PPP", Replace:=wdReplaceAll
    Selection.Find.Wrap = wdFindContinue
    Selection.Find.Execute FindText:="/b", ReplaceWith:="QQQ", Replace:=wdReplaceAll
    Selection.Find.Wrap = wdFindContinue
    Selection.Find.Replacement.Font.Bold = True
    Selection.Find.Execute FindText:="PPP(*)QQQ", ReplaceWith:="\1", MatchWildcards:=True, Format:=True, Replace:=wdReplaceAll
    [/code:1:c713f9b355]
    Ik snap niet helemaal waarom ik 3 keer de .Wrap moet instellen op dezelfde waarde, maar anders deed ie het niet als de cursor onder de betreffende achternaam stond (hij wrapt dan dus niet, alsof ie die instelling vergeet, terwijl ie de andere instellingen wel onthoud).
  • [quote:76bc1e24f4="Paulus"]
    Selection.Find.Execute FindText:="PPP(*)QQQ", ReplaceWith:="\1", MatchWildcards:=True, Format:=True, Replace:=wdReplaceAll
    [/quote:76bc1e24f4]

    Het werkt :D . Dank je wel. Uit nieuwsgierigheid: wat betekent "\1"?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.