将多个用户窗体文本框的内容复制到剪贴板
Copying the content of multiple UserForm textboxes to clipboard
我用包含文本框的用户窗体构建了一个 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。工具栏上的其中一个按钮可以打开剪贴板,因此他们可以随时轻松地开始粘贴所需的名称。大多数报告涉及两个人,所以我想将两个文本框的值发送到剪贴板,就好像您单独选择并复制了每个名字一样。我的第一个想法是为两个文本框的值分配一个键盘快捷键,但我决定使用剪贴板选项卡。
根据你告诉我们的内容,我猜你正在调用 Office 剪贴板。这不同于 Windows 剪贴板,后者是您的代码所使用的。 Office 剪贴板不向开发人员公开(仅供内部,MS 使用)。有一种方法可以把信息放在上面,但我不确定它有多可靠; YMMV(您的里程可能会有所不同)。
用户窗体调用负责写入信息的过程的代码:
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 解决方案中使用,但这可能比您 willing/able 投入项目更多的努力(陡峭的学习曲线、企业部署要求等)
除了键盘快捷键(除了任何可见的界面之外还有一个不错的主意):
- QAT 或功能区上的下拉列表
- QAT 或功能区上的两个按钮
- 使用两个控件修改 Right-click(上下文)菜单,您可以根据需要在其中写入名称。 (需要 call-back 宏来进行动态更新)
- 将条目保存为 AutoText/Building 块,可能结合使用
使用 BuildingBlock 内容控件(可以过滤以仅显示您的条目;也可以从键盘有选择地使用自动图文集)。
- 制作一个带有按钮的小型 non-modal 用户窗体。您可以选择使用 Windows API 使其成为 "always on-top".
我用包含文本框的用户窗体构建了一个 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。工具栏上的其中一个按钮可以打开剪贴板,因此他们可以随时轻松地开始粘贴所需的名称。大多数报告涉及两个人,所以我想将两个文本框的值发送到剪贴板,就好像您单独选择并复制了每个名字一样。我的第一个想法是为两个文本框的值分配一个键盘快捷键,但我决定使用剪贴板选项卡。
根据你告诉我们的内容,我猜你正在调用 Office 剪贴板。这不同于 Windows 剪贴板,后者是您的代码所使用的。 Office 剪贴板不向开发人员公开(仅供内部,MS 使用)。有一种方法可以把信息放在上面,但我不确定它有多可靠; YMMV(您的里程可能会有所不同)。
用户窗体调用负责写入信息的过程的代码:
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 解决方案中使用,但这可能比您 willing/able 投入项目更多的努力(陡峭的学习曲线、企业部署要求等)
除了键盘快捷键(除了任何可见的界面之外还有一个不错的主意):
- QAT 或功能区上的下拉列表
- QAT 或功能区上的两个按钮
- 使用两个控件修改 Right-click(上下文)菜单,您可以根据需要在其中写入名称。 (需要 call-back 宏来进行动态更新)
- 将条目保存为 AutoText/Building 块,可能结合使用 使用 BuildingBlock 内容控件(可以过滤以仅显示您的条目;也可以从键盘有选择地使用自动图文集)。
- 制作一个带有按钮的小型 non-modal 用户窗体。您可以选择使用 Windows API 使其成为 "always on-top".