Routine for setting de permissions for all underlaying folders

G

Guest

Hello,
First excuse me if my English language is not perfect.

I have made in my Outlook a tree-structure like on my PC, that means there
are a lot of folders in my Outlook.

In a lot of these folders there is the permission set for e.g. Anonymous.

WHAT I WANT IS:
- Create an VB-script or Macro that:
a. sets the property Permission for <Name=> Default <to Level=> None
sets the property Permission for <Name=> John S <to Level=> Folder
Visible
b. Repeats sentence for all the folders which are created under the
current folder.

For example I give you a part of my folders in Outlook:
- INBOX
- INBOX Educ
- INBOX OI
- INBOX UNI
- ASSESSMENT
- BLOCK
- SKILLS
- PROGRESS

So, if the current folder is 'INBOX' I want that the script ends after
'INBOX UNI'

I hope someone can help me to create a macro or script.
Thank you in advance,
Guus
 
G

Guest

Unfortunately, it's not that easy. You cannot do this with Outlook VBA, you
need to use CDO 1.21. You also need ACL.dll, which is not usually present on
most computers. It is part of the Platform SDK and must be compiled and
distributed with your solution. However, you can download it via a link in
this blog:

MS Exchange Blog : Setting calendar permissions centrally...:
http://hellomate.typepad.com/exchange/2003/07/setting_calenda.html

If you'd like more awesome sample code on using the ACL component, there's
more here:

How To Use ACL Object and CDO (1.21) to List Folder Permissions for a MAPI
Folder:
http://support.microsoft.com/default.aspx?scid=kb;en-us;240911

Here's an example as well that you can mine to do what you need to do:

Private Sub AddUserToFolder()
On Error GoTo ErrorHandler

Const CdoDefaultFolderCalendar = 0
Const CdoDefaultFolderInbox = 1
Const CdoDefaultFolderOutbox = 2
Const CdoDefaultFolderSentItems = 3
Const CdoDefaultFolderDeletedItems = 4
Const CdoDefaultFolderContacts = 5
Const CdoDefaultFolderJournal = 6
Const CdoDefaultFolderNotes = 7
Const CdoDefaultFolderTasks = 8
Const CdoDefaultFolderTotal = 9


Const ROLE_OWNER = &H5E3
Const ROLE_PUBLISH_EDITOR = &H4E3
Const ROLE_EDITOR = &H463
Const ROLE_PUBLISH_AUTHOR = &H49B
Const ROLE_AUTHOR = &H41B
Const ROLE_NONEDITING_AUTHOR = &H413
Const ROLE_REVIEWER = &H401
Const ROLE_CONTRIBUTOR = &H402
Const ROLE_NONE = &H400


Dim strProfile As String
Dim oSession As Object 'MAPI.Session
Dim oAddrBook As Object 'MAPI.AddressList
Dim oDelegate As Object 'MAPI.AddressEntry
Dim oInbox As Object 'MAPI.Folder
Dim oMailbox As Object 'MAPI.InfoStore
Dim oACLObject As ACLObject
Dim oACEs As IACEs
Dim oNewAce As Object


'Change this to the display name of the user you want to give delegate
access.
Const UserA = "Joe Blow" 'must use full name to retrieve an AddressEntry
by name
'from the AddressEntries.Item collection
'--------------------------------------------------


'Change this to the display name of the user whose
'folder you want to give UserA access to.
Const UserB = "Jane Doe"


'Change server_name to the name of your Exchange server.
strProfile = "servername" & vbLf & UserB


' Create a new MAPI session and log on.
Set oSession = CreateObject("MAPI.Session")
oSession.Logon , , False, True, , True, strProfile


' Create a MAPI object for UserA
Set oAddrBook = oSession.AddressLists("Global Address List")


'This calls the Outlook Object Model guard
Set oDelegate = oAddrBook.AddressEntries.Item(UserA)
'If the user clicks no, this error will be generated:
'Error: "[Collaboration Data Objects - [E_ACCESSDENIED(80070005)]]"
'Number: -2147024891


' Get the permission list on UserB's inbox


MsgBox "Adding " & UserA & " to the Inbox permissions for " & UserB & "
with Reviewer settings."


Set oInbox = oSession.GetDefaultFolder(CdoDefaultFolderInbox)
Set oACLObject = CreateObject("MSExchange.ACLObject")
oACLObject.CDOItem = oInbox
Set oACEs = oACLObject.ACEs


' Add UserA to the permission list and save the result


Set oNewAce = CreateObject("MSExchange.ACE")


oNewAce.ID = oDelegate.ID
oNewAce.Rights = ROLE_REVIEWER
MsgBox oACEs.Count
oACEs.Add oNewAce
oACLObject.Update
MsgBox oACEs.Count
oSession.Logoff


' Indicate the process is finished.
MsgBox "Completed adding " & UserA & " to Inbox permissions for " &
UserB & "."


ErrorHandler:
MsgBox "Error " & Err.Number & vbCr & Err.Description, vbOKOnly
End Sub
 
D

Dmitry Streblechenko

<plug>You can also set permissions using Redemption through the
RDOFolder.ACL collection -
http://www.dimastr.com/redemption/rdo/RDOACL.htm</plug>

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Eric Legault said:
Unfortunately, it's not that easy. You cannot do this with Outlook VBA,
you
need to use CDO 1.21. You also need ACL.dll, which is not usually present
on
most computers. It is part of the Platform SDK and must be compiled and
distributed with your solution. However, you can download it via a link
in
this blog:

MS Exchange Blog : Setting calendar permissions centrally...:
http://hellomate.typepad.com/exchange/2003/07/setting_calenda.html

If you'd like more awesome sample code on using the ACL component, there's
more here:

How To Use ACL Object and CDO (1.21) to List Folder Permissions for a MAPI
Folder:
http://support.microsoft.com/default.aspx?scid=kb;en-us;240911

Here's an example as well that you can mine to do what you need to do:

Private Sub AddUserToFolder()
On Error GoTo ErrorHandler

Const CdoDefaultFolderCalendar = 0
Const CdoDefaultFolderInbox = 1
Const CdoDefaultFolderOutbox = 2
Const CdoDefaultFolderSentItems = 3
Const CdoDefaultFolderDeletedItems = 4
Const CdoDefaultFolderContacts = 5
Const CdoDefaultFolderJournal = 6
Const CdoDefaultFolderNotes = 7
Const CdoDefaultFolderTasks = 8
Const CdoDefaultFolderTotal = 9


Const ROLE_OWNER = &H5E3
Const ROLE_PUBLISH_EDITOR = &H4E3
Const ROLE_EDITOR = &H463
Const ROLE_PUBLISH_AUTHOR = &H49B
Const ROLE_AUTHOR = &H41B
Const ROLE_NONEDITING_AUTHOR = &H413
Const ROLE_REVIEWER = &H401
Const ROLE_CONTRIBUTOR = &H402
Const ROLE_NONE = &H400


Dim strProfile As String
Dim oSession As Object 'MAPI.Session
Dim oAddrBook As Object 'MAPI.AddressList
Dim oDelegate As Object 'MAPI.AddressEntry
Dim oInbox As Object 'MAPI.Folder
Dim oMailbox As Object 'MAPI.InfoStore
Dim oACLObject As ACLObject
Dim oACEs As IACEs
Dim oNewAce As Object


'Change this to the display name of the user you want to give delegate
access.
Const UserA = "Joe Blow" 'must use full name to retrieve an
AddressEntry
by name
'from the AddressEntries.Item collection
'--------------------------------------------------


'Change this to the display name of the user whose
'folder you want to give UserA access to.
Const UserB = "Jane Doe"


'Change server_name to the name of your Exchange server.
strProfile = "servername" & vbLf & UserB


' Create a new MAPI session and log on.
Set oSession = CreateObject("MAPI.Session")
oSession.Logon , , False, True, , True, strProfile


' Create a MAPI object for UserA
Set oAddrBook = oSession.AddressLists("Global Address List")


'This calls the Outlook Object Model guard
Set oDelegate = oAddrBook.AddressEntries.Item(UserA)
'If the user clicks no, this error will be generated:
'Error: "[Collaboration Data Objects - [E_ACCESSDENIED(80070005)]]"
'Number: -2147024891


' Get the permission list on UserB's inbox


MsgBox "Adding " & UserA & " to the Inbox permissions for " & UserB & "
with Reviewer settings."


Set oInbox = oSession.GetDefaultFolder(CdoDefaultFolderInbox)
Set oACLObject = CreateObject("MSExchange.ACLObject")
oACLObject.CDOItem = oInbox
Set oACEs = oACLObject.ACEs


' Add UserA to the permission list and save the result


Set oNewAce = CreateObject("MSExchange.ACE")


oNewAce.ID = oDelegate.ID
oNewAce.Rights = ROLE_REVIEWER
MsgBox oACEs.Count
oACEs.Add oNewAce
oACLObject.Update
MsgBox oACEs.Count
oSession.Logoff


' Indicate the process is finished.
MsgBox "Completed adding " & UserA & " to Inbox permissions for " &
UserB & "."


ErrorHandler:
MsgBox "Error " & Err.Number & vbCr & Err.Description, vbOKOnly
End Sub

--
Eric Legault (Outlook MVP, MCDBA, MCTS: Messaging & Collaboration)
Try Picture Attachments Wizard for Outlook:
http://www.collaborativeinnovations.ca
Blog: http://blogs.officezealot.com/legault/


Guus said:
Hello,
First excuse me if my English language is not perfect.

I have made in my Outlook a tree-structure like on my PC, that means
there
are a lot of folders in my Outlook.

In a lot of these folders there is the permission set for e.g. Anonymous.

WHAT I WANT IS:
- Create an VB-script or Macro that:
a. sets the property Permission for <Name=> Default <to Level=> None
sets the property Permission for <Name=> John S <to Level=> Folder
Visible
b. Repeats sentence for all the folders which are created under the
current folder.

For example I give you a part of my folders in Outlook:
- INBOX
- INBOX Educ
- INBOX OI
- INBOX UNI
- ASSESSMENT
- BLOCK
- SKILLS
- PROGRESS

So, if the current folder is 'INBOX' I want that the script ends after
'INBOX UNI'

I hope someone can help me to create a macro or script.
Thank you in advance,
Guus
 
G

Guest

<endorsement> I keep forgetting about all the magical stuff you put into that
thing!

--
Eric Legault (Outlook MVP, MCDBA, MCTS: Messaging & Collaboration)
Try Picture Attachments Wizard for Outlook:
http://www.collaborativeinnovations.ca
Blog: http://blogs.officezealot.com/legault/


Dmitry Streblechenko said:
<plug>You can also set permissions using Redemption through the
RDOFolder.ACL collection -
http://www.dimastr.com/redemption/rdo/RDOACL.htm</plug>

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Eric Legault said:
Unfortunately, it's not that easy. You cannot do this with Outlook VBA,
you
need to use CDO 1.21. You also need ACL.dll, which is not usually present
on
most computers. It is part of the Platform SDK and must be compiled and
distributed with your solution. However, you can download it via a link
in
this blog:

MS Exchange Blog : Setting calendar permissions centrally...:
http://hellomate.typepad.com/exchange/2003/07/setting_calenda.html

If you'd like more awesome sample code on using the ACL component, there's
more here:

How To Use ACL Object and CDO (1.21) to List Folder Permissions for a MAPI
Folder:
http://support.microsoft.com/default.aspx?scid=kb;en-us;240911

Here's an example as well that you can mine to do what you need to do:

Private Sub AddUserToFolder()
On Error GoTo ErrorHandler

Const CdoDefaultFolderCalendar = 0
Const CdoDefaultFolderInbox = 1
Const CdoDefaultFolderOutbox = 2
Const CdoDefaultFolderSentItems = 3
Const CdoDefaultFolderDeletedItems = 4
Const CdoDefaultFolderContacts = 5
Const CdoDefaultFolderJournal = 6
Const CdoDefaultFolderNotes = 7
Const CdoDefaultFolderTasks = 8
Const CdoDefaultFolderTotal = 9


Const ROLE_OWNER = &H5E3
Const ROLE_PUBLISH_EDITOR = &H4E3
Const ROLE_EDITOR = &H463
Const ROLE_PUBLISH_AUTHOR = &H49B
Const ROLE_AUTHOR = &H41B
Const ROLE_NONEDITING_AUTHOR = &H413
Const ROLE_REVIEWER = &H401
Const ROLE_CONTRIBUTOR = &H402
Const ROLE_NONE = &H400


Dim strProfile As String
Dim oSession As Object 'MAPI.Session
Dim oAddrBook As Object 'MAPI.AddressList
Dim oDelegate As Object 'MAPI.AddressEntry
Dim oInbox As Object 'MAPI.Folder
Dim oMailbox As Object 'MAPI.InfoStore
Dim oACLObject As ACLObject
Dim oACEs As IACEs
Dim oNewAce As Object


'Change this to the display name of the user you want to give delegate
access.
Const UserA = "Joe Blow" 'must use full name to retrieve an
AddressEntry
by name
'from the AddressEntries.Item collection
'--------------------------------------------------


'Change this to the display name of the user whose
'folder you want to give UserA access to.
Const UserB = "Jane Doe"


'Change server_name to the name of your Exchange server.
strProfile = "servername" & vbLf & UserB


' Create a new MAPI session and log on.
Set oSession = CreateObject("MAPI.Session")
oSession.Logon , , False, True, , True, strProfile


' Create a MAPI object for UserA
Set oAddrBook = oSession.AddressLists("Global Address List")


'This calls the Outlook Object Model guard
Set oDelegate = oAddrBook.AddressEntries.Item(UserA)
'If the user clicks no, this error will be generated:
'Error: "[Collaboration Data Objects - [E_ACCESSDENIED(80070005)]]"
'Number: -2147024891


' Get the permission list on UserB's inbox


MsgBox "Adding " & UserA & " to the Inbox permissions for " & UserB & "
with Reviewer settings."


Set oInbox = oSession.GetDefaultFolder(CdoDefaultFolderInbox)
Set oACLObject = CreateObject("MSExchange.ACLObject")
oACLObject.CDOItem = oInbox
Set oACEs = oACLObject.ACEs


' Add UserA to the permission list and save the result


Set oNewAce = CreateObject("MSExchange.ACE")


oNewAce.ID = oDelegate.ID
oNewAce.Rights = ROLE_REVIEWER
MsgBox oACEs.Count
oACEs.Add oNewAce
oACLObject.Update
MsgBox oACEs.Count
oSession.Logoff


' Indicate the process is finished.
MsgBox "Completed adding " & UserA & " to Inbox permissions for " &
UserB & "."


ErrorHandler:
MsgBox "Error " & Err.Number & vbCr & Err.Description, vbOKOnly
End Sub

--
Eric Legault (Outlook MVP, MCDBA, MCTS: Messaging & Collaboration)
Try Picture Attachments Wizard for Outlook:
http://www.collaborativeinnovations.ca
Blog: http://blogs.officezealot.com/legault/


Guus said:
Hello,
First excuse me if my English language is not perfect.

I have made in my Outlook a tree-structure like on my PC, that means
there
are a lot of folders in my Outlook.

In a lot of these folders there is the permission set for e.g. Anonymous.

WHAT I WANT IS:
- Create an VB-script or Macro that:
a. sets the property Permission for <Name=> Default <to Level=> None
sets the property Permission for <Name=> John S <to Level=> Folder
Visible
b. Repeats sentence for all the folders which are created under the
current folder.

For example I give you a part of my folders in Outlook:
- INBOX
- INBOX Educ
- INBOX OI
- INBOX UNI
- ASSESSMENT
- BLOCK
- SKILLS
- PROGRESS

So, if the current folder is 'INBOX' I want that the script ends after
'INBOX UNI'

I hope someone can help me to create a macro or script.
Thank you in advance,
Guus
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top