在Access2003 / 2007中使用VBA。
如何将字符串变量的内容复制到剪贴板?
This site建议创建一个零长度的TextBox,将字符串复制到TextBox,然后运行DoCmd.RunCommand acCmdCopy
。啊。我的意思是,我们可能会走这条路。但仍然。啊。
虽然the MS knowledgebase article向我们展示了如何操作,但它涉及许多Windows API调用。育。
那是唯一的两个选择吗?
答案 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