Keuze uit combobox in Word plaatsen (dmv Bladwijzer) hoe?

Status
Niet open voor verdere reacties.

Lutra

Gebruiker
Lid geworden
8 feb 2005
Berichten
31
Hallo,

Met behulp van VBA heb ik dialoogvenster met een combobox gemaakt in een Word sjabloon.
Als de gebruiker hier nu een item selecteert, wil ik deze graag in het actieve Word document gepresenteerd hebben.
Ik heb tot nu toe deze code, maar kom niet verder (rode deel). Kan iemand me verder op weg helpen?


Code:
[INDENT]Sub UserForm_Initialize()
'Doel: Laad het beginscherm (frmMain)
Load frmMain

'Doel: leeg maken van het vorige gekozen item
frmMain.cbxSrtScan.Clear

'Doel: Vult de lijst van mogelijke soorten scans
cbxSrtScan.List = Array("Event", "Full D", "scan drie", "scan vier")
End Sub


Private Sub cbOk_Click()
'Doel: Bij het klikken op OK wordt het scanformulier geladen met de gekozen documentnaam

Dim n As Integer
Dim h As String

' n krijgt de waarde van het nummer van het land, dat is geselecteerd
n = cbxSrtScan.ListIndex

If n >= 0 Then
    [COLOR="#FF0000"] 'aan h wordt het woord toegekend dat op de n-de plaats staat van de lijst
     h = SrtScan.List(n)

     'het land h wordt in het scandocument geplaatst
     txtSrtScan.Text = h
     ActiveDocument.Bookmarks("SrtScan").Range.InsertAfter txtSrtScan.Text[/COLOR]
     
 Else
      'als er niets was geselecteerd heeft n de waarde -1 en word volgende bericht getoond
      MsgBox ("Selecteer een te scannen document!")
End If

End Sub
[/INDENT]
Mijn dank is groot.
 
Laatst bewerkt door een moderator:
Je zou ondertussen (gezien de tijd dat je lid bent) kunnen weten dat Code moet worden opgemaakt met de CODE knop (knop #) om hem leesbaar te houden. Dus graag even aanpassen als je tijd hebt :). En wat ook helpt: zet je voorbeeldje erbij. We zijn hier om te helpen, niet om voorbeeldjes na te bouwen... Die tijd steek ik liever in het zoeken naar een antwoord op je vraag.
 
Je hebt natuurlijk helemaal gelijk.
Mijn excuses. Het uploaden van mijn voorbeeld lukt me echter niet omdat .dotm niet wordt geaccepteerd. Dus maar even een rar

Code:
Sub UserForm_Initialize()
'Doel: Laad het beginscherm (frmMain)
Load frmMain

'Doel: leeg maken van het vorige gekozen item
frmMain.cbxSrtScan.Clear

'Doel: Vult de lijst van mogelijke soorten scans
'Wijzigen: Voor aanvullen van/toevoegen aan de lijst: geef een komma dan een spatie en dan de tekst tussen dubbele aanhalingstekens [, "hier de tekst"]
cbxSrtScan.List = Array("Event", "FD", "drie", "vier")


End Sub


Private Sub cbOk_Click()

'Doel: Bij het klikken op OK wordt het scanformulier geladen met de gekozen documentnaam

Dim n As Integer
Dim h As String

' n krijgt de waarde van het nummer van de soort scan, dat is geselecteerd
n = cbxSrtScan.ListIndex
If n >= 0 Then
     'aan h wordt het woord toegekend dat op de n-de plaats staat van de lijst
     h = SrtScan.List(n)

     'het land h wordt in het scandocument geplaatst
     txtSrtScan.Text = h
     ActiveDocument.Bookmarks("SrtScan").Range.InsertAfter txtSrtScan.Text
     
 Else
      'als er niets was geselecteerd heeft n de waarde -1 en word volgende bericht getoond
      MsgBox ("Selecteer een te scannnen document!")
End If

End Sub]

Bekijk bijlage Test.rar
 
Laatst bewerkt:
En dat helpt :)
Je gebruikt een DOCVARIABLE, maar je probeert hem als Bladwijzer te plaatsen. Dat gaat natuurlijk niet, een DocVariable is een Variable, geen Bookmark.
Code:
Private Sub cbOk_Click()
Dim n As Integer
Dim fld As Field

    n = cbxSrtScan.ListIndex
    If n >= 0 Then
         ActiveDocument.Variables("SrtScan").Value = cbxSrtScan.List(n)
         For Each fld In ActiveDocument.Fields
            fld.Update
        Next fld
     Else
          MsgBox ("Selecteer een te scannnen document!")
    End If
    Unload Me
End Sub
 
Met een Veldcode werkt het nu perfect GEWELDIG!!!!

Misschien ben ik heel vervelend, maar kun je me ook laten zien wat ik eigenlijk oorspronkelijk wilde, met een bladwijzer?
 
Een Bladwijzer is (in beginsel) een plaatsaanduiding in een document. En die kun je gebruiken om tekst te plaatsen.
Code:
         ActiveDocument.Bookmarks("SrtScanBM").Range.Text = cbxSrtScan.List(n)
Die ingevoerde tekst heeft dan verder geen relatie met de bladwijzer, dus als je de bladwijzer wilt hergebruiken, moet je weten waar hij begint en ophoudt. Je moet de bladwijzer dan opnieuw definieëren. Bijvoorbeeld zo:
Code:
        Dim bmRange As Range
        ActiveDocument.Bookmarks("SrtScanBM").Range.InsertBefore = cbxSrtScan.List(n)
        ActiveDocument.Bookmarks("SrtScanBM").Range.InsertAfter = cbxSrtScan.List(n)
        Set bmRange = ActiveDocument.Bookmarks("SrtScan").Range
        bmRange.Text = cbxSrtScan.List(n)
        ActiveDocument.Bookmarks.Add Name:="SrtScan", Range:=bmRange
Je hoeft maar één Insert variant te gebruiken natuurlijk, maar ik geef ze allebei maar mee.
 
Ik geef uiteindelijk toch de voorkeur aan het gebruik van Velden.
Dank voor de hulp.

Ik heb er echter nu toch een foutje in zitten.
Als de melding verschijnt dat de gebruiker vergeten is een keuze te maken en men klikt op de OK knop dan verdwijnt de UserForm.
Hoe kan ik zorgen dat met het drukken op de OK knop terug gegaan wordt naar de Userform met combobox?

Code:
Sub UserForm_Initialize()
'Doel: Laad het beginscherm (frmMain)
Load frmMain

'Doel: leeg maken van het vorige gekozen item
frmMain.cbxSrtScan.Clear

'Doel: Vult de lijst van mogelijke soorten scans
'Wijzigen: Voor aanvullen van/toevoegen aan de lijst: geef een nieuwe regel met .AddItem "nieuw" waar [nieuw] staat voor de naam van de nieuwe scan. Let op deze moet exact gelijk zijn aan het studie type in Clinical Assistent.
 With cbxSrtScan
      .AddItem "Event"
      .AddItem "Full Disclosure"
      .AddItem "drie"
      .AddItem "vier"
     '.AddItem "nieuw"
   End With


End Sub

Private Sub cbOk_Click()

'Doel: Bij het klikken op OK wordt het scanformulier geladen met de gekozen documentnaam
Dim n As Integer
Dim fld As Field


' n krijgt de waarde van het nummer van de soort scan, dat is geselecteerd
    n = cbxSrtScan.ListIndex
    If n >= 0 Then
         ActiveDocument.Variables("SrtScan").Value = cbxSrtScan.List(n)
         For Each fld In ActiveDocument.Fields
            fld.Update
        Next fld
     Else
     'als er niets was geselecteerd heeft n de waarde -1 en word volgende bericht getoond
          MsgBox ("Selecteer een te scannen document!")
    End If
    Unload Me
End Sub
 
Niet echt een foutje, als wel een kleine aanpassing :)
Ik heb Unload Me toegevoegd omdat je, als je klaar bent, uiteraard verder wilt in het document. Je wilt de gebruiker niet ook nog eens opzadelen met een extra handeling als het sluiten van het formulier als dat niet nodig is. Deze aanpassing is al genoeg.
Code:
     Else
          'als er niets was geselecteerd heeft n de waarde -1 en word volgende bericht getoond
          MsgBox ("Selecteer een te scannen document!")
          Exit Sub
    End If
    Unload Me
En je hebt uiteraard groot gelijk dat je voor de DocVariables gaat; niet voor niks speciaal voor dit soort zaken ontwikkeld door Microsoft :)
 
Dank je wel voor de razend snelle hulp.
Het werkt nu helemaal naar behoren.

Fijne dag verder.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan