Avatar billede f-andersen Nybegynder
23. november 2005 - 15:58 Der er 9 kommentarer og
2 løsninger

If sætning

Hej

Jeg har lavet dette script til at trække nogle oplysninger ud fra mit Active Directory til brugeroplysningerne i word.
Nu er problemet at hvis en bruger ikke har et mobil nummer indtastet i Active directory, så melder den jo fejl.

Hvordan kan jeg lave en if sætning under, objItem.Get("mobile") & Chr(13) & _ Så hvis der ikke er noget defineret så laver den en Chr(13)?

Skriv endelig hvis jeg skal skrive flere oplysninger.

Hele scriptet.
Set objSysInfo = CreateObject("ADSystemInfo")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Set objItem = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")
objWord.UserName = objItem.Get("displayName")
objWord.UserInitials = objItem.Get("initials")
objWord.UserAddress = objItem.Get("telephoneNumber") & Chr(13) & _
    objItem.Get("mobile") & Chr(13) & _
    objItem.Get("facsimileTelephoneNumber") & Chr(13) & _
    objItem.Get("mail")
objWord.Quit
Avatar billede softspot Forsker
23. november 2005 - 16:04 #1
Det letteste at gennemskue (efterfølgende) ville vel være at splitte den sammensætning af strengen og i flere statements, f.eks.:

strUserAddr = objItem.Get("telephoneNumber") & Chr(13)
if len(objItem.Get("mobile")) > 0 then
    strUserAddr = strUserAddr & objItem.Get("mobile") & Chr(13)
end if
strUserAddr = strUserAddr & objItem.Get("facsimileTelephoneNumber") & Chr(13)
strUserAddr = strUserAddr & objItem.Get("mail")
objWord.UserAddress = strUserAddr
Avatar billede f-andersen Nybegynder
23. november 2005 - 16:06 #2
Hvordan kommer hele mit script til at se ud? Jeg får nemlig en fejl.
Avatar billede softspot Forsker
23. november 2005 - 16:10 #3
Hvilken type er mobile? numerisk...?

Du kan evt. gøre således (hvis det er fordi mobile er Null):

strUserAddr = objItem.Get("telephoneNumber") & Chr(13)
if len(objItem.Get("mobile")&"") > 0 then
    strUserAddr = strUserAddr & objItem.Get("mobile") & Chr(13)
end if
strUserAddr = strUserAddr & objItem.Get("facsimileTelephoneNumber") & Chr(13)
strUserAddr = strUserAddr & objItem.Get("mail")
objWord.UserAddress = strUserAddr
Avatar billede f-andersen Nybegynder
23. november 2005 - 16:12 #4
De er nummeriske... Det er mobiltelefon nummer.

Set objSysInfo = CreateObject("ADSystemInfo")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Set objItem = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")
objWord.UserName = objItem.Get("displayName")
objWord.UserInitials = objItem.Get("initials")
strUserAddr = objItem.Get("telephoneNumber") & Chr(13)
if len(objItem.Get("mobile")&"") > 0 then
    strUserAddr = strUserAddr & objItem.Get("mobile") & Chr(13)
end if
strUserAddr = strUserAddr & objItem.Get("facsimileTelephoneNumber") & Chr(13)
strUserAddr = strUserAddr & objItem.Get("mail")
objWord.UserAddress = strUserAddr
objWord.Quit

Så får jeg fejl.

Hvis feltet mobile ikke er defineret skal den indsætte en Chr(13)
Avatar billede softspot Forsker
23. november 2005 - 16:19 #5
Man kan også godt bruge strenge til at holde telefonnumre, så det er ikke en selvfølge at det er numerisk (hvis det er det du antyder ;-))

Anyway! Findes der evt. en metode på objItem der kan afgøre om en nøgle findes, f.eks.

objItem.Exists("mobile")

som du kan benytte i stedet for den jeg foreslog. Hvis objItem er et Dictionary-objekt mener jeg der findes sådan en metode...

Alternativt (men langt fra ligeså pæn som hvis der findes en metode til formålet):

Set objSysInfo = CreateObject("ADSystemInfo")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Set objItem = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")
objWord.UserName = objItem.Get("displayName")
objWord.UserInitials = objItem.Get("initials")
strUserAddr = objItem.Get("telephoneNumber") & Chr(13)
on error resume next
strUserAddr = strUserAddr & objItem.Get("mobile") & Chr(13)
on error goto 0
strUserAddr = strUserAddr & objItem.Get("facsimileTelephoneNumber") & Chr(13)
strUserAddr = strUserAddr & objItem.Get("mail")
objWord.UserAddress = strUserAddr
objWord.Quit
Avatar billede f-andersen Nybegynder
24. november 2005 - 08:42 #6
Det virker. Men. Den indsætter ikke en character return.

Grundet. Alt det den skriver der, kommer ind i en word template.

Hvor der står:
Direkte: telephoneNumber¨
Mobil: mobile
Fax: facsimileTelephoneNumber
Mail: mail

Hvis der ikke bliver indsat en character return, så kommer fax nummeret til at stå under mobil. og det skal det ikke, hvis der ikke er et mobil nummer skal der ikke stå noget. Så derfor bliver den nød til at indsætte en character return.
Avatar billede f-andersen Nybegynder
24. november 2005 - 13:05 #7
Er der ikke en virkelig god side der beskriver VBS ? Evt. med lidt eksempler...
Avatar billede softspot Forsker
24. november 2005 - 15:08 #8
Ang. det med linieskift, så brug vbCrLf i stedet for chr(13), men forstår i øvrigt ikke helt din problemstilling, jeg troede netop det var meningen at der skulle være linieskift mellem hver værdi og at hvis mobilnr ikke fandtes, så skulle det slet ikke figurere i listen (altså linien skulle ikke være i listen overhovedet)... men jeg er lidt i tvivl om hvad du mener. Er det sådan:

Direkte: telephoneNumber
Mobil: mobile
Fax: facsimileTelephoneNumber
Mail: mail

og hvis der íkke er et mobilnr, sådan:

Direkte: telephoneNumber
Fax: facsimileTelephoneNumber
Mail: mail

eller hvad?

Ang. det med den virkelig gode side om VBScript... så kender jeg ikke en konkret side (jeg plejer at benytte Microsoft's referencemanual på msdn.microsoft.com: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vtoriVBScript.asp), men du kan måske tage udgangspunkt i dette link: http://www.planet-source-code.com/URLSEO/entrancegeneric/ShowWorldSeOnly!asp/lngWId!4/anyname.htm
Avatar billede f-andersen Nybegynder
24. november 2005 - 15:10 #9
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objItem = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")

'********************
' Navn
'********************
objWord.UserName = objItem.Get("displayName")

'********************
' Telefon
'********************
On Error Resume Next
    strUserPhone = objItem.Get("telephoneNumber") & Chr(13)
        If Err.Number <> 0 Then
            strReturn = "" & Chr(13)
'            wscript.echo "objItem.Get telephoneNumber"
'            Msgbox "Error : " & Err.Description & " from " & Err.Source
        End if
Err.Clear

'********************
' Initialer
'********************
On Error Resume Next
    objWord.UserInitials = objItem.Get("initials")
        If Err.Number <> 0 Then
            strReturn = "" & Chr(13)
'            wscript.exho "objItem.Get initials"
'            Msgbox "Error : " & Err.Description & " from " & Err.Source
        End if
Err.Clear

'********************
' Mobil
'********************
On Error Resume Next
      strUserMobile = strUserAddr & objItem.Get("mobile") & Chr(13)
        If Err.Number <> 0 Then
            strReturn = "" & Chr(13)
'            wscript.echo "objItem.Get mail"
'                Msgbox "Error : " & Err.Description & " from " & Err.Source
        End if
Err.Clear

'********************
' Fax
'********************
On Error Resume Next
    strUserFax = strUserFax & objItem.Get("facsimileTelephoneNumber") & Chr(13)
        If Err.Number <> 0 Then
            strReturn = "" & Chr(13)
'            wscript.echo "objItem.Get facsimileTelephoneNumber"
'                Msgbox "Error : " & Err.Description & " from " & Err.Source
        End if
Err.Clear

'********************
' Mail
'********************
strUserMail = strUserMail & objItem.Get("mail")

'********************
' Indsætter variablerne i word
'********************
objWord.UserAddress = strUserPhone & strReturn & strUserMobile & strReturn & strUserFax & strReturn & strUserMail
objWord.Quit


Her er mit færdige script, og det virker.

Smider du et svar, for du skal da lige have lidt points for at hjælpe.
Avatar billede softspot Forsker
24. november 2005 - 15:20 #10
WOW! Det ser omstændigt ud, men hey! hvis det fungerer... :)

Anyway! Du behøver ikke kalde on error resume next mere end en gang - den bliver kun ophævet af on error goto 0 (og ikke err.clear som det kunne se ud til at du havde opfattet - dermed ikke sagt at du skal lade være med at kalde err.clear, for det skal du naturligtvis :)).
Avatar billede softspot Forsker
24. november 2005 - 15:34 #11
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester