Avatar billede toh Nybegynder
02. juni 2004 - 20:07 Der er 13 kommentarer og
1 løsning

Hvad er galt med dette program

Når jeg køre programmet kommer den med følgende fejl hvorfor

"Compile error" Else without if

Min program linie ser ud på følgende måde:

Private Sub cmdOK_Click()
        If Option1.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
        .Visible = True
        .Documents.Add ("D:\flc_Menu\flc-standard.dot"), False
        .Activate
        ElseIf Option2.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
        .Visible = True
        .Documents.Add ("D:\flc_Menu\FLC-Faxskrivelse.dot"), False
        .Activate
        Unload HovedMenu
        ElseIf Option3.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
        .Visible = True
        .Documents.Add ("D:\flc_Menu\FLC-Flgskrivelse.dot"), False
        .Activate
        Unload HovedMenu
        ElseIf Option4.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
        .Visible = True
        .Documents.Add ("D:\flc_Menu\FLC-Nord RekvireringAfSager.dot"), False
        .Activate
        Unload HovedMenu
        End With
End Sub
Avatar billede thesurfer Nybegynder
02. juni 2004 - 20:11 #1
Du mangler en "end if":

        Unload HovedMenu
        End With
        End If
End Sub
Avatar billede thesurfer Nybegynder
02. juni 2004 - 20:12 #2
..tror jeg.. :-)

Men er det ikke nemmere at bruge Select Case..?
Avatar billede thesurfer Nybegynder
02. juni 2004 - 20:13 #3
næh.. det er det vist ikke, da det er ikke samme objekt, der har forskellige værdier, men forskellige objekter der har samme værdi.. :-)
02. juni 2004 - 20:16 #4
Et godt råd, toh:

Lav indrykninger ved It-then, loops m.m.:
Derved opdager man, at du også mangler 3 End With:

Private Sub cmdOK_Click()
    If Option1.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
            .Visible = True
            .Documents.Add ("D:\flc_Menu\flc-standard.dot"), False
            .Activate
        End With
    ElseIf Option2.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
            .Visible = True
            .Documents.Add ("D:\flc_Menu\FLC-Faxskrivelse.dot"), False
            .Activate
            Unload HovedMenu
        End With
    ElseIf Option3.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
            .Visible = True
            .Documents.Add ("D:\flc_Menu\FLC-Flgskrivelse.dot"), False
            .Activate
            Unload HovedMenu
        End With
    ElseIf Option4.Value = True Then
        Set ObjW = CreateObject("word.application")
        With ObjW
            .Visible = True
            .Documents.Add ("D:\flc_Menu\FLC-Nord RekvireringAfSager.dot"), False
            .Activate
            Unload HovedMenu
        End With
    End if
End Sub
Avatar billede thesurfer Nybegynder
02. juni 2004 - 20:18 #5
hm... man kunne vel også vende den om, og sige at der er for mange "with"..

Dette burde også virke:

        Set ObjW = CreateObject("word.application")
        With ObjW

        if ... then...
        elseif..

        end with
02. juni 2004 - 20:22 #6
ja, du har ret! Og du har også ret i at en Select Case vil være kønnere:
Private Sub cmdOK_Click()
    Set ObjW = CreateObject("word.application")
    With ObjW
        Select Case True
            case Option1.Value
                .Visible = True
                .Documents.Add ("D:\flc_Menu\flc-standard.dot"), False
                .Activate
            case Option2.Value
                .Visible = True
                .Documents.Add ("D:\flc_Menu\FLC-Faxskrivelse.dot"), False
                .Activate
                Unload HovedMenu
            case Option3.Value
                .Visible = True
                .Documents.Add ("D:\flc_Menu\FLC-Flgskrivelse.dot"), False
                .Activate
                Unload HovedMenu
            case Option4.Value
                .Visible = True
                .Documents.Add ("D:\flc_Menu\FLC-Nord RekvireringAfSager.dot"), False
                .Activate
                Unload HovedMenu
        End Select
    End With
End Sub
Avatar billede thesurfer Nybegynder
02. juni 2004 - 20:25 #7
Ahh.. den omvendte.. :-)

        Select Case True
            case Option1.Value
02. juni 2004 - 20:26 #8
Nu går der sport i, at korte koden ned:

Private Sub cmdOK_Click()
    Set ObjW = CreateObject("word.application")
    With ObjW
        .Visible = True
        Select Case True
            case Option1.Value
                .Documents.Add ("D:\flc_Menu\flc-standard.dot"), False
            case Option2.Value
                .Documents.Add ("D:\flc_Menu\FLC-Faxskrivelse.dot"), False
            case Option3.Value
                .Documents.Add ("D:\flc_Menu\FLC-Flgskrivelse.dot"), False
          case Option4.Value
                .Documents.Add ("D:\flc_Menu\FLC-Nord RekvireringAfSager.dot"), False
        End Select
        .Activate
        Unload HovedMenu
    End With
End Sub
02. juni 2004 - 20:29 #9
thesurfer->ja, den 'omvendte' er ret genial i mange henseender :o)
Avatar billede thesurfer Nybegynder
02. juni 2004 - 20:37 #10
..og hvis filerne bruges en del, kan strengene med fordel erstattes af variabler:

option explicit ' dette er helt oppe i vb programmet
dim flc_std, flc_fax, flc_flg, flc_nrdrek ' også denne her


' selve sub'en eller *form_load*:
flc_std = "D:\flc_Menu\flc-standard.dot"
flc_fax = "D:\flc_Menu\FLC-Faxskrivelse.dot"
flc_flg = "D:\flc_Menu\FLC-Flgskrivelse.dot"
flc_nrdrek = "D:\flc_Menu\FLC-Nord RekvireringAfSager.dot"

        Select Case True
            case Option1.Value
                .Documents.Add (flc_std), False
            case Option2.Value
                .Documents.Add (flc_fax), False
            case Option3.Value
                .Documents.Add (flc_flg), False
          case Option4.Value
                .Documents.Add (flc_nrdrek), False
        End Select

De her kan så bruges senere, når man vil ha' fat i filerne: flc_std, flc_fax, flc_flg, flc_nrdrek

mange ting kan forkortes.. :-)
02. juni 2004 - 20:39 #11
Måske kan vi få koden kortet ned til ét ord....og dog ;o)
Avatar billede terry Ekspert
02. juni 2004 - 20:54 #12
how about taking a look at this question toh, I see your using some of the code here :o)
http://www.eksperten.dk/spm/504838
Avatar billede toh Nybegynder
02. juni 2004 - 21:27 #13
Du har ret Terry jeg glemte at gentage "End With" som du hjalp mig med i går
Avatar billede terry Ekspert
02. juni 2004 - 21:32 #14
You need to close the previous question too :o)
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