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

时间:2011-04-05 13:05:04

标签: windows ms-access vba clipboard access-vba

在Access2003 / 2007中使用VBA。

如何将字符串变量的内容复制到剪贴板?

This site建议创建一个零长度的TextBox,将字符串复制到TextBox,然后运行DoCmd.RunCommand acCmdCopy。啊。我的意思是,我们可能会走这条路。但仍然。啊。

虽然the MS knowledgebase article向我们展示了如何操作,但它涉及许多Windows API调用。育。

那是唯一的两个选择吗?

3 个答案:

答案 0 :(得分:57)

VB 6提供了一个Clipboard对象,使所有这一切变得非常简单和方便,但遗憾的是VBA无法提供。

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

但是,更简单的替代方法是使用DataObject类,它是Forms库的一部分。如果您已经在应用程序中使用Forms库中的功能,我建议您使用此路线。添加对此库的引用以使用剪贴板似乎有点傻。

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

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

或者,将剪贴板中的文本复制到字符串变量中:

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText

答案 1 :(得分:7)

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

哪个很好用。 :)

答案 2 :(得分:6)

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

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

您可以获得Leigh Webber's source code here

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

我创建了这两个类,运行了他的测试用例,并且它在Windows 7 64位下的Outlook 2007 SP3 32位VBA中完美运行。它很可能适用于Access。 提示:要重命名类,请在VBA“项目”窗口中选择该类,然后单击菜单栏上的“查看”并单击“属性窗口”(或者单击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)

他还提供了操纵剪贴板的其他功能。

它还克服了 32KB MSForms_DataObject.SetText 限制 - SetText 经常失败的主要原因。但是,请记住,不幸的是,我没有找到微软认可这一限制的参考。

-Jim