Mic*_*sny 7 windows-7 microsoft-outlook-2007 vba
我找到了一个自动打印 Outlook 附件的VBA 宏。规则触发宏。
但是宏需要引用Microsoft Scripting Runtime才能工作。我将代码保存在ThisOutlookSession 中,当我通过工具»引用引用库时,它工作正常。
但是每次打开程序时都需要添加引用。启动后宏在那里,但引用不在。我希望宏能够连续运行,而无需在系统启动时进行任何额外的点击。
Sub LSPrint(Item As Outlook.MailItem)
On Error GoTo OError
'detect Temp
Dim oFS As FileSystemObject
Dim sTempFolder As String
Set oFS = New FileSystemObject
'Temporary Folder Path
sTempFolder = oFS.GetSpecialFolder(TemporaryFolder)
'creates a special temp folder
cTmpFld = sTempFolder & "\OETMP" & Format(Now, "yyyymmddhhmmss")
MkDir (cTmpFld)
'save & print
Dim oAtt As Attachment
For Each oAtt In Item.Attachments
FileName = oAtt.FileName
FullFile = cTmpFld & "\" & FileName
'save attachment
oAtt.SaveAsFile (FullFile)
'prints attachment
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(0)
Set objFolderItem = objFolder.ParseName(FullFile)
objFolderItem.InvokeVerbEx ("print")
Next oAtt
'Cleanup
If Not oFS Is Nothing Then Set oFS = Nothing
If Not objFolder Is Nothing Then Set objFolder = Nothing
If Not objFolderItem Is Nothing Then Set objFolderItem = Nothing
If Not objShell Is Nothing Then Set objShell = Nothing
OError:
If Err <> 0 Then
MsgBox Err.Number & " - " & Err.Description
Err.Clear
End If
Exit Sub
End Sub
Run Code Online (Sandbox Code Playgroud)
nix*_*xda 11
请查看“VBA 早期绑定”和“VBA 后期绑定”。两种方法的优缺点。
您正在使用Earling在这一行绑定:Set oFS = New FileSystemObject。“新”是使用早期绑定的一个很好的指标。这就是为什么您必须在运行宏的每台机器上启用引用。
如果您使用后期绑定,则不必启用引用。该宏适用于每台机器。

您可以转换早期绑定
Dim oFS As FileSystemObject
Set oFS = New FileSystemObject
Run Code Online (Sandbox Code Playgroud)
后期绑定
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用后期绑定,则系统不知道命名变量的基础数值。您必须将这些命名变量转换为其相应的数值。
要获得数值,请暂时重新启用您的库(例如Microsoft Scripting Runtime),转到 VBA 编辑器并打开即时窗口 ( CTRL+ G)。例如,?TemporaryFolder写入即时窗口并按回车键。正如你在截图中看到的2是我们命名变量的值TemporaryFolder

对所有其他有问题的变量重复这些步骤,并用它们的值替换它们。最后取消库引用,无论该库是否启用,您的代码都会在每台机器上运行。
oFS.GetSpecialFolder(TemporaryFolder) 'with Early Binding
oFS.GetSpecialFolder(2) 'with Late Binding
Run Code Online (Sandbox Code Playgroud)
很高兴知道,
我有利地使用了早期/晚期绑定的快速切换。
EarlyBinding = 1.EarlyBinding = 0项目从早期绑定到后期绑定进行最终的后期绑定测试。对于 FileSystemObject TemporaryFolder 示例,它可以表示为:
Sub EarlyVsLateBindingtest()
#If Earlybinding Then
Dim oFS As Scripting.FileSystemObject
Set oFS = New Scripting.FileSystemObject
#Else
Const TemporaryFolder = 2
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
#End If
oFS.GetSpecialFolder (TemporaryFolder)
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17942 次 |
| 最近记录: |