Avatar billede folj Forsker
01. oktober 2012 - 13:46 Der er 12 kommentarer og
1 løsning

Funktion der tester om Outlook er åben, og returnerer enten False eller True

Jeg har problemer med at få en egen funktion til at spille. Funktionen skal kun teste om Outlook allerede kører, og vigtigt returnere False eller True til den Sub der laver funktionskaldet. Men i slutningen af funktionen bliver denne linie åbenbart altid afviklet
  ErOutLookÅben = False
og så vil funktionen jo altid returnere False

-----kode-----
Function ErOutLookÅben()
    ErOutLookÅben = True
    On Error Resume Next
    AppActivate ("Outlook")

OutlookIsNotRunning:
  ErOutLookÅben = False

End Function
-----/kode-----

Kode der kalder funktionen:
-----kode-----
If ErOutLookÅben = False Then ' gør opmærksom på at Outlook skal være åben for at udnytte denne funktion
  MsgBox "Outlook skal være åben for at udnytte denne funktion"
  Exit Sub
End If
-----/kode-----
Avatar billede supertekst Ekspert
01. oktober 2012 - 14:14 #1
Lidt inspiration:

Sub ErOutLookÅben()
    On Error GoTo OutlookIsNotRunning
    AppActivate ("Outlook")
    Exit Sub
   
OutlookIsNotRunning:
    Call Open_OutLook
End Sub

Sub Open_OutLook()
    Dim oOutlook As Object
    Dim oNameSpace As Object
    Dim oInbox As Object
   
    Set oOutlook = CreateObject("Outlook.Application")
    Set oNameSpace = oOutlook.GetNamespace("MAPI")
   
    Set oInbox = oNameSpace.GetDefaultFolder(olFolderInbox)
   
'    Set oInbox = oNameSpace.Folders(1)
    oInbox.Display
End Sub
Avatar billede folj Forsker
01. oktober 2012 - 16:14 #2
Tak. det skrev du også i mit tidligere spm. http://www.eksperten.dk/spm/959480. Jeg har allerede forsøgt at bruge det som inspiration.

Men mere konkret - er jeg forkert på den, når jeg mener at excel læser min funktion linie for linie, altså også linierne...

OutlookIsNotRunning:
  ErOutLookÅben = False

fordi der ikke er bygget nogen stopklods ind?

Men er det ikke muligt med en function at lave noget der returnerer hhv. false og true, så jeg kan bruge mit funktionskald?
Avatar billede supertekst Ekspert
01. oktober 2012 - 16:36 #3
Prøver med noget mere præcist..
Avatar billede RogerWilco Seniormester
01. oktober 2012 - 19:15 #4
Jeg ville nok lave funktionen lidt mere brugbar, så den også kan checke andre programmer:

Function IsPgmOpen(pgm)
  On Error Resume Next
  AppActivate pgm
  IsPgmOpen = Err.Number = 0
End Function

..og kald den med =IsPgmOpen("Inbox - Microsoft Outlook")
Avatar billede folj Forsker
01. oktober 2012 - 21:38 #5
Lyder interessant...
kan du forklare hvordan linien
  IsPgmOpen = Err.Number = 0
vil komme til at returnere False?
Jeg forstår ikke helt det med  = Err.Number = 0
Avatar billede store-morten Ekspert
01. oktober 2012 - 23:00 #6
Måske:

Sub TestOutlook()
On Error Resume Next
Set OutLookÅben = GetObject(, "Outlook.Application")

If OutLookÅben Is Nothing Then
MsgBox "Outlook er ikke åben"
Else
MsgBox "Outlook er åben"
End If
End Sub
Avatar billede supertekst Ekspert
01. oktober 2012 - 23:13 #7
Med funktion:

Public Sub test()
    If erOutlookÅben = False Then
        MsgBox "Outlook er ikke åben"
    Else
        MsgBox "Outlook er åben"
    End If
End Sub
Private Function erOutlookÅben()
On Error GoTo OutlookIsNotRunning
    Set OutLookÅben = GetObject(, "Outlook.Application")

    AppActivate ("Outlook")
    erOutlookÅben = True
    Exit Function
   
OutlookIsNotRunning:
    erOutlookÅben = False
End Function
Avatar billede store-morten Ekspert
01. oktober 2012 - 23:21 #8
Function ErOutLookÅben()
    On Error Resume Next
Set OutLookÅben = GetObject(, "Outlook.Application")
If OutLookÅben Is Nothing Then
ErOutLookÅben = False
Else
ErOutLookÅben = True
End If
End Function

Sub test()
If ErOutLookÅben = False Then ' gør opmærksom på at Outlook skal være åben for at udnytte denne funktion
  MsgBox "Outlook skal være åben for at udnytte denne funktion"
  Exit Sub
End If
End Sub
Avatar billede folj Forsker
02. oktober 2012 - 09:28 #9
Det må jeg sige ...
så er der hele to forslag at arbejde med - skønt.

Jeg har lige kørt en hurtig test af de 2 forslag (uden at lave tilretninger selv).

Forslaget fra supertekst returnerer False både når Outlook er åben og lukket.

Derimod virker forslaget fra store-morten efter hensigten - returnerer hhv False og True, og endda i de rigtige situationer...

Så points går hermed til store-morten (hvis du, Store-morten, lige laver et svar med svar-knappen)
Avatar billede store-morten Ekspert
02. oktober 2012 - 15:06 #10
Kommer her.
Avatar billede RogerWilco Seniormester
02. oktober 2012 - 18:41 #11
#5
En if-sætning undersøger, om et givent udtryk er sandt eller falsk, og kører så kommandoen efter then eller else.

Udtrykket "Err.Number = 0" i en if-sætning returnerer således en sand/falsk-værdi, og denne kan derfor også sættes direkte i en variabel.

Derfor er udtrykket:

  If Err.Number = 0 Then IsPgmOpen=True Else IsPgmOpen=False

det samme som:

  IsPgmOpen = Err.Number = 0
Avatar billede folj Forsker
03. oktober 2012 - 08:28 #12
God og lærerig forklaring på linien   IsPgmOpen = Err.Number = 0
Tak til RogerWilco

Tak for indsatsen til i øvrige deltagere :)
Avatar billede store-morten Ekspert
03. oktober 2012 - 19:57 #13
Velbekomme og 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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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