如何使用Access / VBA复制到剪贴板?

在Access2003 / 2007中使用VBA。

如何将stringvariables的内容复制到剪贴板?

该站点build议创build一个零长度的TextBox,将该string复制到TextBox,然后运行DoCmd.RunCommand acCmdCopy 。 啊。 我的意思是,我们可能会走下去的路线。 但仍然。 啊。

虽然MS知识库文章向我们展示了如何做,但涉及到许多Windows API调用。 育。

这是唯一的两个select吗?

VB 6提供了一个Clipboard对象,使所有这些非常简单和方便,但不幸的是,这不是从VBA可用。

如果是我,我会去API路线。 没有理由害怕调用本机API; 该语言为您提供了这样做的能力。

不过,更简单的方法是使用DataObject类,它是Forms库的一部分。 如果您已经在应用程序的Forms库中使用了function,我只会推荐使用此路线。 添加引用到这个库使用剪贴板似乎有点傻。

例如,要在剪贴板上放置一些文本,可以使用以下代码:

 Dim clipboard As MSForms.DataObject Set clipboard = New MSForms.DataObject clipboard.SetText "A string value" clipboard.PutInClipboard 

或者,将剪贴板中的文本复制到stringvariables中:

 Dim clipboard As MSForms.DataObject Dim strContents As String Set clipboard = New MSForms.DataObject clipboard.GetFromClipboard strContents = clipboard.GetText 

我无法弄清楚如何使用第一个Google结果使用API​​。 幸运的是,某个地方的某个post指出了这个链接: http : //access.mvps.org/access/api/api0049.htm

哪个工作很好。 🙂

在social.msdn.microsoft.com网站上的用户Leigh Webber发布了一个实现使用Windows API的易于使用的剪贴板界面的VBA代码:

http://social.msdn.microsoft.com/Forums/en/worddev/thread/ee9e0d28-0f1e-467f-8d1d-1a86b2db2878

你可以在这里得到Leigh Webber的源代码

如果此链接未通过,请在Office开发人员中心> Microsoft Office for Developers论坛> Word for Developers部分中search“VBA的剪贴板对象”。

我创build了这两个类,运行了他的testing用例,并且在Windows 7 64位下的Outlook 2007 SP3 32位VBA内部完美运行。 它很可能会为Access工作。 提示:要重命名类,请在VBA的“项目”窗口中select该类,然后单击菜单栏上的“查看”,然后单击“属性窗口”(或者按F4键)。

用他的课程,这是从剪贴板复制到剪贴板所需要的:

 Dim myClipboard As New vbaClipboard ' Create clipboard ' Copy text to clipboard as ClipboardFormat TEXT (CF_TEXT) myClipboard.SetClipboardText "Text to put in clipboard", "CF_TEXT" ' Retrieve clipboard text in CF_TEXT format (CF_TEXT = 1) mytxt = myClipboard.GetClipboardText(1) 

他还提供了用于操作剪贴板的其他function。

它还克服了32KB的 MSForms_DataObject.SetText限制 – SetText经常失败的主要原因。 不过,请记住,不幸的是,我还没有find微软意识到这个限制的参考。

-Jim