我使用包含文本框的用户窗体构建了Microsoft Word模板。我想在提交完成的用户表单时将两个文本框的数据分别复制到剪贴板中。只是为了澄清我希望每个文本框都有自己的条目进入剪贴板,以便将来轻松访问。
以下是我使用的代码,但是当我重复该过程时,它会用第二个替换剪贴板中的第一个文本框。任何帮助将不胜感激。
Sub ComandButton_click()
Dim clipboard As MSForms.DataObject
Set clipboard = New MSForms.DataObject
clipboard.SetText Me.TextBox1.value
clipboard.PutInClipboard
End Sub
编辑(附加背景):
为了访问剪贴板上的信息,我创建了一个自定义QAT。工具栏上的其中一个按钮可打开剪贴板,以便他们可以随时轻松地开始粘贴所需的名称。大多数报告涉及两个人,所以我想将两个文本框的值发送到剪贴板,就像您单独选择并复制每个名称一样。我的第一个想法是为两个文本框的值分配键盘快捷键,但我决定使用剪贴板选项卡。
答案 0 :(得分:0)
鉴于你告诉我们的内容,我猜你正在调用 Office剪贴板。这与Windows剪贴板不同,后者是您的代码所使用的。 Office剪贴板不向开发人员公开(仅供内部使用,仅供MS使用)。有一种方法可以提供信息,但我不确定它是多么可靠; YMMV(您的里程可能会有所不同)。
UserForm的代码,用于调用负责编写信息的过程:
PutContentOnOfficeClipboard Me.[textBoxName].Value
PutContentOnOfficeClipboard Me.[textBoxName].Value
该过程将文本写入文档的末尾,将其复制,然后再次删除。在我的测试中,这一切都显示在Office剪贴板上:
Sub PutContentOnOfficeClipboard(s As String)
Dim rng As word.Range
Set rng = ActiveDocument.Content
rng.Collapse wdCollapseEnd
rng.Text = s
rng.Copy
rng.Delete
End Sub
如果结果不可靠,那么你需要一种不同的方法。以下是关于替代方法的一些想法......
任务窗口是最佳的,因为它使信息可见的用户。遗憾的是,VBA开发人员无法使用任务窗格。它们可以在VSTO解决方案或Office-JS解决方案中使用,但这可能比您愿意/能够投入到项目中的工作量更大(陡峭的学习曲线,企业部署要求等)。
除了键盘快捷键(除了任何可见界面之外,它还不错):