【问题标题】:Excel VBA--Would like to minimize a built-in dialog boxExcel VBA - 想要最小化内置对话框
【发布时间】:2014-01-29 02:36:28
【问题描述】:

tl,dr: 我可以让 Application.Dialogs(xlDialogSendMail).Show 对话框最小化吗?

程序:我有一个自动创建文件、编译电子邮件并附加文件的解决方案。用户可以查看并选择发送电子邮件或关闭而不发送。

问题:问题是一些用户想将内容复制/粘贴到自动编译的电子邮件正文中。这是不可能的,原因有两个:

  • 编译电子邮件的例程使用剪贴板。
  • 该对话框不允许用户最小化(以便他们可以在电子邮件编译后复制内容)。

可能的解决方案:

  • 不要在电子邮件编译期间使用剪贴板。我宁愿不这样做,因为这需要对代码进行适度规模的修改。
  • 以这种方式调用 Outlook 对象库来创建电子邮件。我宁愿不这样做,因为这个工具分发给大约 110 人使用不同版本的 Excel 和 Outlook,并且(Outlook 库)兼容性问题会很猖獗。
  • 在电子邮件编译例程之后管理剪贴板,以使最后一个用户创建的“副本”再次处于活动状态。这种解决方案似乎可行但并不理想。
  • 允许内置对话框模式化/最小化,以便用户可以在编译后复制其内容。 这个解决方案似乎是最好的。

非常感谢任何答案/想法/指导!

【问题讨论】:

  • with varying versions of Excel and Outlook and (Outlook Library) compatibility issues would be rampant. 如果您使用后期绑定,则不会:)
  • 顺便说一句,我不能建议您进行任何代码增强,因为我不确定您如何在代码中使用 Application.Dialogs(xlDialogSendMail)。你很好地解释了你的问题。如果您在其中包含一些代码,那么这可以归类为“问得非常好”;)

标签: vba excel dialog outlook


【解决方案1】:

“最小化”按钮对 SendMail 对话框没有意义,因为此对话框是模态的 - 即必须关闭它才能继续在 Excel 中工作。此外,这个 Excel 对话框对象是在一个库中定义的,不容易通过 VBA 进行修改。

您的用户的解决方法是指示他们在打开对话框之前将文本复制到剪贴板缓冲区。除非您的应用程序在创建邮件正文时破坏了剪贴板,否则它可以用于粘贴。

如果您在例程中需要剪贴板内容,可以先将当前内容读出到文本变量中,然后在退出时将其恢复到剪贴板。

【讨论】:

  • 感谢您的回复。该例程确实使用剪贴板,使用户的副本无效。用户希望复制几个格式化的段落(对其数据的解释),因此复制到一个简单的文本变量中是不可行的。将用户的剪贴板内容复制到单独的(后期绑定)word doc 是可能的,但同时会构成第二个列出的潜在解决方案。
【解决方案2】:

第一个想法是使用 .parent 进行操作,但我不知道这是否可能。第二个想法是打开另一个 Excel 实例并从那里调用 Application.Dialogs(xlDialogSendMail),然后用户将能够切换到第一个 Excel 窗口。但是在发送或关闭电子邮件时,您必须关闭第二个 excel 实例。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多