anoniem Geplaatst: 2 juni 2006 Delen Geplaatst: 2 juni 2006 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. :) Quote Link naar reactie
anoniem Geplaatst: 2 juni 2006 Auteur Delen Geplaatst: 2 juni 2006 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). Quote Link naar reactie
anoniem Geplaatst: 4 juni 2006 Auteur Delen Geplaatst: 4 juni 2006 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 Quote Link naar reactie
anoniem Geplaatst: 5 juni 2006 Auteur Delen Geplaatst: 5 juni 2006 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 Link naar reactie
anoniem Geplaatst: 7 juni 2006 Auteur Delen Geplaatst: 7 juni 2006 [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"? Quote Link naar reactie
anoniem Geplaatst: 7 juni 2006 Auteur Delen Geplaatst: 7 juni 2006 De eerste expressie uit het zoek-vak, dus wat tussen () staat. * staat voor 0 of meer tekens. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen