
Det är lätt att importera data från Excel till ett Outlook-objekt, till exempel ett meddelande eller ett möte, eftersom funktionen är inbyggd och en guide leder dig genom hela processen. Om du vill åstadkomma samma sak inifrån Excel – till exempel visa och fylla i ett möte medan du arbetar i Excel – behöver du lite VBA-magi. I den här artikeln kommer jag att tillhandahålla koden för att i förväg fylla i ett mötesformulär för Outlook med hjälp av Excel-data, från inuti Excel.
SE: 83 Excel-tips varje användare bör behärska (TechRepublic)
Måste läsa Windows-täckning
Jag använder Microsoft 365 på ett Windows 10 64-bitarssystem. (Jag rekommenderar att du väntar med att uppgradera till Windows 11 tills alla kinks är lösta.) Att ladda ner .xlsm-, .xls- och .cls-filerna kommer att spara mycket arbete. Jag stötte inte på några problem med att köra proceduren i .xls-formatet, men koden skrevs specifikt för 365, så jag kan inte garantera att du inte kommer att stöta på något jag inte redogjorde för. Outlook-webbapplikationerna stöder inte VBA.
Den här artikeln förutsätter lite Excel-kunskap, men även om du är nybörjare bör du kunna slutföra instruktionerna för att lyckas. Den här artikeln är lång, men det är mest en förklaring, så du kommer inte att arbeta så hårt som du kanske tror, särskilt om du laddar ner demonstrationsfilerna.
VBA-händelsproceduren
Vi kommer att använda BeforeDoubleClick-händelseproceduren för att trigga koden Lista A för att visa Outlooks standardformulär för möten. Dessutom kommer koden att fylla i några fält. Då kan du fortsätta att lägga till information eller spara och stänga formuläret. Denna procedur fyller bara i ett fåtal av formulärets fält, men du kan enkelt ta emot andra fält, och jag ska visa dig hur du gör det när vi diskuterar koden.
Lista A
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
“Visa mötesformuläret i Outlook och fyll i standardfälten.
Alternativ Explicit
Dim ol As Outlook.Application
Dim olApptItem Som Outlook.AppointmentItem
Dim wb som arbetsbok
Dim ws As Arbetsblad
Dim r As Long
Dim c As Long
Set ol = New Outlook.Application
Ställ in olApptItem = ol.CreateItem(olAppointmentItem)
Ställ in wb = ThisWorkbook
‘Uppdatera för att arbeta med ett specifikt ark.
Ställ in ws = wb.Sheets(“Sheet1”)
r = Target.Row
c = Målkolumn
Vid fel GoTo errHandler:
‘Om dubbelklick inte finns i kolumn C i tabell1, avsluta sub.
Om c <> 3 Avsluta Sub ‘Column check.
Om r <= 2 Avsluta Sub 'Row check.
Om ws.ListObjects(“Table1”).DataBodyRange.Rows.Count > r + 2 Avsluta Sub ‘Lower rows check.
Med olApptItem
‘Start och slut inkluderar både datum och tid.
.Ämne = ws.Cells(r, c – 1).Värde
.start = ws.Cells(r, c).Value & ” ” & ws.Cells(r, c + 1).Value
.End = ws.Cells(r, c).Value & ” ” & ws.Cells(r, c + 2).Value
.Visa
Sluta med
Ställ in ol = Ingenting
Ange olApptItem = Ingenting
Ställ in wb = Ingenting
Ställ in ws = Ingenting
Avsluta Sub
errHandler:
MsgBox “Error” & Err.Number & ” ” & Err.Description
Avsluta Sub
Om du inte är så bekant med VBA, Lista A ser förmodligen lite skrämmande ut, men det mesta är att deklarera och definiera variabler. Koden som faktiskt fyller i och visar formuläret börjar vid With-blocket och är kort, enkel och kan enkelt modifieras för att passa dina behov.
Innan vi blir förankrade i koden, låt oss ange den och ange en referens till Outlook-objektbiblioteket.
Ange koden
Vi arbetar inifrån en Excel-arbetsbok, så det första vi behöver är en Excel-fil med lämpliga värden för att fylla ett Outlook-möte. Bild A har några rekord; det är enkelt med avsikt.
Bild A

Om du använder en bandversion, se till att spara arbetsboken som en makroaktiverad fil. Om du arbetar i menyversionen kan du hoppa över det här steget.
För att gå in i proceduren, tryck på Alt + F11 för att öppna Visual Basic Editor (VBE). I projektutforskaren till vänster väljer du arket som innehåller mötesdata, i vårt fall är det Blad1. Ange koden manuellt eller importera den nedladdningsbara .cls-filen. Dessutom finns proceduren i de nedladdningsbara .xlsm-, .xls- och .cls-filerna. Om du anger koden manuellt, klistra inte in från den här webbsidan. Kopiera istället koden till en textredigerare och klistra sedan in den koden i arkmodulen. Om du gör det tar du bort alla fantomwebbtecken som annars kan orsaka fel.
Innan du kan köra koden måste du referera till Outlook-objektbiblioteket eftersom vissa av deklarationerna refererar till Outlook-objekt. För att göra det, klicka på Verktyg-menyn och välj Referenser (Bild B). I den resulterande dialogrutan, tumma ner till Microsoft Outlook Object Library (min är 16, men du kanske kör en annan version; om det finns två, kolla det senaste biblioteket).
Bild B

För att köra koden, gå tillbaka till arket och dubbelklicka på något av de fyra datumvärdena i kolumn C—C3:C6. Om du gör det öppnas mötesformuläret för Outlook och fyller i ämnes-, start- och slutkontrollerna med motsvarande värden för det datum du dubbelklickade. Till exempel, Bild C visar formuläret efter att dubbelklicka på C3. Du kan ange mer data, stänga och spara mötet som det är, eller avbryta. För nu, gör det senare.
Bild C

Prova alla fyra datumcellerna, avbryt var och en istället för att spara något för tillfället. Har du märkt ett problem med C4? Det returnerar ett felmeddelande. Klicka på OK för att avfärda felet och ta en blick på data och se om du kan ta reda på varför innan jag förklarar.
Om du gissade att det är ett datumproblem har du rätt. Starttiden är 10.00. Värdet behöver minutkomponenten—10:00 AM. Åtgärda det och försök igen. Oj… det fungerar fortfarande inte, som du kan se i Bild D. Som det är, pågår evenemanget från 10.00 till 12.00, samma datum, vilket inte kan hända. Typfel i felmeddelandet är den bästa ledtråden. Ändra 12:00 till 12:00 och försök igen. Båda tidsvärdena är felaktiga, så du måste korrigera båda innan denna post kommer att fungera. Jag försöker inte komplicera saker, men jag vill att du ska se den enkla felhanteringen på jobbet.
Bild D

Nu när du har sett proceduren på jobbet, undrar du förmodligen hur det fungerar. Det är vad vi ska ta oss an härnäst.
VBA-proceduren förklaras
När du granskar proceduren kan du se att de första raderna deklarerar och definierar objekt och variabler. Den här delen är okomplicerad. Det första påståendet du kan behöva ändra när du tillämpar proceduren på ditt eget arbete är
Ställ in ws = wb.Sheets(“Sheet1”)
Jag har specificerat Sheet1 så den här proceduren fungerar inte på något annat blad. Du kan naturligtvis referera till ett annat ark eller till och med referera till ActiveWorksheet
Ställ in ws = wb.ActiveWorksheet
Jag rekommenderar att du gör denna ändring endast om du vill köra den här proceduren på andra ark, vilket är osannolikt. Om du använder det här uttalandet öppnar du upp en burk med maskar eftersom dubbelklicket fungerar i det aktiva arket, inte bara i ark 1.
På Error-satsen hanterar eventuella körtidsfel; du såg det på jobbet i Bild D. Den här uppgiften är enkel nog att du inte borde behöva mycket mer felhantering men se till att testa den noggrant innan du fattar det beslutet.
Nästa påstående kontrollerar den dubbelklickade cellen
‘Om dubbelklick inte finns i kolumn C i tabell1, avsluta sub.
Om c <> 3 Avsluta Sub ‘Column check.
Om r <= 2 Avsluta Sub 'Row check.
Om ws.ListObjects(“Table1”).DataBodyRange.Rows.Count > r + 2 Avsluta sedan Sub ‘Lower rows check.
Om den dubbelklickade cellen inte finns i kolumn C, stoppas proceduren. Om den dubbelklickade cellen finns i rad 1 eller rubrikraden, stoppas proceduren. Den sista kontrollen hanterar alla rader under den sista raden i tabellobjektet. När du tillämpar denna procedur på dina egna data måste du modifiera dessa tre satser för att passa ditt tabellobjekt. Till exempel, om dina datum finns i kolumn D, använd komponenten If c <> 4. Om din rubrikrad är på rad 1, använd komponenten If r = 1.
Det sista påståendet är lite mer komplicerat. Uppdatera först tabellens namn. Uppdatera sedan r + 2-komponenten med tanke på vilken rad rubriken står i. Egenskapen Rows.Count returnerar 4 eftersom det finns fyra rader med data (exklusive rubrikraden från räkningen). 2:an i r + 2-komponenten står för rad 1 och tabellens rubrikrad. I vårt exempel utvärderas det till 6, vår sista rad med data.
Det här är en plats där du kanske vill förbättra din procedur lite genom att lägga till en meddelanderuta som förklarar varför proceduren stoppas. Jag skulle tycka att meddelandet är lite irriterande, men om du distribuerar det här till andra kan de tycka att det är bra att veta varför proceduren inte fungerar, även om jag tycker att det är ganska uppenbart.
With-blocket gör det verkliga jobbet
Med olApptItem
‘Start och slut inkluderar både datum och tid.
.Ämne = ws.Cells(r, c – 1).Värde
.start = ws.Cells(r, c).Value & ” ” & ws.Cells(r, c + 1).Value
.End = ws.Cells(r, c).Value & ” ” & ws.Cells(r, c + 2).Value
.Visa
Sluta med
Med-blocket refererar till ett mötesformulär i Outlook (olAppItem). När du anger punkttecknet öppnar Excel en lista med egenskaper och händelser, som visas i Bild E. Du lägger till ytterligare formulärinformation på detta sätt. Jag inkluderade bara några få för att göra det enkelt.
Bild E

De fyllande satserna använder relativ adressering för att hitta rätt värde. Till exempel är ämnestexten i samma rad (r) som den dubbelklickade cellen. I definitionskoden ställer jag in de två långa variablerna r och c till Targets rad och kolumn
r = Target.Row
c = Målkolumn
Target är den skickade parametern som identifierar celladressen. Om du dubbelklickar på värdet i rad 3 är r lika med 3. Om du dubbelklickar på ett värde i kolumn C är c också 3. Genom att subtrahera 1 från c refererar koden till cellen till vänster av den dubbelklickade cellen. I det här fallet är det kolumnen Uppgift (kolumn B). Eftersom vi har ställt in r och c i förväg, behöver du bara ändra de faktiska värdena för att identifiera den relativa positionen för de fyllande uppgifterna.
Start- och slutinställningarna är lite mer komplexa eftersom de passar datum och tid. Det är därför dessa två påståenden sammanfogar värdena från två celler. Närmare bestämt är Start startdatumet och starttiden. På samma sätt är Slut slutdatumet och sluttiden. Lägg märke till att början och slutet datum använd samma referens eftersom händelsen inte sträcker sig längre än en dag. När du refererar till tiden måste du uppdatera värdena (1 och 2) för att identifiera cellerna som innehåller dessa värden.
Händelsen Display visar formuläret som är förifyllt med lämpliga värden från tabellen.
De sista påståendena förstör objekten och lämna suben. Följande felhanterare visar ett felmeddelande (Bild C) endast när den anropas. Du kanske vill lägga till mer specifika felmeddelanden, men den här enkla koden kan vara tillräcklig.
Till en början verkar proceduren lite skrämmande, men som jag har visat är det enklare än du kanske inser med bara en blick. Det mesta är att deklarera och definiera objekt och variabler. Demonstrationsfilerna bör fungera bra för dig, med undantag för eventuella oredovisade fel i .xls-formatet. När du tillämpar proceduren på ditt eget arbete måste du uppdatera några påståenden, men jag har identifierat dessa platser åt dig.