ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 262|回复: 18

[求助] 每5秒检测一下剪贴板,将剪贴板上的文字自动复制到excel的A列,每复制一次换一次行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-12 09:24 | 显示全部楼层 |阅读模式
每5秒检测一下剪贴板,将剪贴板上的文字自动复制到exce中l的A列,每复制一次换一次行

下面是文心一言写的代码,不好用,原因是:
1、粘贴完后换不了行;
2、要求是复制到excel,可程序好像识别不了excel,我当前打开的是word时,它会复制到word,打开网页时,它会复制到网页

  1. Option Explicit

  2. ' 声明一个全局变量来存储下一次运行的时间
  3. Dim NextRunTime As Double

  4. ' 声明一个常量来表示检查剪贴板的间隔时间(以秒为单位)
  5. Const CheckInterval As Double = 5 ' 每5秒检查一次

  6. ' 声明Windows API函数(需要添加适当的声明,但这里为了简化而省略)
  7. ' ...(实际上,由于VBA的限制,我们无法直接调用Windows API来获取剪贴板文本)

  8. ' 检查剪贴板并尝试粘贴到A1单元格的子程序
  9. Sub CheckAndPasteFromClipboard()
  10.     ' 这里我们不会真正检查剪贴板内容是否为文本,因为VBA不直接支持这一点
  11.     ' 而是假设如果剪贴板上有内容,我们可以通过SendKeys来粘贴它
  12.    
  13.     ' 确保A1单元格是活动的(这通常不是必要的,因为SendKeys会发送到活动窗口)
  14.     ' 但为了清晰起见,我们还是将其选中
  15.     Range("A1").Select
  16.    
  17.     ' 使用SendKeys模拟Ctrl+V来粘贴剪贴板内容
  18.     ' 注意:这种方法非常不可靠,因为它依赖于焦点和键盘布局
  19.     Application.SendKeys "^v", True
  20.    
  21.     ' 重新设置下一次运行的时间
  22.     NextRunTime = Now + TimeValue("00:00:" & CheckInterval)
  23.    
  24.     ' 使用OnTime方法安排下一次运行
  25.     Application.OnTime NextRunTime, "CheckAndPasteFromClipboard"
  26. End Sub

  27. ' 启动检查剪贴板的子程序(你可以通过按钮点击或其他方式触发这个子程序)
  28. Sub StartCheckingClipboard()
  29.     ' 调用CheckAndPasteFromClipboard子程序来开始检查
  30.     ' 并设置第一次运行的时间
  31.     CheckAndPasteFromClipboard
  32. End Sub

  33. ' 停止检查剪贴板的子程序(你可以通过另一个按钮点击来触发这个子程序)
  34. Sub StopCheckingClipboard()
  35.     ' 使用OnTime方法的Cancel参数来取消下一次运行
  36.     On Error Resume Next ' 忽略错误(如果NextRunTime没有被设置)
  37.     Application.OnTime NextRunTime, "CheckAndPasteFromClipboard", , False
  38.     On Error GoTo 0 ' 恢复正常错误处理
  39. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2024-11-12 10:24 | 显示全部楼层
  1. Sub test()
  2. Application.OnTime Now + TimeValue("00:00:05"), "test"
  3. Dim dataObj As MSForms.DataObject
  4. Set dataObj = New MSForms.DataObject

  5. ' 获取剪切板数据
  6. dataObj.GetFromClipboard

  7. ' 将剪切板数据粘贴到某个单元格
  8. Range("A" & [A65536].End(3).Row + 1).PasteSpecial

  9. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-12 14:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-11-12 14:24 | 显示全部楼层

插入窗体就不会有这个错误了。你也可以在插入窗体前后看看引用的变化,以后直接勾选引用。窗体不用可以马上删除的。

TA的精华主题

TA的得分主题

发表于 2024-11-12 14:26 | 显示全部楼层

在 VBA 编辑器中,点击 "工具" -> "引用" ->添加"Microsoft Forms 2.0 Object Library"
QQ20241112-142044@2x.png 2024-11-12 14.25.54.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-12 15:19 | 显示全部楼层
xjl565135022 发表于 2024-11-12 14:26
在 VBA 编辑器中,点击 "工具" -> "引用" ->添加"Microsoft Forms 2.0 Object Library"

粘贴到excel后,我没有剪贴新的内容,怎么还每隔5秒,重复粘贴上次的内容??

粘贴到excel,应该把剪贴板清空,如果剪贴板有新的内容了,再复制,没有新的,不用复制

TA的精华主题

TA的得分主题

发表于 2024-11-12 16:01 | 显示全部楼层
  1. Sub test()
  2. Application.OnTime Now + TimeValue("00:00:05"), "test"
  3. Dim dataObj As MSForms.DataObject
  4. Set dataObj = New MSForms.DataObject

  5. ' 获取剪切板数据
  6. dataObj.GetFromClipboard
  7. Data = dataObj.GetText
  8. If Data <> Range("A" & [A65536].End(3).Row) Then
  9. ' 将剪切板数据粘贴到某个单元格
  10.     Range("A" & [A65536].End(3).Row + 1).PasteSpecial
  11. End If
  12. End Sub
复制代码

加个if判断一下就好了

TA的精华主题

TA的得分主题

发表于 2024-11-12 16:21 | 显示全部楼层
xjl565135022 发表于 2024-11-12 14:26
在 VBA 编辑器中,点击 "工具" -> "引用" ->添加"Microsoft Forms 2.0 Object Library"

没有这个文件,是不是下载一个文件放在这个目录下面,然后按照引用的方法就可以使用了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-12 16:32 | 显示全部楼层
xjl565135022 发表于 2024-11-12 16:01
加个if判断一下就好了

这个还是有点问题,,如果相同的内容,我重复剪贴一次,就不能自动粘贴到excel里了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-12 16:34 | 显示全部楼层
有时候为了工作需要,可能有的内容需要重复剪贴两三次
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:59 , Processed in 0.044525 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表