[WORD 2003] Aanhef geslachtsgevoelig

Pagina: 1
Acties:
  • 1.349 views sinds 30-01-2008
  • Reageer

  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
Ik probeer nu een macro te maken wat kijkt het volgende doet:

- Open contactpersonen lijst
- Gebruiker selecteert een contactpersoon
== Tot dusver geen problemen ==
- Aan de hand van de titel van de geselecteerde contactpersoon wordt er een nieuwe regel in het document op de plaats van de macro gezet
- Als titel: De heer, Drs. of Dhr. is moet er "Geachte heer <PR_SURNAME>" komen te staan, bij al het andere "Geachte mevrouw <PR_SURNAME>". Omdat bij ons adresboek het geslacht niet ingevuld wordt is deze niet gebruikbaar.

Ik heb zelf al gezocht naar IF constructie's maar heb hier nog geen hulp in kunnen vinden omdat deze niet gebruikt worden in combinatie met het outlook adressboek.

Iemand die mij in de goede richting kan sturen? Ik wil dus de aanhef van de brief aan laten passen aan de hand van de titel van een contactpersoon die de gebruiker zojuist heeft gekozen.

  • sanfranjake
  • Registratie: April 2003
  • Niet online

sanfranjake

Computers can do that?

(overleden)
Misschien is het een idee om van P&O een export van alle personeelsnamen en geslacht te vragen, zodat je daar een mooi ldifde/vba dingetje van kan bakken om je probleem recht te zetten?
Het is me namelijk niet geheel duidelijk of je nu over een netwerk praat, of over een probleem in een enkele pst-file.

Mijn spoorwegfotografie
Somda - Voor en door treinenspotters


Verwijderd

niet noodzakelijk vba benodigd. aan de hand van de titel een als dan opbouwen met velden.

  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
Verwijderd schreef op zaterdag 14 april 2007 @ 14:37:
niet noodzakelijk vba benodigd. aan de hand van de titel een als dan opbouwen met velden.
Dit had ik idd ook bedacht maar is tot nu toe moeilijker gebleken dan ik hoopte :P

(Ben nog steeds aan een stukje bezig wat het zou moeten uitvoeren)

  • sanfranjake
  • Registratie: April 2003
  • Niet online

sanfranjake

Computers can do that?

(overleden)
Als je nou eens post wat je al hebt, kunnen we je er misschien bij helpen :P

Mijn spoorwegfotografie
Somda - Voor en door treinenspotters


  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
sanfranjake schreef op maandag 23 april 2007 @ 08:52:
Als je nou eens post wat je al hebt, kunnen we je er misschien bij helpen :P
Zo, heel veel later post ik het eindelijk dan :P Heeft even geduurd omdat ik geruime tijd me niet bezig heb kunnen houden met het sjabloon hier.

Wat ik nu heb zou als volgt te werk moeten gaan, dat gaat hij echter niet.

- Pakt na het door de gebruiker gekozen contactpersoon uit adresboek z'n titel.
- Alle gebruikers hebben een titel, deze kan verschillen
- Nadat hij de titel heeft vergeleken met een aantal vaste voorgeschreven waarden via een geneste if then else constructie kijkt hij hoe de aanhef eruit moet zien.
- Echter doorloopt hij de if then else constructie altijd dusdanig dat hij geen juiste vergelijking kan vinden.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Public Sub Aanhefinvullen()

  Dim varAanhef As String
  varAanhef = "<PR_DISPLAY_NAME_PREFIX>"

  Dim varAanheftekst As String
  varAanheftekst = "Geachte heer/mevrouw,"
  
  If varAanhef = "De heer" Then
    varAanheftekst = "Geachte heer <PR_SURNAME>"
  Else
    If varAanhef = "Dr." Then
      varAanheftekst = "Geachte heer <PR_SURNAME>"
    Else
      If varAanhef = "Ing." Then
        varAanheftekst = "Geachte heer <PR_SURNAME>"
      Else
        If varAanhef = "Ir." Then
          varAanheftekst = "Geachte heer <PR_SURNAME>"
        Else
          If varAanhef = "Mr." Then
            varAanheftekst = "Geachte heer <PR_SURNAME>"
          Else
            If varAanhef = "Prof." Then
              varAanheftekst = "Geachte heer <PR_SURNAME>"
            Else
              varAanheftekst = "Onbekend geslacht"
            End If
          End If
        End If
      End If
    End If
  End If
  
  varAanhef = Application.GetAddress(, varAanhef)
  Selection.TypeText (varAanheftekst)

End Sub


De contactpersoon die ik kies is absoluut een man en heeft als titel "De heer". Echter komt hij altijd uit op: Onbekend geslacht.

Commentaar op hoe slecht deze code wel niet is of wat dan ook zal me een zorg zijn aangezien ik absoluut niet kan proggen en ook maar wat in elkaar gegooit heb met behulp van het internet. Commentaar MAG uiteraard wel ;)

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 12:47
Je weet dat je een break point in je code kan zetten? En dat je tijdens het uitvoeren van de macro, als je die onderbroken hebt, met je muis boven een variabele kan hangen om te zien wat de courante waarde is? En dat je met F8 regel voor regel laat uitvoeren?

En kijk eventueel eens naar de documentatie voor "select case", dat is wat je zoekt.

  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
Hoop tips, ga ze allemaal ff doorlopen en proberen.

  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
Het is duidelijk dat hij niet de variabele vult met de titel van de persoon uit het adresboek maar gewoon letterlijk met de string "<PR_DISPLAY_NAME_PREFIX>". Opzich ook logisch gezien de regel:

code:
1
2
  Dim varAanhef As String
  varAanhef = "<PR_DISPLAY_NAME_PREFIX>"


Ik wil dus eigenlijk weten hoe ik succesvol en goed de variabele kan vullen met informatie uit het adresboek. Ik heb dit al eerder gedaan maar waarom hij hem nu niet goed pakt snap ik niet helemaal. Ik krijg dus niet de goeie string in de variabele te staan.

  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
Iets waar ik altijd heel goed in ben geweest is onnodig veel code en stomme omwegen gebruiken. Afijn, ik heb het nu werkend maar je moet nu 2x in het adresboek de persoon selecteren en ik wil dat eigenlijk reduceren tot 1x.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Sub Aanhefinvullen()

  Dim varAanhef As String
  varAanhef = "<PR_DISPLAY_NAME_PREFIX>"

  varAanhef = Application.GetAddress(, varAanhef)

  Dim varAanheftekst As String
  varAanheftekst = "Geachte heer/mevrouw,"

  Select Case varAanhef
    Case "Dr.", "De heer", "Drs.", "Ing.", "Ir.", "Mr.", "Prof."
    varAanheftekst = "Geachte heer"
  End Select
  
  Dim varAchternaam As String
  varAchternaam = "<PR_SURNAME>"
  
  varAchternaam = Application.GetAddress(, varAchternaam)
  
  Selection.TypeText (varAanheftekst + " " + varAchternaam + ",")

End Sub


Probleem is dus dat ik niet 2 verschillende variabelen kan opslaan bij het oproepen van

varAanhef = Application.GetAddress(, varAanhef)

en daarom later nog een keer deze code moet aanroepen voor een andere variabele om deze te kunnen vullen met andere informatie uit het adresboek.

[ Voor 24% gewijzigd door sn0x0r op 25-05-2007 12:17 ]


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 16-07 15:17
Je probleem ontstaat inderdaad doordat je twee keer een aanroep GetAddress doet (die twee keer naar Outlook gaat, begrijp ik uit je eerdere berichten). Je kunt het beste een ContactItem aanmaken (nadat je een Outlook.Application hebt aangemaakt en daarvan de eigenschappen uitlezen.

Je kunt het beste zoeken op olContactItem.
De eerste hits lijken met erg bruikbaar, waaronder een link naar een Microsoft voorbeeld

Met de Object Browser in VBA kun je alle object methodes en properties ook bekijken (Bij Office zit ook bijna overal een Help functie bij, overigens).

Verder kun je in je code beter een Select Case statement gebruiken: Scheelt een hoop Else Statements en is leesbaarder:

Visual Basic:
1
2
3
4
5
6
varAanheftekst = "Geachte heer/mevrouw,"

Select Case varAanhef
     Case "Dr.", "De heer", enz....
          varAanheftekst = "Geachte heer"
End Select


Succes!

N.B. Je kunt ook je voorgaande posts wijzigen door de Edit knop te gebruiken (voor de toekomst)

[ Voor 4% gewijzigd door JJvG op 25-05-2007 11:53 ]


  • sn0x0r
  • Registratie: December 2003
  • Laatst online: 07:11
Yeah ik weet dat er een edit knopje is maar wist niet zeker of dat de leesbaarheid ten goede zou komen. Afijn ik ga je tips ff doorlezen en bekijken of ik er wat mee kan doen. Alvast bedankt.

[edit]
Mijn oplossing:

varAanhef = Application.GetAddress(, varAanhef, ,2)

Die ,2 zorgt ervoor dat hij het scherm niet laat zien en hij het laatst gekozen adres gebruikt. Tot dusver ben ik tevreden en beschouw ik dit als opgelost! :)

[ Voor 38% gewijzigd door sn0x0r op 25-05-2007 12:45 ]

Pagina: 1