如何使用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