Excel VBA - 希望最小化内置对话框

时间:2014-01-29 02:36:28

标签: excel vba excel-vba dialog outlook

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

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

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

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

潜在解决方案:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-1)

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