2017-08-23 7 views
1

Je travaille sur ce problème depuis quelques heures maintenant. J'ai un code VBA, et au début j'essayais de le convertir en VBScript et je n'arrive pas à le faire. Mon code VBA crée une réunion dans Outlook dans un calendrier spécifique (nommé Test). Ce code fonctionne parfaitement. Maintenant, j'ai besoin du code pour exécuter quand un bouton de commande est cliqué dans un formulaire Outlook. Les modules VBA ne peuvent pas être affectés à des boutons dans Outlook Forms. Donc ce que je voudrais faire est d'avoir un VBScript et d'appeler ce module. J'ai enregistré le module dans un chemin de fichier (G: \ 3500 EDMFO \ Script). Le fichier est enregistré en tant que Module3_Working.bas et je ne suis pas sûr que l'extension de fichier devrait être quelque chose de différent. J'ai essayé de nombreuses méthodes d'autres forums sans succès. S'il vous plaît conseiller sur la façon dont je peux obtenir cette macro pour travailler dans un VBScript. Je vous remercie.Comment puis-je exécuter un module Outlook VBA dans un VBscript?

Sub AddContactsFolder() 


If CommandButton1 = False Then 

Dim myNameSpace As Outlook.NameSpace 
Dim myFolder As Outlook.Folder 
Dim myNewFolder As Outlook.AppointmentItem 
Set myNameSpace = Application.GetNamespace("MAPI") 
Set myFolder =myNameSpace.GetDefaultFolder(olFolderCalendar).Folders("Test") 
MsgBox myFolder 
Set myNewFolder = myFolder.Items.Add(olAppointmentItem) 
'Set myNewFolder = myFolder.Items.Add("Test") 
With myNewFolder 
.Subject = "Time Off" 
.Start = "8/23/2017" 
.AllDayEvent = True 
.ReminderMinutesBeforeStart = "20" 
.Save 
End With 

End If 

End Sub 

Répondre

1

La conversion de ce VBA pour VBS ne devrait pas être difficile avec un exemple. Jetez un oeil à http://www.techsupportforum.com/forums/f128/solved-script-to-delete-outlook-calendar-entries-542865.html Contrairement à l'URL suggère un exemple de comment ajouter des rendez-vous (vacances dans ce cas) à un calendrier Outlook en utilisant VBScript simple. Je publie le code ici au cas où il disparaîtrait.

Vous devez enregistrer votre code avec l'extension .vbs (par exemple, add_calendar_item.vbs) et déclarer les constantes de perspective à l'avance. Déclarer des variables avec un type "as" n'est pas possible dans vbscript. Exécutez le fichier .vbs dans une console CMD en utilisant cscript.exe add_calendar_item.vbs

Pour faciliter la suppression des parties dictionary et seachAppts et d'utiliser un seul rendez-vous comme dans votre exemple VBA.

Essayez avec ce code

Const olFolderCalendar = 9 
Const olAppointmentItem = 1 
Const olOutOfOffice = 3 

Set objOutlook = CreateObject("Outlook.Application") 
Set objNamespace = objOutlook.GetNamespace("MAPI") 
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar) 
Set objApptItems = objCalendar.Items 

objApptItems.IncludeRecurrences = True 
objApptItems.Sort "[Start]" 

Set objHoliday = objOutlook.CreateItem(olAppointmentItem) 
objHoliday.Subject = "Boxing Day" 
objHoliday.Start = "December 26, 2017" & " 9:00 AM" 
objHoliday.End = "December 26, 2017" & " 10:00 AM" 
objHoliday.AllDayEvent = True 
objHoliday.ReminderSet = False 
objHoliday.BusyStatus = olOutOfOffice 
objHoliday.Save 

Pour référence ici le code d'origine

Const olFolderCalendar = 9 
Const olAppointmentItem = 1 
Const olOutOfOffice = 3 

Set objOutlook = CreateObject("Outlook.Application") 
Set objNamespace = objOutlook.GetNamespace("MAPI") 
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar) 
Set objApptItems = objCalendar.Items 

objApptItems.IncludeRecurrences = True 
objApptItems.Sort "[Start]" 

'' List Appointments to add 
Set objDictionary = CreateObject("Scripting.Dictionary") 
objDictionary.Add "November 24, 2010", "Thanksgiving"  
objDictionary.Add "November 25, 2010", "Thanksgiving"  
objDictionary.Add "December 25, 2010", "Christmas Day" 
objDictionary.Add "December 26, 2010", "Boxing Day" 
objDictionary.Add "November 24, 2011", "Thanksgiving"  
objDictionary.Add "November 25, 2011", "Thanksgiving"  
objDictionary.Add "December 25, 2011", "Christmas Day" 
objDictionary.Add "December 26, 2011", "Boxing Day" 

colKeys = objDictionary.Keys 

For Each strKey in colKeys 
    dtmHolidayDate = strKey 
    strHolidayName = objDictionary.Item(strKey) 
    '' Check if it already is on the Calendar 
    Return = SearchAppts(strHolidayName, FormatDateTime(dtmHolidayDate, vbShortDate)) 
    If Return = False Then 
    Set objHoliday = objOutlook.CreateItem(olAppointmentItem) 
    objHoliday.Subject = strHolidayName 
    objHoliday.Start = dtmHolidayDate & " 9:00 AM" 
    objHoliday.End = dtmHolidayDate & " 10:00 AM" 
    objHoliday.AllDayEvent = True 
    objHoliday.ReminderSet = False 
    objHoliday.BusyStatus = olOutOfOffice 
    objHoliday.Save 
    End If 
Next 

'' Search Function 
Function SearchAppts(ByVal strName, strDate) 
    SearchAppts = False 
    Set objAppointment = objApptItems.GetFirst 
    While TypeName(objAppointment) <> "Nothing" 
    If TypeName(objAppointment) = "AppointmentItem" then 
     If StrComp(objAppointment, strName,1) = 0 Then 
     If DateDiff("D", objAppointment.Start, strDate) = 0 Then 
      SearchAppts = True 
      Exit Function 
     End If 
     End If 
    End If 
    Set objAppointment = objApptItems.GetNext 
    Wend 
End Function 
+0

Hey Peter, merci pour l'affichage toutes ces informations. J'aurais dû le mentionner dans mon post original mais j'ai été capable de créer un code VBScript qui ajouterait une réunion au calendrier par défaut. La partie que je n'ai pas pu obtenir était de modifier ce code et l'obtenir pour ajouter des réunions à un calendrier spécifique. Je vais cependant remplacer le code que j'ai réussi à mettre en place avec celui que vous avez posté. Celui-ci est beaucoup plus propre! Des conseils pour l'envoyer à un autre calendrier? – Rami

+0

oui, devrait être quelque chose comme 'Set objCalendar = objNamespace.GetDefaultFolder (olFolderCalendar) .Parent.Folders ("otherCalendar")' où otherCalendar serait le nom de cet autre dossier du calendrier – peter

+0

Hmm Je lui ai donné un coup de feu et a reçu ce qui suit erreur: "L'opération tentée a échoué. Un objet n'a pas pu être trouvé." J'ai également essayé 'Set objCalendar = objNamespace.GetDefaultFolder (olFolderCalendar) .Folders ("Test")' Ce code a couru mais il a encore ajouté la réunion au calendrier par défaut. – Rami