前几天分享了博文《如何使用VBA将变量值拷贝到剪贴板?》,有的网友觉得使用的是旁门左道,今天来个根正苗红的Windows API解决方案。
示例代码如下。

Private Declare Function GlobalAlloc Lib _"kernel32.dll" (ByVal wFlags As Long, _ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib _"kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib _"kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib _"kernel32" (ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib _"kernel32.dll" Alias "lstrcpyW" _(ByVal lpString1 As Long, _ByVal lpString2 As Long) As Long
Private Declare Function OpenClipboard Lib _"user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib _"user32.dll" () As Long
Private Declare Function CloseClipboard Lib _"user32.dll" () As Long
Private Declare Function IsClipboardFormatAvailable Lib _"user32.dll" (ByVal wFormat As Long) As Long
Private Declare Function GetClipboardData Lib _"user32.dll" (ByVal wFormat As Long) As Long
Private Declare Function SetClipboardData Lib _"user32.dll" (ByVal wFormat As Long, _ByVal hMem As Long) As LongPublic Function GetFromClipboard() As StringDim lngPtr      As LongDim lngLength   As LongDim lngGLock    As LongDim strTxt      As StringConst CF_UNICODETEXT As Long = 13&OpenClipboard 0&If IsClipboardFormatAvailable(CF_UNICODETEXT) ThenlngPtr = GetClipboardData(CF_UNICODETEXT)If lngPtr ThenlngGLock = GlobalLock(lngPtr)lngLength = GlobalSize(lngPtr)strTxt = String$(lngLength \ 2& - 1&, vbNullChar)lstrcpy StrPtr(strTxt), lngGLockGlobalUnlock lngPtrEnd IfGetFromClipboard = strTxtEnd IfCloseClipboard
End FunctionPublic Sub SetToClipboard(strTxt As String)Dim lngPtr      As LongDim lngLength   As LongDim lngGLock    As LongConst GMEM_MOVEABLE As Long = &H2Const GMEM_ZEROINIT As Long = &H40Const CF_UNICODETEXT As Long = &HDOpenClipboard 0&EmptyClipboardlngLength = LenB(strTxt) + 2&lngPtr = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, lngLength)lngGLock = GlobalLock(lngPtr)lstrcpy lngGLock, StrPtr(strTxt)GlobalUnlock lngPtrSetClipboardData CF_UNICODETEXT, lngPtrCloseClipboard
End Sub

由于代码使用了多个API函数,并且涉及指针的概念,这里不再进行详细讲解,接下来看一下如何使用。

Sub Demo()Dim strMsg As StringstrMsg = "2021年"SetToClipboard strMsg' 粘贴ActiveSheet.[a1].SelectActiveSheet.Paste' 赋值ActiveSheet.[a2].Value = GetFromClipboard
End Sub

【代码解析】
SetToClipboard 将程讲变量strMsg的值放置到系统剪贴板,在此之后可以使用第7行代码进行粘贴,也可以用9行代码直接为单元格赋值。当然也可以在其他应用程序中粘贴。

VBA玩转系统剪贴板相关推荐

  1. tmux系统剪切板_实践中的tmux:与系统剪贴板集成

    tmux系统剪切板 by Alexey Samoshkin 通过阿列克谢·萨莫什金(Alexey Samoshkin) 在实践中使用tmux:与系统剪贴板集成 (tmux in practice: i ...

  2. vim复制内容到系统剪贴板

    vim提供了y键盘操作用于复制文本,但是复制之后的文本位于当前窗口的缓冲区中,不在系统剪贴板中,这给跨程序文本拷贝代码很来很多麻烦.搜索发现,可以使用]y指令快速将选定的文本复制到系统剪贴板中. 顺便 ...

  3. Vim-复制选中内容至系统剪贴板,光标移动到指定行的行首和行尾

    1.全选并复制到系统剪贴板 ggVG或ggvG 然后 "+y gg 让光标移到首行,在vim才有效,vi中无效 V 是进入Visual(可视)模式 G 光标移到最后一行 "+y 复 ...

  4. 『收集』体验微软ImageX 玩转系统映像文件

    体验微软ImageX 玩转系统映像文件 http://www.sina.com.cn  2008年08月18日 07:47  IT168.com ImageX是微软开发的一款映像文件工具,其创建的Wi ...

  5. C# 利用系统剪贴板 保存 自定义对象

    要使用系统剪贴板,就用到Clipboard这个类.一般而言,它只保存指定的格式的对象(在DataFormats里有枚举). 但是如果要保存自己定义的类对象呢? 没错,对象序列化是一种很好的方式. 代码 ...

  6. CentOS Linux 下的 vim 无法使用系统剪贴板,怎么解决呢?

    文章目录 查看系统当前的 vim 是否支持剪贴板 安装 gvim 来支持系统剪贴板 gvim 和 vim 的区别 SSH 连接远程主机遇到的问题 查看系统当前的 vim 是否支持剪贴板 首先查看下系统 ...

  7. Android 系统剪贴板的使用 - 复制、获取和清空

    ClipboardManager: 表示一个剪贴板 ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目) ClipData.Item: 剪贴数据集中的一个数据条目 ...

  8. 淘宝吱口令效果实现,获取系统剪贴板内容

    首先把消息赋值到系统的剪贴板,然后再从系统剪贴板中获取到赋值的信息 第一步,复制信息,代码如下: //获取剪贴板管理器: ClipboardManager cm = (ClipboardManager ...

  9. 如何清空windows的系统剪贴板

    有的时候我们需要模拟清空系统剪贴板的场景可以如下操作: windows11系统为例子: windows菜单,选择 设置 打开设置面板 搜索 剪贴板 点击清除即可

  10. 电脑安装android办公,办公室上班族的福利,在电脑上玩安卓系统

    办公室上班族的福利,在电脑上玩安卓系统 2020-03-25 12:40:33 17点赞 149收藏 17评论 最近有同事迷上了玩<三国志战略版>,因此问笔者怎样在电脑上装安卓系统,好在电 ...

最新文章

  1. index.php user r,安装cms :在浏览器中打开http://你的网址/install/index.php 出现白屏怎样处理?...
  2. 【算法与数据结构】最大子序列和问题
  3. 如何计算近似纳什均衡_明明合作可以“共赢”,为什么他会损人不利己?博弈论之纳什均衡...
  4. 轻量级开源小程序SDK发车啦
  5. linux中fstab文件详解
  6. 二.编写第一个c#程序(注释,命名空间,类,Main方法,标识符,关键字,输入,输出语句,)...
  7. KMP算法———模板
  8. 为WebBrowser的WEB页的Document注册事件的问题
  9. CentOS RPM源镜像源(国内+国外)
  10. 1290 the mysql_ERROR 1290:The MySQL server is running with the --secure-file-priv option
  11. 语言模型(Language Modeling)与统计语言模型
  12. oracle instant client 配置,oracle instantclient配置
  13. Exadata是什么?
  14. ms17010漏洞复现-2003
  15. WebCralwer_java
  16. 在Linux系统中搭建web服务器
  17. py: pip3老,导致安装 flask avatar 依赖的 pillow 安装不上
  18. springboot整合sse
  19. PMP笔记-区分质量保障(QA)和质量控制(QC)
  20. KDD 2020最佳学生论文奖解读!杜克大学陈怡然组获奖-23

热门文章

  1. Linux安装DVWA
  2. 开源wiki系统推荐wiki.js, github上16500+ star,是带数据库的
  3. 设施规划选址——重心法
  4. [概率统计]商务与经济统计知识点总结 Part 2
  5. 视频上传接口测试实践
  6. 开发流程与管理--国内IT项目开发流程
  7. Dinic算法的原理与构造
  8. html如何设置图片置顶,css怎么设置图片间距?
  9. 高职计算机专业英语说课ppt,专业英语说课.ppt
  10. ubuntu20.04安装opencv4