Selvom mange ledere i danske virksomheder udviser stor interessere for kunstig intelligens (AI), tøver de med at tage teknologien i brug.
19. november 2024
Slettet bruger
13. marts 2023 - 13:34#1
Ja, du kan bruge følgende kode til at søge efter kontaktpersoner i en specifik Outlook-mappe (f.eks. Indbakke):
vbnet:
Public Function OTLK_GetContact_(ByVal sFirstName As String, ByVal sLastName As String, Optional oFolder As Object) Dim olApp As Object Dim olNS As Object Dim olFolder As Object Dim olItems As Object Dim olContact As Object Dim sFilter As String
Set olApp = CreateObject("Outlook.Application") Set olNS = olApp.GetNamespace("MAPI")
'Sæt filter til søgning af kontaktpersoner med et bestemt for- og efternavn sFilter = "[FirstName]='" & sFirstName & "' AND [LastName]='" & sLastName & "'"
'Søg efter kontaktpersoner i den angivne mappe If Not oFolder Is Nothing Then Set olFolder = olNS.GetFolderFromID(oFolder.EntryID) Else 'Hvis ingen mappe er angivet, brug standardkontaktpersonmappen Set olFolder = olNS.GetDefaultFolder(10) '10 = OlDefaultFolders.olFolderContacts End If
Set olItems = olFolder.Items olItems.Sort "[FullName]"
'Søg efter kontaktpersoner, der opfylder filteret Set olContact = olItems.Find(sFilter)
Do While Not olContact Is Nothing Debug.Print olContact.FullName
'Søg efter den næste kontaktperson, der opfylder filteret Set olContact = olItems.FindNext Loop
Set olNS = Nothing Set olApp = Nothing End Function
Du kan kalde funktionen med følgende kode:
python:
OTLK_GetContact_ "John", "Doe"
Dette vil søge efter kontaktpersoner med fornavnet "John" og efternavnet "Doe" i standardkontaktpersonmappen.
Hvis du vil søge efter kontaktpersoner i en bestemt mappe, kan du angive mappen som et objekt i funktionen:
vbnet:
Dim olFolder As Object Set olFolder = Application.GetNamespace("MAPI").Folders("Din Outlook Mappe Navn").Folders("Din Kontakt Mappe Navn") OTLK_GetContact_ "John", "Doe", olFolder
Dette vil søge efter kontaktpersoner med fornavnet "John" og efternavnet "Doe" i den angivne mappe.
Jeg benytter eksakt samme funktion :-) men jeg kan ikke få din tilføjelse:
Dim olFolder As Object Set olFolder = Application.GetNamespace("MAPI").Folders("Indbakke").Folders("Kontaktpersoner") Call OTLK_GetContact("Kristian", "Jensen", olFolder)
til at virke
Hvor placerer du tilføjelsen
Synes godt om
Slettet bruger
13. marts 2023 - 14:28#3
Beklager forvirringen. Jeg bemærker, at jeg ved en fejl angav forkert funktion i min tidligere besked. Funktionen, jeg refererede til, hedder "OTLK_GetContact_", mens jeg tidligere skrev "OTLK_GetContact". Jeg beklager for forvirringen, dette kan have forårsaget.
Når det er sagt, er tilføjelsen korrekt placeret i koden, og jeg vil foreslå følgende ændringer i funktionen:
vbnet:
Public Function OTLK_GetContact_(ByVal sFirstName As String, ByVal sLastName As String, Optional oFolder As Object) Dim olApp As Object Dim olNS As Object Dim olFolder As Object Dim olItems As Object Dim olContact As Object Dim sFilter As String
vbnet:
Set olApp = CreateObject("Outlook.Application") Set olNS = olApp.GetNamespace("MAPI")
'Sæt filter til søgning af kontaktpersoner med et bestemt for- og efternavn sFilter = "[FirstName]='" & sFirstName & "' AND [LastName]='" & sLastName & "'"
'Søg efter kontaktpersoner i den angivne mappe If Not oFolder Is Nothing Then Set olFolder = olNS.GetFolderFromID(oFolder.EntryID) Else 'Hvis ingen mappe er angivet, brug standardkontaktpersonmappen Set olFolder = olNS.GetDefaultFolder(10) '10 = OlDefaultFolders.olFolderContacts End If
Set olItems = olFolder.Items olItems.Sort "[FullName]"
'Søg efter kontaktpersoner, der opfylder filteret Set olContact = olItems.Find(sFilter)
Do While Not olContact Is Nothing Debug.Print olContact.FullName
'Søg efter den næste kontaktperson, der opfylder filteret Set olContact = olItems.FindNext Loop
Set olNS = Nothing Set olApp = Nothing
End Function
For at søge i "Indbakke/Kontaktpersoner" skal du bruge følgende kode:
vbnet:
Dim olFolder As Object Set olFolder = Application.GetNamespace("MAPI").Folders("Indbakke").Folders("Kontaktpersoner") OTLK_GetContact_ "Kristian", "Jensen", olFolder
Du kan også justere koden til at bruge en variabel i stedet for en hardkodet mappe:
vbnet:
Dim olFolder As Object Dim sFolderPath As String sFolderPath = "Indbakke/Kontaktpersoner" 'Sti til mappen, hvor du vil søge kontaktpersoner Set olFolder = GetFolderFromPath(sFolderPath) OTLK_GetContact_ "Kristian", "Jensen", olFolder
Dette kræver, at du har følgende funktion i din kode, som kan konvertere stien til en Outlook-mappe:
vbnet:
Function GetFolderFromPath(ByVal FolderPath As String) As Object Dim oFolder As Object Dim FoldersArray As Variant Dim i As Integer
vbnet:
On Error GoTo GetFolder_Error If Left(FolderPath, 2) = "\\" Then FolderPath = Right(FolderPath, Len(FolderPath) - 2) End If
Dim olFolder As Object Set olFolder = Application.GetNamespace("MAPI").Folders("Indbakke").Folders("Kontaktpersoner") OTLK_GetContact_ "Kristian", "Jensen", olFolder
placeres inde i funktioner og i så fald hvor?
Står det udenfor er GetNamespace ikke defineret og OTLK_GetContact.... skal være Call OTLK_GetContact
Synes godt om
Slettet bruger
13. marts 2023 - 15:03#5
Det ser ud til, at der mangler en del af koden i dit spørgsmål. Kan du give mig mere information om, hvad du prøver at gøre, og hvad der er i din eksisterende funktion? Så vil jeg gøre mit bedste for at hjælpe dig.
De nedenfor viste koder kan vise kontaktpersoner fra outlook mappen Kontaktpersoner i en listeBox
Hvis oFolder oplyses (Men hvordan???) skulle man også kunne få kontaktpersoner fra andre Outlook mapper
Hermed koderne:
Public Function OTLK_GetContact_All(ByVal sFirstName As String, ByVal sLastName As String, Optional oFolder As Object) Dim oOutlook As Object Dim oNS As Object Dim oContacts As Object Dim oFilterContacts As Object ' Dim oFolder As Object Dim sFilter As String Dim bOutlookOpened As Boolean Const olFolderContacts = 10
'Get/Start Outlook On Error Resume Next Set oOutlook = GetObject(, "Outlook.Application") 'Bind to existing instance of Outlook If Err.Number <> 0 Then 'Could not get instance, so create a new one Err.Clear Set oOutlook = CreateObject("Outlook.Application") Else 'Was already running bOutlookOpened = True End If On Error GoTo Error_Handler
Set oNS = oOutlook.GetNamespace("MAPI")
If oFolder Is Nothing Then Set oContacts = oNS.GetDefaultFolder(olFolderContacts)
'Let's search the default contact folder 'Debug.Print "Processing Folder " & oContacts.Name 'Apply a filter to retrieve the specific contact(s) we seek.
If sFirstName <> "" And sLastName <> "" Then sFilter = "[FirstName]='" & sFirstName & "' and [LastName]='" & sLastName & "'" ElseIf sFirstName <> "" And sLastName = "" Then sFilter = "[FirstName]='" & sFirstName & "'" ElseIf sFirstName = "" And sLastName <> "" Then sFilter = "[LastName]='" & sLastName & "'" Else sFilter = "" End If
Set oFilterContacts = oContacts.Items.Restrict(sFilter) 'Debug.Print , oFilterContacts.Count & " appointments found." For Each oFilterContacts In oFilterContacts 'Iterate through each contact 'Do what you want with the retrieved contact(s)' information ' Debug.Print , oContacts.Name, oFilterContacts.FullName, oFilterContacts.CompanyName, oFilterContacts.Email1Address
'Recursively search through any contact folders created by the user For Each oFolder In oContacts.Folders ' Debug.Print "Processing Folder " & oFolder.Name
'Apply a filter to retrieve the specific contact(s) we seek. 'sFilter = "[FirstName]='" & sFirstName & "' and [LastName]='" & sLastName & "'"
If sFirstName <> "" And sLastName <> "" Then sFilter = "[FirstName]='" & sFirstName & "' and [LastName]='" & sLastName & "'" ElseIf sFirstName <> "" And sLastName = "" Then sFilter = "[FirstName]='" & sFirstName & "'" ElseIf sFirstName = "" And sLastName <> "" Then sFilter = "[LastName]='" & sLastName & "'" Else sFilter = "" End If
Set oFilterContacts = oFolder.Items.Restrict(sFilter) 'Debug.Print , oFilterContacts.Count & " appointments found." For Each oFilterContacts In oFilterContacts 'Iterate through each contact 'Do what you want with the retrieved contact(s)' information ' Debug.Print , oFolder.Name, oFilterContacts.FullName, oFilterContacts.CompanyName, oFilterContacts.Email1Address
Call OTLK_GetContact_All(sFirstName, sLastName, oFolder) Next oFolder
If bOutlookOpened = False Then 'Since we started Outlook, we should close it now that we're done oOutlook.Quit 'There seems to be a delay in this action taking place, but does eventually take place End If
Error_Handler_Exit: On Error Resume Next If Not oFolder Is Nothing Then Set oFolder = Nothing If Not oFilterContacts Is Nothing Then Set oFilterContacts = Nothing If Not oContacts Is Nothing Then Set oContacts = Nothing If Not oNS Is Nothing Then Set oNS = Nothing If Not oOutlook Is Nothing Then Set oOutlook = Nothing Exit Function
For at oplyse en anden Outlook-mappe end standard-kontaktmappen i funktionen OTLK_GetContact_All kan du angive mappen som en parameter. Hvis en mappe ikke er angivet, vil funktionen søge efter kontakter i standardkontaktmappen.
For at angive en anden mappe skal du sørge for, at mappen er åben i Outlook, og derefter angive mappen som en parameter, når du kalder funktionen. Mappen skal være en objektvariabel af typen Outlook-mappen (Outlook.Folder).
For eksempel, hvis du vil søge efter kontakter i en mappe kaldet "MyContacts", kan du bruge følgende kode:
Dim oMyContacts As Outlook.Folder Set oMyContacts = Session.GetDefaultFolder(olFolderContacts).Folders("MyContacts") OTLK_GetContact_All "John", "Doe", oMyContacts
I dette eksempel oprettes en variabel "oMyContacts" og angives som mappen "MyContacts" i standardkontaktmappen. Derefter kaldes funktionen OTLK_GetContact_All med de angivne parametre, inklusive mappen "oMyContacts".
Dim oMyContacts As Outlook.Folder Set oMyContacts = Session.GetDefaultFolder(olFolderContacts).Folders("Indbakke") OTLK_GetContact_All "Kristian", "Jensen", oMyContacts
Hvis indenfor: Public Function OTLK_GetContact_All(ByVal sFirstName As String, ByVal sLastName As String, Optional oFolder As Object) så hvor
Hvis udenfor så melder GetDefaultFolder fejl. Der skal også være call til OTLK_.....
Synes godt om
Slettet bruger
13. marts 2023 - 17:23#9
Hvis funktionen OTLK_GetContact_All er en del af en VBA-modul i Microsoft Outlook, så skal koden placeres inden for modulet. Du kan oprette et nyt VBA-modul ved at gå til "Visual Basic Editor" og derefter klikke på "Indsæt" og vælge "Modul". Hvis modulet allerede er oprettet, kan du indsætte koden i det relevante modul.
Hvis du ønsker at kalde funktionen fra et andet modul eller fra en anden applikation, så skal du sørge for at have en reference til Outlook-objektbiblioteket og derefter kalde funktionen med de korrekte parametre. Du kan tilføje en reference til Outlook-objektbiblioteket ved at gå til "VBA Editor" og derefter klikke på "Værktøjer" og vælge "Reference". Find derefter "Microsoft Outlook XX.X Object Library" og markér det, og klik på "OK".
For at kalde funktionen fra en anden procedure eller funktion, skal du skrive:
vbnet:
Dim oMyContacts As Outlook.Folder Set oMyContacts = Session.GetDefaultFolder(olFolderContacts).Folders("Indbakke") Call OTLK_GetContact_All("Kristian", "Jensen", oMyContacts)
Hvis du vil kalde funktionen fra et andet program eller en anden applikation, skal du først oprette en Outlook-objektvariabel og derefter kalde funktionen på følgende måde:
vbnet:
Dim oApp As Outlook.Application Dim oMyContacts As Outlook.Folder
Set oApp = New Outlook.Application Set oMyContacts = oApp.Session.GetDefaultFolder(olFolderContacts).Folders("Indbakke")
Her vil du forsøge at oprette et nyt Outlook-programobjekt og derefter få adgang til standardmappen Kontakter i Session-objektet ved hjælp af GetDefaultFolder-metoden og tilføje mappen "Indbakke" i denne mappe. Men der er en fejl i koden, fordi du forsøger at tilføje mappen "Indbakke" i Kontakter-mappen, som ikke er en undermappe til Kontakter-mappen.
Prøv at rette koden som følger:
vb:
Dim oApp As Outlook.Application Dim oMyContacts As Outlook.Folder
Set oApp = New Outlook.Application Set oMyContacts = oApp.Session.GetDefaultFolder(olFolderInbox).Folders("Kontakter")
Dette vil oprette et nyt Outlook-programobjekt, få adgang til standardmappen Indbakke i Session-objektet ved hjælp af GetDefaultFolder-metoden og derefter tilføje undermappen "Kontakter" i denne mappe. Det vil derefter kalde funktionen OTLK_GetContact_All med de angivne parametre.
Samme fejl: Dim oApp As Outlook.Application Dim oMyContacts As Outlook.Folder
Set oApp = New Outlook.Application Set oMyContacts = oApp.Session.GetDefaultFolder(olFolderInbox).Folders("Kontakter") <= Fejl Call OTLK_GetContact_All("Kristian", "Jensen", oMyContacts)
Tror at Fejlen er at GetDefaultFolder ikke er defineret Jeg forklarer lige:
Jeg har en form På formen ligger en Listeboks , et inputfeld til for og efternavn En buttom hvor der i klik eventen ligger kaldet vi slås med I formen ligger: Public Function OTLK_GetContact_All(ByVal sFirstName As String, ByVal sLastName As String, Optional oFolder As Object)
Synes godt om
Slettet bruger
13. marts 2023 - 18:36#13
Jeg forstår bedre nu. Problemet kan muligvis skyldes, at Outlook-funktionsbiblioteket ikke er indlæst i VBA-editoren. Prøv følgende:
1 Åbn VBA-editoren i Outlook ved at trykke på "Alt + F11". 2 I menulinjen, vælg "Værktøjer" -> "Referencer". 3 I vinduet "Reference" skal du finde og markere indstillingen for "Microsoft Outlook XX.X Object Library". Hvis det allerede er markeret, kan du prøve at fjerne markeringen, lukke vinduet og derefter markere den igen. 4 Klik på "OK" for at gemme dine ændringer og lukke vinduet.
Derefter kan du prøve at køre koden igen. Hvis det stadig ikke fungerer, kan du prøve at erstatte linjen "Set oMyContacts = oApp.Session.GetDefaultFolder(olFolderInbox).Folders("Kontakter")" med "Set oMyContacts = oApp.Session.GetDefaultFolder(olFolderContacts)" for at få adgang til standardkontaktmappen.
Ja jeg må vist erkende det ikke er nogen let opgave - nærmest umuligt så jeg vil sige mange tak for din tolmodighed.
Synes godt om
Ny brugerNybegynder
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.