在 Windows 和 Mac 上通过 VBA 宏发送带有工作簿的电子邮件

2023-12-13

我的以下代码在 PC 上运行正常,但在 Mac 上不起作用。我希望脚本能够识别当前操作系统并为该操作系统运行适当的命令集,而不是为 Windows 和 Mac 用户制作两个带有单独按钮的宏版本。

该宏创建一封带有工作簿附件的电子邮件。该附件是 ActiveWorkbook 的临时版本,在发送电子邮件后将被删除。

我目前用来发送电子邮件的方法是 Windows CDO。在装有 Office 2016 的 MAC OSX 上执行时,我还应该注意其他注意事项吗?

Private Message As CDO.Message
Private Attachment, Expression, Matches, FilenameMatch, i

Sub enviar_mail()

    Dim wb1 As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim FileExtStr As String


    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Set wb1 = ActiveWorkbook

    'Make a copy of the file/Open it/Mail it/Delete it
    'If you want to change the file name then change only TempFileName
    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Copy of " & wb1.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
    FileExtStr = "." & LCase(Right(wb1.Name, Len(wb1.Name) - InStrRev(wb1.Name, ".", , 1)))

    wb1.SaveCopyAs TempFilePath & TempFileName & FileExtStr

    On Error Resume Next

    Set Message = New CDO.Message
    Message.Subject = ActiveSheet.Range("G9").Value
    Message.From = ""
    Message.To = ""
    Message.CC = ""
    Message.HTMLBody = ActiveSheet.Range("A12").Value
    Message.AddAttachment TempFilePath & TempFileName & FileExtStr

    Dim Configuration
    Set Configuration = CreateObject("CDO.Configuration")
    Configuration.Load -1                        ' CDO Source Defaults
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "*****"
    Configuration.fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

    Configuration.fields.Update

    Set Message.Configuration = Configuration
    Message.Send

    On Error GoTo 0

    'Delete the file
    Kill TempFilePath & TempFileName & FileExtStr

    Set OutMail = Nothing
    Set OutApp = Nothing

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

End Sub

因此,为了确定操作系统,您可以使用条件编译指令像这样:

#If Mac Then
    Debug.Print "I'm a Mac"
#Else
    Debug.Print "I'm not"
#End If

由于操作系统内置的安全性,在现代 MacOS 上发送邮件很棘手。 CDO 严格来说是一项 Windows 技术,不适用于此处。大多数人都会编写一个单独的 AppleScript 文件,然后由 Excel 执行。看这一页有关如何对 Outlook 和 Mail.app 执行此操作的详细信息。

当然,它确实首先涉及将脚本输入用户计算机的额外步骤,但 AppleScript 非常容易理解。例如:

tell application "Mail"
    set NewMail to (make new outgoing message with properties {subject:"My Subject"})
    tell NewMail
        set sender to "[email protected]"
        set content to "My email message"
        make new to recipient with properties {address:"[email protected]"}
        send
    end tell
end tell
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 和 Mac 上通过 VBA 宏发送带有工作簿的电子邮件 的相关文章

  • dyld:惰性符号绑定失败

    当我尝试运行时遇到一个奇怪的错误gatsby develop在新创建的 gatsby 项目中 这不应该与 gatsby js 静态站点生成器 有任何关系 因为我在不同的场合也遇到了相同的错误 当我跑步时gatsby develop在我的一个
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • 无法启动 Windows 服务,错误 1064

    我编写了一个在 Win10 上运行的 Windows 服务 它运行得非常好 直到我决定对其进行一些更改 我重写了一些逻辑 在调试和发布配置中进行了测试 一切都很好 然后 我使用卸载了当前版本的服务installutil exe u serv
  • 在运行时,我如何判断我是否在 WinXP+ 上? win32

    我正在进行一些 win32 字符串 API 调用 并假设字符串以宽字符串形式出现 这在 XP 和更高版本上有效 我该如何断言这一点 这是运行时检查还是编译时检查 我做错了吗 这是一个例子 typedef std basic string
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 串行 I/O 与 Windows/Windows CE 重叠/不重叠

    抱歉 这不是一个大问题 但更多的是帮助那些在这些特定问题上遇到问题的人 我正在解决的问题需要使用串行 I O 但主要在 Windows CE 6 0 下运行 然而 最近有人问我该应用程序是否也可以在 Windows 下运行 所以我开始着手解
  • 在Windows 7上安装curl后缺少libcurl-4.dll

    按照这个人的安装curl后指示 https stackoverflow com a 28757477 1186038 除了第 2 步 已安装Win64 OpenSSL v1 0 1u 轻型相反 因为下载页面中缺少版本 k http slpr
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • C++ 使用 Windows 命名管道

    由于某种原因 桅杆和从属装置都失败了 但是我可以找到任何关于它们如何工作的好例子 所以我不确定我哪里出了问题 在 ConnectNamedPipe 之后 主设备永远不会退出 WaitForSingleObject 并且从设备在第一个 boo
  • 在 macOS 上为 MoviePy 安装 ffmpeg 失败并出现 SSL 错误

    我正在尝试编写一个 Python 程序 在 Mac OS 10 11 16 上使用 MoviePy 将 MP4 文件转换为 GIF 我用 import moviepy editor as mp 我收到一条错误消息 说我需要打电话imagei
  • Windows批处理文件:将结构转换为单行字符串

    我需要将这个艰巨的任务作为批处理文件来完成 这对于 C 来说不是最困难的 但在 DOS 中是一个地狱 至少对我来说 我需要将结构转换为单个 var 字符串 才能在我的程序中再次将它们转换为该结构 别担心回归 一切都已经完成了 该结构的大小会
  • 无法连接到 macOS 上的 Docker 守护进程

    我通常更喜欢使用brew 来管理我的OSX 上的应用程序 我能够安装 docker docker compose 和 docker machine docker version Docker version 17 05 0 ce build
  • conio.h 不包含 textcolor()?

    我一直在考虑在我用 C 编写的 DOS 程序中使用颜色 有人告诉我conio h有textcolor 函数 但是当我在代码中使用它时 编译器 链接器会向我抛出错误 说我对该函数有未定义的引用 Does conio h真的有这个功能还是有人告
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • Windows 上的递归移动命令

    我需要做一个 sh 的 bat 副本 我不太了解 Windows cmd 在 Linux 上我可以做 mv or rsync a SOURCE DEST remove sent files ignore existing whole fil
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo

随机推荐

  • 使用 gson 为 WebClient 设置自定义编码器/解码器或 typeAdapter

    我很难找到与这个特定场景相关的任何内容 我配置了 spring boot 并且在其中使用了反应式WebClient使用 REST Api 我已将其配置为使用gson 但是想知道如何添加我的自定义TypeAdapters对于更复杂的物体 我所
  • 静态方法和实例方法之间的区别

    我只是在阅读教科书中给我的文字 我不太确定我是否理解它在说什么 它基本上告诉我静态方法或类方法包含 修饰符 关键字 static 但我实在不知道这意味着什么 有人可以用非常简单的术语向我解释什么是静态方法或类方法吗 另外 我能简单解释一下什
  • Jenkins插件如何获取职位信息

    我正在尝试制作一个 Jenkins 插件 如何从插件中获取职位信息 我知道 public String getShortName Job job 但是我不知道如何调用这个方法 我编写了下面的常规脚本来获取作业的所有内部版本号 import
  • struts2中的作用域拦截器

    有没有示例代码可以让我看到 Struts2 中作用域拦截器的使用 我想将参数从一个操作传递到另一个操作 通过 struts xml 配置 并希望使用范围拦截器 由于我是 Struts 2 的新手 任何人都可以提供使用范围拦截器的示例吗 我相
  • 替换 numpy 数组中的值时防止字符串被截断

    假设我有数组a and b a np array 1 2 3 b np array red red red 如果我要对这些数组应用一些像这样的奇特索引 b a lt 3 blue 我得到的输出是 array blu blu red dtyp
  • LARAVEL - 将我的 laravel 项目放在 000webhost 上

    我已经将 public 文件夹中的文件上传到 public html 将其他文件上传到 laravel 我也改变了index php 但我什么也没得到 我明白了 有人可以帮助我吗 谢谢 编辑 这是我的索引文件 我认为这很好
  • 使用自定义相机创建预览屏幕

    我正在创建一个应用程序 在其中为相机制作了自定义叠加层 我注意到 当我使用相机的正常默认设置时 会出现预览 您可以选择重新拍摄照片或使用它 使用自定义叠加层时是否有一种简单的方法来显示该屏幕 谢谢 是的 为此 您必须以编程方式创建一个相机叠
  • PyInstaller: IOError: [Errno 2] 没有这样的文件或目录:

    我正在尝试使用 pyinstaller 和 science MMTK 等模块来编译 python 脚本 Pyinstaller 无法包含一些 pyd 模块 因此我手动将它们复制到 dist 文件夹中 当我执行编译后的 exe 时 出现以下错
  • WPF TextBox ScrollToLine 如果可见则不更新

    我的程序中有一个导航栏 允许您导航文本框中的不同部分 但我遇到的问题是 如果我滚动到的文本已经在屏幕上可见 则这不起作用 就像在这个例子中一样 如果我尝试从第 1 部分跳转到第 3 部分 它将无法工作 因为它已经可见 但是 在这个例子中 如
  • 文件更改时自动编译

    有没有办法用 typescript 进行自动编译 就像在 CoffeScript 中使用 Mindscape 一样 您只需保存文件 扩展程序就会编译您的代码 VS2012 RTM 使用最新的WebEssentials 2012 扩展 昨天发
  • 如何在 Spring 表达式语言中运行嵌套求值

    我想使用 SPeL 并且需要评估来自配置源的参数 问题是名称 密钥是动态的 所以我依靠一个参数来解析另一个参数 我基本上需要检查布尔参数 例子 部分键 前缀 app name 完整密钥 app name feature isEnabled
  • VS Code - 如何更改资源管理器中灰色文件夹名称的颜色?

    我在用着莫诺凯专业版作为我在 VS Code 中的配色方案 当 VS Code 使在 gitignore文件中 文本颜色变得非常难以阅读 例如 我有 node modules文件夹 红圈 写在我的里面 gitignore文件和 VS Cod
  • 动态规划 - 分词

    我正在尝试解决this问题 问题如下给定一个输入字符串和一个单词字典 找出输入字符串是否可以分割成空格分隔的字典单词序列 字典是一个字符串数组 我的方法是以下递归 fn 并存储递归调用的结果 输出很好 但我发现存储的结果从未被使用 我的解决
  • 通用 iOS 应用程序中的单独设置?

    我正在开发一个通用的 iOS 应用程序 但一些用户设置在 iPad 上没有多大意义 我可以指定单独的 Settings bundle 或 Root plist 在 iPad 上使用吗 从 4 0 开始 您将能够为 ipad 重命名文件 使其
  • Eclipse Mars 不会自动导入 JavaFX

    因此 每次我想使用 JavaFX 8 组件时 我都必须在 google 上搜索包的确切名称 然后手动输入 import packageName 我会说得更详细 假设我想创建一个StackPane StackPane stackPane ne
  • 动态更改 animateCamera 俯仰和缩放属性不起作用

    使用 useState 动态更改 animateCamera 俯仰和缩放属性不起作用 onLayout gt map current animateCamera center latitude location coords latitud
  • 使用分组依据选择前 1 个

    我有两列 namecode name 050125 chris 050125 tof 050125 tof 050130 chris 050131 tof 我想按名称代码分组 并仅返回出现次数最多的名称 在这种情况下 结果将是 050125
  • matplotlib 不支持生成器作为输入

    我正在这个网站上运行笔记本https github com vsmolyakov experiments with python blob master chp01 ensemble methods ipynb用python练习ensemb
  • 将字符串参数从 xhtml 传递给函数或方法

    我有一个按钮 我想根据函数返回 true 还是 false 来呈现它 HTML
  • 在 Windows 和 Mac 上通过 VBA 宏发送带有工作簿的电子邮件

    我的以下代码在 PC 上运行正常 但在 Mac 上不起作用 我希望脚本能够识别当前操作系统并为该操作系统运行适当的命令集 而不是为 Windows 和 Mac 用户制作两个带有单独按钮的宏版本 该宏创建一封带有工作簿附件的电子邮件 该附件是