我有一个宏,可以创建和保存多个word和excel文档。最近,我的组织开始使用微软的Azure保护。它总是要求用户在保存文档时选择分类标签。有什么办法可以从VBA传递标签吗?(即通过代码控制分类)
我试图搜索现有的问题,但没有运气。
发布于 2021-04-28 13:42:20
我至少找到了Excel的解决方案。对于Outlook,我使用类似于HaPi的方法。
首先设置一个标签,然后使用下面的代码检查所选标签的对象详细信息(例如,在Locals
窗口中):
Set current_label = ThisWorkbook.SensitivityLabel.GetLabel()
然后在新工作簿中的创建label_info
对象并填充current_label
对象的详细信息:
Set label_info = ActiveWorkbook.SensitivityLabel.CreateLabelInfo
With label_info
.ActionId = "" 'fill
.AssignmentMethod = MsoAssignmentMethod.PRIVILEGED 'fill
.ContentBits = 0 'fill
.IsEnabled = True
.Justification = "" 'fill
.LabelId = "" 'fill
.LabelName = "" 'fill
.SetDate = Now()
.SiteId = "" 'fill
End With
在的末尾使用当前工作簿上的SetLabel()
:
ActiveWorkbook.SensitivityLabel.SetLabel label_info, CreateObject("scripting.dictionary")
注:
Context
参数在SetLabel()
函数中做什么,所以我刚刚在那里创建了空对象测试用例:
Sub set_label()
' Select label first
Set current_label = ThisWorkbook.SensitivityLabel.GetLabel()
msgbox "Check current_label details and fill below parameters"
debug.assert False
Workbooks.Add
Set label_info = ActiveWorkbook.SensitivityLabel.CreateLabelInfo
With label_info
.ActionId = "" 'fill
.AssignmentMethod = MsoAssignmentMethod.PRIVILEGED 'fill
.ContentBits = 0 'fill
.IsEnabled = True
.Justification = "" 'fill
.LabelId = "" 'fill
.LabelName = "" 'fill
.SetDate = Now()
.SiteId = "" 'fill
End With
ActiveWorkbook.SensitivityLabel.SetLabel label_info, CreateObject("scripting.dictionary")
ActiveWorkbook.SaveAs Environ("USERPROFILE") & "\Desktop\wb with label.xlsx"
Workbooks("wb with label.xlsx").Close True
End Sub
其他资源:
发布于 2019-01-23 13:07:01
似乎在一年多之后,仍然没有解决办法。至少我没有为AIP找到任何本地VBA集成。
然而,我为自己找到了一个解决办法。基本上,我现在手动创建一个邮件草稿,在那里我手动选择分类。此草案保留在outlook中的一个特殊文件夹中。一旦我需要通过VBA发送邮件,我复制草稿(分类包括!),我改变收件人,对象,身体和我能够发送它没有用户的互动从VBA,因为分类已经完成。
Private Sub Email()
Dim oMailItem As Outlook.MailItem
'Set oMailItem = Outlook.Application.CreateItem(olMailItem)
'Choose template according to subject
'I have one template for each sensitivity classification
Set oMailItem = getVbaTemplateMail("VBA Template - Sensitivity=General")
With oMailItem
.To = "mail@a.b"
.subject = "Email Test using VBA"
.Body = "Test"
.Display
.Send
End With
Set oMailItem = Nothing
End Sub
Private Function getVbaTemplateMail(subject As String) As Outlook.MailItem
Dim olFolder As Outlook.MAPIFolder
Dim olItem As Outlook.MailItem
'GetDefaultFolder(16) = Draft folder, "Drafts/VBA Templates" is my VBA Template folder
Set olFolder = Application.GetNamespace("MAPI").GetDefaultFolder(16).Folders("VBA Templates")
For Each olItem In olFolder.Items
Debug.Print olItem.subject ' Print to immediate window
If olItem.subject = subject Then
Set getVbaTemplateMail = olItem.Copy
'If error "Active Inline Response" appears, the mail is open in Outlook, close it first!
Exit Function
End If
Next
End Function
发布于 2018-02-27 07:40:55
Azure信息保护
答案是,而不是。见下文引文。
考虑到这是一个付费的安全功能,我个人不会认为这是可能的。
临时解决方案:
作为一种临时解决方案,取决于您的需要,您是否考虑过让您的管理员设置一个默认设置分类?
除了手动选择标签外,还可以以下列方式应用标签: 管理员配置了默认标签,您可以保留或更改该标签.
微软的反馈表明.
可以使用支持标签编程应用程序的新SDK来解决。但是,此SDK尚未公开预览。如果您在Yammer站点:https://www.yammer.com/AskIPTeam上询问它,您可能可以尝试它的私有预览。
那里..。
是此SDK的用户语音条目,当...which成为公开可用的...if时,您可以投票支持它,您也会收到通知:https://msip.uservoice.com/forums/600097-azure-information-protection/suggestions/19602292-update-the-sdk-api-for-aip-to-include-classificati%C2%A0
我看到的SDK文档似乎与C#有关,但这只是我的观察。请参阅开发人员链接。
注:
我快速搜索了他们的反馈站点,关于Azure信息保护(AIP)的想法,寻找开发,使用搜索词VBA
和programming classification
,这没有任何结果。
现在有一个用户在这里提出了这个问题:
其他资源:
https://stackoverflow.com/questions/49003285
复制相似问题