VBA玩转系统剪贴板
前几天分享了博文《如何使用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玩转系统剪贴板相关推荐
- tmux系统剪切板_实践中的tmux:与系统剪贴板集成
tmux系统剪切板 by Alexey Samoshkin 通过阿列克谢·萨莫什金(Alexey Samoshkin) 在实践中使用tmux:与系统剪贴板集成 (tmux in practice: i ...
- vim复制内容到系统剪贴板
vim提供了y键盘操作用于复制文本,但是复制之后的文本位于当前窗口的缓冲区中,不在系统剪贴板中,这给跨程序文本拷贝代码很来很多麻烦.搜索发现,可以使用]y指令快速将选定的文本复制到系统剪贴板中. 顺便 ...
- Vim-复制选中内容至系统剪贴板,光标移动到指定行的行首和行尾
1.全选并复制到系统剪贴板 ggVG或ggvG 然后 "+y gg 让光标移到首行,在vim才有效,vi中无效 V 是进入Visual(可视)模式 G 光标移到最后一行 "+y 复 ...
- 『收集』体验微软ImageX 玩转系统映像文件
体验微软ImageX 玩转系统映像文件 http://www.sina.com.cn 2008年08月18日 07:47 IT168.com ImageX是微软开发的一款映像文件工具,其创建的Wi ...
- C# 利用系统剪贴板 保存 自定义对象
要使用系统剪贴板,就用到Clipboard这个类.一般而言,它只保存指定的格式的对象(在DataFormats里有枚举). 但是如果要保存自己定义的类对象呢? 没错,对象序列化是一种很好的方式. 代码 ...
- CentOS Linux 下的 vim 无法使用系统剪贴板,怎么解决呢?
文章目录 查看系统当前的 vim 是否支持剪贴板 安装 gvim 来支持系统剪贴板 gvim 和 vim 的区别 SSH 连接远程主机遇到的问题 查看系统当前的 vim 是否支持剪贴板 首先查看下系统 ...
- Android 系统剪贴板的使用 - 复制、获取和清空
ClipboardManager: 表示一个剪贴板 ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目) ClipData.Item: 剪贴数据集中的一个数据条目 ...
- 淘宝吱口令效果实现,获取系统剪贴板内容
首先把消息赋值到系统的剪贴板,然后再从系统剪贴板中获取到赋值的信息 第一步,复制信息,代码如下: //获取剪贴板管理器: ClipboardManager cm = (ClipboardManager ...
- 如何清空windows的系统剪贴板
有的时候我们需要模拟清空系统剪贴板的场景可以如下操作: windows11系统为例子: windows菜单,选择 设置 打开设置面板 搜索 剪贴板 点击清除即可
- 电脑安装android办公,办公室上班族的福利,在电脑上玩安卓系统
办公室上班族的福利,在电脑上玩安卓系统 2020-03-25 12:40:33 17点赞 149收藏 17评论 最近有同事迷上了玩<三国志战略版>,因此问笔者怎样在电脑上装安卓系统,好在电 ...
最新文章
- index.php user r,安装cms :在浏览器中打开http://你的网址/install/index.php 出现白屏怎样处理?...
- 【算法与数据结构】最大子序列和问题
- 如何计算近似纳什均衡_明明合作可以“共赢”,为什么他会损人不利己?博弈论之纳什均衡...
- 轻量级开源小程序SDK发车啦
- linux中fstab文件详解
- 二.编写第一个c#程序(注释,命名空间,类,Main方法,标识符,关键字,输入,输出语句,)...
- KMP算法———模板
- 为WebBrowser的WEB页的Document注册事件的问题
- CentOS RPM源镜像源(国内+国外)
- 1290 the mysql_ERROR 1290:The MySQL server is running with the --secure-file-priv option
- 语言模型(Language Modeling)与统计语言模型
- oracle instant client 配置,oracle instantclient配置
- Exadata是什么?
- ms17010漏洞复现-2003
- WebCralwer_java
- 在Linux系统中搭建web服务器
- py: pip3老,导致安装 flask avatar 依赖的 pillow 安装不上
- springboot整合sse
- PMP笔记-区分质量保障(QA)和质量控制(QC)
- KDD 2020最佳学生论文奖解读!杜克大学陈怡然组获奖-23