Avatar billede lsskaarup Nybegynder
18. maj 2006 - 10:41 Der er 11 kommentarer og
1 løsning

VBA-problemer i Word (4 delspørgsmål)

Da der er 4 delspørgsmål i dette, blvier pointene fordelt jævnt mellem spørgsmålene. Det kan også være der kommer flere spørgsmål til, så stiger pointene selvfølgelig.

Jeg har en makro i en word-skabelon. Denne starter automatisk og kommer med en userform, hvor brugerne kan skrive et brev i. Dette indebærer automatisk hentning af afsender/bruger fra Active Directory og manuel indtastning af modtager og selve brevet.

Selve koden kommer efterfølgende problemerne.

1) Jeg har sat nogle msgboxes op, så brugeren får fortalt, hvis de glemme at udfylde et af felterne, men hvis de anden gang igen glemmer at udfylde et felt, og ikke nødvendigvis det samme, så fejler makroen, men følgende kode:

Run-time Error '5941':

Det pågældende medlem af samlingen findes ikke.

Man skal kunne glemme at udfylde felter uendeligt, altså skal der ingen fejl forekomme.

2) Åbner brugeren endnu et dokument efter det første er skrevet, så er felterne pre-udfyldt med det tidligere brevs indtastninger. Felterne skal selvfølgelig være tomme, så jeg skal have renset felterne på en eller anden måde.

3) Hvordan kan jeg få fat i og ændre kode bagved, det røde kryds, som man kan lukke programmerne med?

Mit problem er at trykker brugeren på knappen, er det kun userformen som lukkes og ikke også word-dokumentet, det skal det også uden at gemme.

4) Stavekontrol. Jeg vil gerne give mulighed for at brugeren kan vælge hvilket sprog stavkontrollen skal bruge. Hvordan gør jeg det. Jeg har skjult felterne til valg af sprog, men de er der.
Avatar billede lsskaarup Nybegynder
18. maj 2006 - 10:43 #1
Og så koden:


Public rs
Public afsName, afsTlf, afsMail, afsTitle, afsMobile, afsDistName As String


Sub find_bruger()
' Create the connection and command object.
Set oConnection1 = CreateObject("ADODB.Connection")
Set oCommand1 = CreateObject("ADODB.Command")
' Open the connection.
oConnection1.Provider = "ADsDSOObject"  ' This is the ADSI OLE-DB provider name
oConnection1.Open "Active Directory Provider"
' Create a command object for this connection.
Set oCommand1.ActiveConnection = oConnection1

' Compose a search string.
oCommand1.CommandText = "select sAMAccountName, distinguishedName, name, telephoneNumber, mail, title, l, mobile " & _
"from 'LDAP://mailserveren'" & _
"WHERE objectCategory='Person'" & _
"AND objectClass='user'" & _
"AND department=100" & _
"OR department=210" & _
"OR department=220" & _
"OR department=230" & _
"OR department=300" & _
"OR department=310" & _
"OR department=400" & _
"OR department=410" & _
"OR department=700"

' Execute the query.
Set rs = oCommand1.Execute


' Hvilken bruger skal markeres
Dim wshNetwork
Set wshNetwork = CreateObject("WScript.Network")
user = wshNetwork.UserName
'Domain = wshNetwork.userdomain
'computer = wshNetwork.ComputerName



'--------------------------------------
' Navigate the record set
' select the user
'--------------------------------------



While Not rs.EOF
    startBoks.cbAfsender.AddItem rs.Fields("name")
   
    If LCase(user) = LCase(rs.Fields("sAMAccountName")) Then
        For i = 0 To cbAfsender.ListCount - 1
          If cbAfsender.List(i) = rs.Fields("name") Then
                cbAfsender.ListIndex = i
                Exit For
            End If
        Next
    End If
   
  '  Debug.Print rs.Fields("sAMAccountName")
  ' Debug.Print rs.Fields("name") & ", " & rs.Fields("telephoneNumber") & ", " & rs.Fields("mail") & ", " & rs.Fields("title") & ", " & rs.Fields("facsimileTelephoneNumber") & ", " & rs.Fields("mobile") & ", ---- " & rs.Fields("distinguishedName")
    rs.MoveNext
Wend


End Sub

Private Sub cbAfsender_Change()
rs.MoveFirst
Dim found As Boolean

found = False

While (Not found) And (Not rs.EOF)
  If LCase(cbAfsender.Value) = LCase(rs.Fields("name")) Then
    found = True

    Me.afsName = rs.Fields("name")
    Me.afsTlf = rs.Fields("telephoneNumber")
    Me.afsMail = rs.Fields("mail")
    Me.afsTitle = rs.Fields("title")
    Me.afsMobile = rs.Fields("mobile")
    Me.afsDistName = rs.Fields("distinguishedName")
   
   
    Dim strAfsender As String
   
    If Not IsNull(Me.afsName) Then
   
        strAfsender = Me.afsName
   
    End If
   
    If Not IsNull(Me.afsTitle) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsTitle
   
    End If
   
    If Not IsNull(Me.afsMail) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsMail
   
    End If
   
    If Not IsNull(Me.afsTlf) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsTlf
   
    End If
   
    If Not IsNull(Me.afsMobile) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsMobile
   
    End If
   
   
    Me.tbAfsenderdata = strAfsender
                     
  End If
 
  rs.MoveNext
Wend

End Sub


Private Sub cdAnnuller_Click()
startBoks.Hide
Application.Quit Savechanges:=False
End Sub

Private Sub opret_Click()

    'afsender
    Dim strAfsender As String
   
    If Not IsNull(Me.afsName) Then
   
        strAfsender = Me.afsName
   
    End If
   
    If Not IsNull(Me.afsTitle) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsTitle
   
    End If
   
    If Not IsNull(Me.afsMail) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsMail
   
    End If
   
    If Not IsNull(Me.afsTlf) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsTlf
   
    End If
   
    If Not IsNull(Me.afsMobile) Then
   
        strAfsender = strAfsender & vbCrLf & Me.afsMobile
   
    End If
   
    ActiveDocument.FormFields("afsender").Range.Text = strAfsender
    'ActiveDocument.FormFields("afsender").Range.Text = Replace(strAfsender, vbCrLf & vbCrLf, "")

    If startBoks.tbFirma.Value = "" Then
        MsgBox "Du har ikke udfyldt firmanavnet"
    ElseIf startBoks.tbAdresse.Value = "" Then
        MsgBox "Du har ikke udfyldt firmaadressen"
    ElseIf startBoks.tbBy.Value = "" Then
        MsgBox "Du har ikke udfyldt postnr. og/eller by"
    ElseIf startBoks.tbModtager.Value = "" Then
        MsgBox "Du har ikke udfyldt modtageren af brevet"
    ElseIf startBoks.tbOverskrift.Value = "" Then
        MsgBox "Du har ikke givet brevet en overskrift"
    ElseIf startBoks.tbModtager.Value = "" Then
        MsgBox "Du har ikke skrevet selve brevet"
    Else
   
        'modtagerfimra
        Dim strModtager As String
        strModtager = startBoks.tbFirma.Value & vbCrLf & startBoks.tbAdresse.Value & vbCrLf _
        & startBoks.tbBy.Value
   
        ActiveDocument.FormFields("modtager").Range.Text = strModtager
   
        'modtagerperosn
        ActiveDocument.FormFields("person").Range.Text = "Att.: " & startBoks.tbModtager.Value

        'overskrift
        ActiveDocument.FormFields("overskrift").Range.Text = startBoks.tbOverskrift.Value

        'overskrift
        ActiveDocument.FormFields("brev").Range.Text = startBoks.tbBrev.Value

        startBoks.Hide
   
    End If
End Sub
Avatar billede lsskaarup Nybegynder
18. maj 2006 - 11:46 #2
Endnu et spørgsmål.

5) Jeg har opdaget at min ene textbox ikke laver linieskift hvis bruger trykker enter, men derimod hopper til næste felt, ligesom tabulator. Hvordan får jeg feltet til det.?
Avatar billede thomaxz Nybegynder
18. maj 2006 - 12:02 #3
5. har du huske at sat multiline til true?
Avatar billede lsskaarup Nybegynder
18. maj 2006 - 12:23 #4
5) ja
Avatar billede lsskaarup Nybegynder
18. maj 2006 - 13:49 #5
1) Fandt selv ud af fejlen her. Det skyldtes simpelthen at jeg ikek havde fået flyttet afsenderinformationerne ind i den sidste del af if...else sætningen. Hvilket betød at afsender blev sat ind hver gang, også selvom modtagerfelterne ikke var udfyldte. Hvilket igen betød at "makro"feltet afsender i dokumentet "forsvandt" efter første indsætning.
Avatar billede lsskaarup Nybegynder
18. maj 2006 - 14:18 #6
2) Har jeg også selv løst nu, inden jeg gør noget som helst, så sætter jeg bare felter = ""
Avatar billede lsskaarup Nybegynder
18. maj 2006 - 14:35 #7
5) Nå jeg fandt ud af at jeg kunne bruge en RichTextBox i stedet for, den opfører sig sådan som jeg gerne vil have det.

Så er der kun spørgsmål 3 og 4 tilbage.
Avatar billede lsskaarup Nybegynder
19. maj 2006 - 13:13 #8
Øh, jeg kan nu se at den der richtextbox åbenbart ikke virker i Office 2003, skal man gøre noget specielt for at få den til at virke?
Avatar billede lsskaarup Nybegynder
24. maj 2006 - 08:25 #9
RichTexBox har jeg droppet igen, fik TextBox til at virke.

3) Fik en løsning i dette spørgsmål http://www.eksperten.dk/spm/710421

Så der er kun delspørgsmålet om stavekontrollen tilbage
Avatar billede lsskaarup Nybegynder
21. juni 2006 - 08:13 #10
Ingen som kan hjælpe med stavekontrollen?
Avatar billede lsskaarup Nybegynder
28. juni 2006 - 10:36 #11
Nå, men jeg løste selv de 4 delspørgsmål, og det sidste har jeg ikke kunnet få hjælp til
Avatar billede lsskaarup Nybegynder
05. juli 2006 - 10:25 #12
Stavekontrollen har jeg nu selv fået løst.

http://www.eksperten.dk/spm/718939
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