Invoegen tekst na optie aanvinken in popup(dialoog)scherm

Status
Niet open voor verdere reacties.

Dumtrala

Gebruiker
Lid geworden
18 feb 2005
Berichten
44
Dag collega coders,

Ik ben vrij nieuw met VBA en hebt daarom nogal wat vragen. Nu zou het mooi zijn als ik een site kan vinden met (veel) tutorials en handige tips voor VBA; da's vraag één.

Vraag twee is wat specifieker:
Ik wil graag in Word 2002 een document maken met een popupscherm waar de gebruiker bepaalde opties kan aanvinken, zodat deze worden opgenomen in een daarna via de macro samen te stellen document. Dus dat een bepaalde lap tekst van misschien een paar alinea's in het document wordt opgenomen als de betreffende optie is aangevinkt door de gebruiker in het popupschermpje. Zo is het doel dat ik bijvoorbeeld 5 opties geef aan de gebruiker die hij kan aanvinken, waarna daarna de stukken tekst die bij deze optie horen in het document ingevoegd worden op de plaats van de betreffende Bladwijzer(s).

Ik heb al enige tijd gezocht maar kan nergens iets vinden wat in de buurt komt en ik zou zelf niet weten hoe ik dit moet aanpakken. Iemand die me al een stukje op weg kan helpen?

Alvast bedankt!
 
dit is een mogelijkheid

if optie1 = true then

ActiveDocument.Bookmarks("bladwijzer1").Select
selection.typetext text:= "in te typen tekst"

end if

of anders

Selection.GoTo What:=wdGoToBookmark, name:= "bladwijzer1"
 
Hai, :D

In dit topic:
http://www.helpmij.nl/forum/showthread.php?threadid=201625

Heb ik een bijlage geplaats: "Invulschermpke" waarvan de data weggeschreven word naar bladwijzers in Word (en dubbele waarden geupdate worden met Velden)

Dat document maakt ook gebruik van een Userform dus het is wellicht een aardig startpunt om te beginnen...(de code is vrij eenvoudig te volgen)

Succes! :thumb:
 
Yes, het volgende werkt! :)

______________
Private Sub CommandButton1_Click()

If CheckBox1 = True Then

ActiveDocument.Bookmarks("bmInvoegenTekst").Select
Selection.TypeText Text:="Dit is tekstblok 1 en wordt ingevoegd in het document op bmInvoegenTekst"

Unload Me

End If

If CheckBox2 = True Then

ActiveDocument.Bookmarks("bmInvoegenTekst2").Select
Selection.TypeText Text:="Dit is tekstblok 2 en wordt ingevoegd in het document op bmInvoegenTekst2"

Unload Me

End If

End Sub
____________________

Joost: het invulschermpke was niet helemaal wat ik bedoelde; het dialoogscherm met invulvelden lukte wel, alleen het toevoegen van een andere test (extra blok tekst) lukt nog niet, maar bovenstaande lukt goed. Thanks Ilse DD!
 
Ik wil als aanvulling er voor zorgen dat men maar één optie tegelijk aan kan vinken. Het moet wel mogelijk zijn om te wisselen van keuze, maar wel steeds éân tegelijk, hoe kan ik dat doen?

Bijgaand het document tot nu toe.
 

Bijlagen

heel eenvoudig

verander je selectievakjes door keuzerondjes.

Let wel op dat je ze binnen een groepsvak zet (zoals je nu doet met je selectievakjes), doe je dit niet dan kan je maar 1 groep met keuzes maken per formulier

Voor het starten van het geheel kies ik meestal niet voor autonew.

Indien je in VBA links bij je project dubbelklikt op het document dan kan je directer werken. Rechts in het venster van je code zie je bovenaan 2 keuzelijsten, kies (nadat je links op de module "thisdocument" hebt gedubbelklikt) in de linkse keuzelijst kies je "document", rechts (indien nodig) "new".

Zet hier de opdracht voor om het formulier te openen.

Sla daarna je document op als sjabloon / template.

Sluit het geheel en via Bestand ==> nieuw start het mooi op met je invulscherm.
 
Bedankt voor de snelle reactie! Wat is precies het verschil met autonew en de optie die jij beschrijft? Want het doet precies hetzelfde volgens mij.

Het gebruik van radiobuttons lost inderdaad simpel het probleem op.

Ik probeer het één en ander nu zo te maken dat alle invulvelden gewist worden als iemand de macro opnieuw gebruikt om de gegevens in te vullen. Nu is het zo dat alles dubbel achter elkaar in het documen verschijnt. Ik heb geprobeerd met RangeMyBookmark dit te doen, maar het werkt alleen voor de adresgegevens. Ik krijg als foutmelding: 'het argument is niet optioneel'. Ik wil dus alle tekst-opties kunnen wissen als deze door de gebruiker gekozen en ingevuld zijn.

Bijgaand het document tot nu toe.
 

Bijlagen

Hai, :D

Je wilt graag meer van VBA leren en weten dus hier mijn goed bedoelde adviezen...

AutoNew en Document_new doen beide in essentie hetzelfde!
Het enige verschil is dat de één een AUTO-macro en de andere een Event Handler!

Maar helaas zie ik dat je terug valt in oude fouten!

Je hebt mijn Custom Sub RangeMyBookmark willen toepassen op een manier welke niet mogelijk is!

Dus zo:
Code:
  RangeMyBookmark("bmBetreft").Select
  Selection.TypeText Text:="overeenkomst sanitaire voorzieningen"
...werkelijk geen idee hoe je daar bij komt maar wellicht geïnspireerd op hier bovenstaande code...

Even voor de duidelijkheid wat er mis gaat:
* Mijn Sub MOET 2 parameters krijgen..jij geeft er maar één!
* .Select mag er niet achter want de sub RangeMyBookmark is geen Object binnen het model wat je kunt selecteren...Het is custom..dus daar kun je die methode niet zo achter plakken.

In jou vorige vraag heb je continue het voorbeeld bestand koopvaribrf gebruikt.
Hier staan dus ook optionbuttons in. De code welke ik hiervoor voorgesteld heb i.s.m. de sub RangeMyBookmark werkt in deze vraag natuurlijk ook....(vraag ik mij af waarom iets anders willen doen wat dus al goed werkt??)
Dus:
Code:
If chkKoopbrf = True Then
    RangeMyBookmark "bmBeplantingsvoorstel", sBeplant

ElseIf chkVaribrf = True Then
    RangeMyBookmark "bmBeplantingsvoorstel", sLease
    
End If
Het gaat hier om exact dezelfde situatie en vraag...dus ben eigenlijk wel benieuwd waarom je de huidige code dus zo op hebt geschreven?

Dus voor de duidelijkheid de Sub moet twee parameters...:
* De eerste is de bladwijzernaam
* De tweede is de tekstwaarde welke je er naar toe wilt schrijven..(De inhoud van de bladwijzer dus)

Nog een tip...probeer te leren coderen zonder het Selection Object! Als je dit dreigt nodig te hebben codeer dan om naar het Range Object...

Selection object is bij grote objecten mega traag en zorgt voor onverwachte problemen..

Range object is snel en superbetrouwbaar!

Veel succes! :thumb:
 
of

Als je nog niet veel van VBA weet, is werken met formuliervelden in je document of template een andere mogelijkheid.

Telkens je je formulier heropent kan je ze eenvoudig terug inlezen in je formulier en weer wegschrijven. Het is misschien iets visueler en eenvoudiger te begrijpen.
De teksten zijn wel beperkt in lengte, maar met jouw gegevens geen probleem

ActiveDocument.FormFields("fldnaam").Result = txtnaam

of andersom

txtnaam = ActiveDocument.FormFields("fldnaam").Result

Indien je ze niet blokkeert kan je ze ook vanuit je document corrigeren terwijl de je vaste teksten kan beveiligen.
 
Hai, :D

Klopt formuliervelden zijn inderdaad makkelijk om mee te werken..

Deze velden hebben een vaste range welke dus makkelijk op te roepen is en te overschrijven...

I.v.m. met de bladwijzers heb ik de Sub RangeMyBookmark geschreven welke dus ook een vaste range maakt van de bladwijzer.

@Dum
Belangrijkste lijkt mij dat je precies begrijpt waarom het ene dus wel werkt en het andere niet werkt.

Schrijf daarom commentaar tussen jou regels waarin je opschrijft waarom je dit zo hebt geschreven en hoe dat het werkt..(anders ben je het na een paar dagen weer gegeven)

Door herhaling zal één en ander vanzelf herkenbaar worden en blijven hangen..

Succes! :thumb:
 
De verwarring aan mijn kant heeft voornamelijk te maken met het feit dat ik met teveel verschillende documenten bezig ben en teveel ineens wil... Ik duik deze week in de boeken die ik besteld heb om ook te begrijpen hoe VBA is opgebouwd.. :confused:

Ik ga copy/pasten en stap voor stap door de code heen om te begrijpen wat er gebeurd; en wederom bedankt!
 
Ik begin dit punt geloof ik langszaam door te krijgen.. Ik heb zelf een regel toegevoegd:

Const sLEEG As String = " "

... om een reeds ingevulde optie weer leeg te maken, en geheel tegen verwachting werkt het ook nog. :D Als je na de gegevens een keer te hebben ingevuld daarna nog een keer de macoro start en een andere optie kiest en/of andere gegevens invult, dan worden deze allemaal goed overschreven.

Wel heb ik nog het idee dat alles makkelijker kan door niet voor elke optie (DRS, DRSenISO, GKH, GKHenISO en RLS) aparte Strings toe te voegen, omdat die tekst gewoon hetzelfde is. Dus ik kan er vier wissen en één setje Strings met tekstregels als basis gebruiken en deze terug te laten keren waar nodig. :thumb: Toch? Dat zal de volgende stap wel worden om alles nog wat overzichtelijker te maken.

Ik heb nog wel een probleem met dat OF de tekst aan elkaar komt te staan (zonder witregel ertussen) OF dat er juist TWEE witregels tussen de verschillende toegevoegde tekstregels komt te staan. Dit heeft natuurlijk te maken met als je een optie bijv. NIET kiest, dat dan een witregels wordt ingevuld op de plaats van de Bookmark, en andersom: als je de verschillende opties allemaal kiest, komen ze juist allemaal onder elkaar zonder witregel.. Maar goed, dat komt dan misschien later weer, want ik zou geen idee hebben hoe ik dat kan oplossen.

Bijgaand het document tot nu toe.
 

Bijlagen

Geplaatst door Dumtrala
De verwarring aan mijn kant heeft voornamelijk te maken met het feit dat ik met teveel verschillende documenten bezig ben en teveel ineens wil... Ik duik deze week in de boeken die ik besteld heb om ook te begrijpen hoe VBA is opgebouwd.. :confused:

Ik ga copy/pasten en stap voor stap door de code heen om te begrijpen wat er gebeurd; en wederom bedankt!
Hai, :D

Teveel hooi op de vork is nooit aan te bevelen!

Aan de andere kant werkt een gezonde werkdruk zeker versnellend op het leer en -oplossend vermogen! :thumb:
 
O ja..naar jou bijlage ga ik dadelijk even kijken...stond ondertussen al aardig wat code in zag ik! ;)
 
Hai, :D

Er staan veel teveel herhalingen in die teksten dus die heb ik eruit gehaalt.

Tevens hoef je het If block niet telkens opnieuw te starten..gebruik ELSEIF...

Ik heb ongeveer 50% van de code kunnen schrappen en wellicht kan er met wat meer tijd nog meer gewonnen worden..
de code:
Code:
Private Sub cmdInvullen_Click()
RangeMyBookmark "bmAanhef", Me.cboAanhef.Text
RangeMyBookmark "bmAanhefNaam", Me.txtAanhefNaam
RangeMyBookmark "bmBedrijfsnaam", Me.txtBedrijfsnaam.Text
RangeMyBookmark "bmTerAttentieVan", Me.txtTerAttentieVan.Text
RangeMyBookmark "bmAdres", Me.txtAdres.Text
RangeMyBookmark "bmPostcode", Me.txtPostcode.Text
RangeMyBookmark "bmWoonplaats", Me.txtWoonplaats.Text
RangeMyBookmark "bmReferentienummerKlant", Me.txtReferentienummerKlant.Text

If cboDRS = True Then
    RangeMyBookmark "bmBetreft", sDRSBetreft
    RangeMyBookmark "bmTekstInvulSoort", sDRSTekstInvulSoort
    RangeMyBookmark "bmDetails", sDRSTekstInvulInspectierapport & _
        vbCr & sDRSTekstInvulOvertuigd & vbCr & sDRSTekstInvulBinnenkort

ElseIf cboDRSenISO = True Then
    RangeMyBookmark "bmBetreft", sDRSBetreft
    RangeMyBookmark "bmTekstInvulSoort", sDRSTekstInvulSoort
    RangeMyBookmark "bmDetails", sDRSTekstInvulInspectierapport & _
        vbCr & sDRSTekstInvulOvertuigd & vbCr & sDRSTekstInvulBinnenkort & _
        vbCr & vbCr & sDRSenISOTekstInvulTevensISO

ElseIf cboGKH = True Then
    RangeMyBookmark "bmBetreft", sGKHBetreft
    RangeMyBookmark "bmTekstInvulSoort", sGKHTekstInvulSoort
    RangeMyBookmark "bmDetails", vbCr & sGKHTekstInvulOvertuigd & _
        vbCr & sGKHTekstInvulOptimaal

ElseIf cboGKHenISO = True Then
    RangeMyBookmark "bmBetreft", sGKHBetreft
    RangeMyBookmark "bmTekstInvulSoort", sGKHTekstInvulSoort
    RangeMyBookmark "bmDetails", vbCr & sGKHTekstInvulOvertuigd & _
        vbCr & sGKHTekstInvulOptimaal & vbCr & sGKHenISOTekstInvulTevensISO
        
ElseIf cboRLS = True Then
    RangeMyBookmark "bmBetreft", sRLSBetreft
    RangeMyBookmark "bmTekstInvulSoort", sRLSTekstInvulSoort
    RangeMyBookmark "bmDetails", vbCr & sDRSTekstInvulOvertuigd & _
        vbCr & sDRSTekstInvulBinnenkort
End If

    Unload Me
End Sub
Je moet zelf nog even de volgorde van de teksten controleren maar denk dat het vrij aardig zal kloppen..

Jou idee om met meerdere bladwijzers te werken heb ik veranderd..ik gebruik gewoon één bladwijzer en stel daar de string van te voren op samen..

Zie bijlage voor uitwerking.

See Yah! :thumb:
 

Bijlagen

Ziet er weer gelikt uit :)
Heb je misschien een richting waar ik het zoeken moet als het gaat om de witregels die in het document onstaan bij de keuze van sommige opties? Als je bijvoorbeeld de eerste optie kiest dan wordt een bepaalde tekst niet in het document neergezet waardoor een extra witregel te zien is in het document, terwijl de bedoeling is dat elk stukje aparte tekst in alinea's wordt weergegeven. Alleen is het ook weer zo dat sommige stukken tekst aan elkaar worden gezet, dus zonder witregel ertussen.

Dit komt uiteraard doordat bij de ene optie direct de twee betreffende tekstregels die daar bij horen, direct achter elkaar gezet worden, en andersom werkt het weer zo dat als een bepaalde tekst niet in het document wordt gebruikt, dat dit dan een witregel teveel oplevert.

Enig idee hoe je dit kan opvangen?
 
Hai, :D

Zoals ik al aangaf moet je de strings zelf even fine tunen! (ik heb een grove lijn gezet)

Wat staat hier:
Code:
RangeMyBookmark "bmDetails", sDRSTekstInvulInspectierapport & _
        vbCr & sDRSTekstInvulOvertuigd & vbCr & sDRSTekstInvulBinnenkort
Ipv naar meerdere bladwijzers te schrijven schrijf ik alles gewoon naar "bmDetails"

Ik stel dus uit de Constante (Tekstblokken) een string samen. De paragraafmarkering (Enter) is de "vbCr" (Of Chr(13)..of vbNewLine..etc..)

Dus boven staat de constante sDRSTekstInvulInspectierapport dan een paragraafmarkering dan sDRSTekstInvulOvertuigd dan weer een paragraafmarkering en dan sDRSTekstInvulBinnenkort

Dus waar de Enters komen bepaal jij zelf door te spelen met de vbCr en zorg dat je goed koppelt met de Ampersand (&) en zorg voor spaties op de juiste plekken en bij een regeleinde in de Editor gebruik je het LineContinue Character (Underscore "_") om strings aan elkaar te koppelen of een procedure op de volgende regel door te laten lopen..(en ja deze zin is veel te lang) ;)

Succes! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan