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

haw*_*bsl 34 windows clipboard ms-access vba access-vba

在Access2003/2007中使用VBA.

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

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

虽然MS知识库文章向我们展示了如何操作,但它涉及许多Windows API调用.育.

那是唯一的两种选择吗?

Cod*_*ray 58

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
Run Code Online (Sandbox Code Playgroud)

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

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
Run Code Online (Sandbox Code Playgroud)

  • 在`C:\ windows\system32\fm20.dll`找到`Microsoft Forms 2.0对象库`(XP 32) (9认同)
  • +1坚持使用API​​.在使用API​​方面,它实际上不是*额外的代码.特别是因为您只需从MSDN复制并粘贴一次代码,然后在需要时调用一个简单的函数`ClipBoard_SetData()`.我同意这是对VBA的一个奇怪的疏忽,但API路线真的不是那么糟糕. (5认同)
  • API是唯一的方法.为可以用API完成的事情添加引用是非常愚蠢的. (2认同)

Mal*_*low 7

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

哪个很好用.:)

  • (嗯似乎有我自己的剪贴板问题) (2认同)

小智 7

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的源代码

如果此链接未通过,请在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)
Run Code Online (Sandbox Code Playgroud)

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

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

-Jim