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

i34xakig  于 2022-11-26  发布在  Windows
关注(0)|答案(5)|浏览(402)

在Access 2003/2007中使用VBA。
如何将字符串变量的内容复制到剪贴板?
This site建议a创建一个零长度的TextBox,将字符串复制到TextBox,然后运行DoCmd.RunCommand acCmdCopy。唉。我的意思是,我们可能会走这条路。但仍然。唉。
虽然the MS knowledgebase article向我们展示了如何做到这一点,但它涉及到许多Windows API调用。
只有这两个选择吗?

u4dcyp6a

u4dcyp6a1#

VB 6提供了一个Clipboard对象,它使所有这些操作变得极其简单和方便,但不幸的是,VBA中没有这个对象。
如果是我,我会走API路线。没有理由害怕调用本地API;这种语言为您提供这样做的能力是有原因的。
然而,一个更简单的替代方法是使用DataObject类,它是Forms库的一部分。我只建议如果你已经在你的应用程序中使用Forms库的功能,那么就走这条路。添加对这个库的引用 only 来使用剪贴板似乎有点愚蠢。
例如,若要将一些文字放在剪贴板上,您可以使用下列程式码:

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
gab6jxml

gab6jxml2#

www.example.com网站上的用户Leigh Webbersocial.msdn.microsoft.com发布了VBA代码,实现了一个使用Windows API的易用剪贴板界面:
http://social.msdn.microsoft.com/Forums/en/worddev/thread/ee9e0d28-0f1e-467f-8d1d-1a86b2db2878
您可以获得Leigh Webber's source code here
如果此链接无法通过,请在Office开发人员中心〉Microsoft Office for Developers论坛〉Word for Developers部分中搜索“VBA的剪贴板对象”。
我创建了这两个类,运行了他的测试用例,它在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)

他还提供了其他操作剪贴板的函数。
它还克服了32 KB****MSForms_DataObject.SetText的限制-这是SetText经常失败的主要原因。但是,请记住,不幸的是,我还没有找到Microsoft认识到这一限制的参考资料。

  • 吉姆
ha5z0ras

ha5z0ras3#

我不知道如何使用第一个Google搜索结果的API。幸运的是,某个线程将我指向了以下链接:http://access.mvps.org/access/api/api0049.htm
效果很好。:)

xeufq47z

xeufq47z4#

简单的两行代码:

这并不复杂,我不明白为什么所有在网络中找到的解决方案都如此复杂。

Sub StoreData()

  Set objCP = CreateObject("HtmlFile")
  objCP.ParentWindow.ClipboardData.SetData "text", "Some text for clipboard"

End Sub
yk9xbfzb

yk9xbfzb5#

这里列出了许多示例,但似乎都没有涵盖使用API的直接方式,该API也适用于Access和Excel 32位和64位。
我不想偷别人的工作,所以我指着一篇文章,有一个解决方案。
https://stackoverflow.com/a/35512118/1898524

相关问题