Avatar billede folj Forsker
04. april 2016 - 12:06 Der er 1 løsning

excel-VBA, skal oprette en Task i min Outlook på en given dato.

Hej venner på eksperten.dk !

Jeg arbejder med en produktionsplan, hvor jeg gerne vil løbe kolonnen med slutdatoer igennem, og på de datoer hvor jeg har en produktion der slutter vil jeg gerne have excel til at oprette en Task i min Outlook, så jeg får taget nogle aktione de dage hvor en produktion slutter.


Den del af opgaven hvor jeg løber mine slutdatoer igennem er kodet og testet.

Det er oprettelsen af Outlook-Task jag mangler hjælp til.

Her er min nuværende kode:

Sub CreateOutlookTasks()

' erklærer variabler
Dim EndDateArray As Range
Dim LastRow As Integer
LastRow = Range("SlutRowIA").Row ' henter rækkenummer for den række jeg har navngivet til "SlutRowIA")
' Første række henter jeg fra en constant (FIRSTNOTHEADERROW) der indeholder værdien

'Herunder vil jeg så generere en tekststreng til select af de aktuelle celler
RangeString = "J" & FIRSTNOTHEADERROW & ":J" & LastRow ' genererer strengen der skal vælge de alle de slutdatoer der findes i min plan

Set EndDateArray = Range(RangeString) ' kaster slutdatoer ind i mit array (som i virkeligheden er et range)

For i = 1 To EndDateArray.Cells.Count ' vi løber vores SlutDateArray igennem med en For-løkke

If IsDate(EndDateArray.Cells(i, 1)) Then ' hvis der findes en slutdato i cellen
  If EndDateArray.Cells(i, 1) > Date Then ' hvis slutdato er ud i fremtiden
    If EndDateArray.Cells(i, 1) < Date + 14 Then ' hvis der er mindre end 7 dage til vi når slutdato

      MsgBox "Dato er ud i fremtiden og der er under 7 dage til."
      DateString = Format(EndDateArray.Cells(i, 1), "YY/dd/mm")
     
      ' her vil jeg så indsætte en kode der opretter en Task i min Outlook så jeg får udført nogle aktioner
      ' opret en Task i Outlook
      Set myOlApp = CreateObject("Outlook.Application")
      Set myItem = myOlApp.CreateItem(olTaskItem)
      myItem.Subject = "Kontroller slutprøve fra produktion"
      myItem.DueDate = EndDateArray.Cells(i, 1)
      myItem.Save

      Set myItem = Nothing
      Set myOlApp = Nothing

    End If
  End If
End If
Next i

End Sub


Umiddelbart så er det linien myItem.DueDate der fejler og den siger "Objegct dosen't support this property"
Hvis det har interesse, så er min første kode-forsøg inspireret af bl.a. http://www.excelforum.com/excel-programming-vba-macros/361993-sending-outlook-tasks-using-vba-almost-there-need-help.html

Er der en ekspert der kan hjælpe mig i mål med Task-oprettelsen.
Task skal altså ikke sendes til nogen - kun oprettes og gemmes i min Outlook.
Avatar billede folj Forsker
12. april 2016 - 12:31 #1
Ingen der kan hjælpe...
Så må man jo selv se hvad der findes af hjælp endre steder.

Jeg fandt en løsning kraftigt inspireret en det jeg fandt på mrexcelguru.com:

På siden http://mrexcelguru.com/create-tasks-in-outlook-from-excel/ er der et link til en fil der kan hentes ned, og den hjalp mig med en løsning der virker.

Jeg poster lige koden her også:
den er delt i flere procedurer og en function der kalder hinanden


Dim bWeStartedOutlook As Boolean

Sub Transfer()

Dim BatchNrCol As Integer
Dim BatchEndDateCol As Integer ' variabel til hvilken kolonne har jeg batchenes slutdatoer
Dim TaskCreatedCol As Integer ' variabel til hvilken kolonne vi jeg markere at OutlookTask er genereret
Dim TaskSubjectStr As String
Dim BatchStr As String
Dim DueDate As Date

BatchNrCol = 1
BatchEndDateCol = Cells(1, SLUTDATOER_ML).Column + 2
TaskCreatedCol = BatchEndDateCol + 15
 
RowNr = FindActualBatch("I") ' jeg kalder en function der finder rækken med den igangværende batch.
BatchStr = Cells(RowNr, BatchNrCol)
DueDate = Cells(RowNr, BatchEndDateCol).Value

' tjekker om der allerede er oprettet task
If Not Cells(RowNr, TaskCreatedCol).Value = "OutlookTask Created" Then

' hvis ikke så opretter vi en task
TaskSubjectStr = "Kontroller slutprøver fra IA-batch " & BatchStr & ", og bestil rengøringshold til næste gang"
Cells(RowNr, TaskCreatedCol).Value = "OutlookTask Created"

Call AddTask(TaskSubjectStr, DueDate)
End If

End Sub

Sub AddTask(sString As String, dDueDate As Date)
Dim olApp As Object
Dim objTask As Object

'Start Outlook if not started
On Error Resume Next ' deaktverer fejlmedd.
  Set olApp = GetOutlookApp ' funktionskald der tjekker om outlook er åben - ellers åbner vi outlook
On Error GoTo 0

If Not olApp Is Nothing Then
  Set objTask = olApp.CreateItem(3) ' generer en ny Task
 
  With objTask ' sætter nogle egenskaber i task'en
    .StartDate = dDueDate ' startdato - bruger samme som slutdato
    .DueDate = dDueDate
    .Subject = sString
    .Save ' springer diaplay over og går direkte til gem
  End With

End If

If bWeStartedOutlook Then
  olApp.Quit
End If
Set olApp = Nothing
Set objTask = Nothing

End Sub

Function GetOutlookApp() As Object
' function tjekker om Outlook er åben ellers åbner vi Outlook

On Error Resume Next
  Set GetOutlookApp = GetObject(, "Outlook.Application")
  If Err.Number <> 0 Then
    Set GetOutlookApp = CreateObject("Outlook.Application")
    bWeStartedOutlook = True
  End If
On Error GoTo 0

End Function
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

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



IT-JOB

Staten og Kommunernes Indkøbsservice A/S (SKI)

IT-udvikler

WSP Danmark A/S

MicroStation konsulent

Cognizant Technology Solutions Denmark ApS

Test Manager

ORTEC Nordic A/S

Implementation Consultant