ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用Excel VBA代码模拟键盘按键的组合键(如:alt+41455,得到★)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-16 16:14 | 显示全部楼层 |阅读模式
本帖最后由 Excel2119 于 2024-1-16 16:31 编辑

如何用Excel VBA代码模拟键盘按键的组合键(如:alt+41455,得到★)


在工作中,经常会遇到平方米的写法,如,这个用【M键】输入m,用【alt+数字键178】组合键得到²。我想知道用vba代码如何模拟键盘按键的组合键,得到更多的特殊字符。


比如:
  1. Sub alt()
  2.     dim i
  3.     For i = 0 To 5000
  4.         Range("A" & i + 1) = i
  5.         Range("B" & i + 1) = Application.SendKeys("%{i}")
  6.         ' Debug.Print ChrW(i)
  7.     Next
  8. End Sub
复制代码


可惜的是:Range("B" & i + 1) = Application.SendKeys("%{i}")错误。用【keybd_event &H11, 0, 0, 0】之类的也不行。


请老师们给予帮助。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-16 16:34 | 显示全部楼层
参考1(未实现):excel VBA中如何模拟键盘输入https://blog.51cto.com/chcchb/1341988

TA的精华主题

TA的得分主题

发表于 2024-1-16 16:48 | 显示全部楼层
本帖最后由 wanghan519 于 2024-1-16 17:02 编辑

ChrW(9733)是这个字符,但chrw接受的是unicode编码,41455则是对应的gbk编码
---------------------------------------
可能说的有点绕,ChrW是vba里的函数,但参数要是unicode编码,但给的41455是gbk编码,所以需要先把二进制的41455解码GBK,然后可以直接输入excel或者获取unicode编码都行,只是转GBK这一步用vba不会写。。。下面用金山文档写了一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-16 16:57 | 显示全部楼层
wanghan519 发表于 2024-1-16 16:48
ChrW(9733)是这个字符,但chrw接受的是unicode编码,41455则是对应的gbk编码


首先感谢wanghan519老师,针对这个问题我想要的是通用性。

                                alt + 数字键,举几个例子:
        -------------------------------------------------------------------------
        |  alt + 178 = ²        |  alt + 41434 = ≮        |  alt + 41442 = ♀        |
        |                          |                        |                        |
        |  alt + 179 = ³        |  alt + 41435 = ≯        |  alt + 41443 = °        |
        |                          |                        |                        |
        |  alt + 41428 = ≡        |  alt + 41436 = ≤        |  alt + 41451 = ‰        |
        |                          |                        |                        |
        |  alt + 41429 = ≌        |  alt + 41437 = ≥        |  alt + 41452 = §        |
        |                          |                        |                        |
        |  alt + 41430 = ≈        |  alt + 41438 = ∞        |  alt + 41453 = №        |
        |                          |                        |                        |
        |  alt + 41431 = ∽        |  alt + 41439 = ∵        |  alt + 41454 = ☆        |
        |                          |                        |                        |
        |  alt + 41432 = ∝        |  alt + 41440 = ∴        |  alt + 41455 = ★        |
        |                          |                        |                        |
        |  alt + 41433 = ≠        |  alt + 41441 = ♂        |  alt + 41456 = ○        |
        -------------------------------------------------------------------------
        说明:请不要用Excel函数ChrW(),用VBA代码模拟键盘来实现。

                                                  ExcelHome:Excel2119于2024-1-16
alt   数字键,举几个例子.png
通用:无论是在Excel还是在txt或其他,要通用。

TA的精华主题

TA的得分主题

发表于 2024-1-16 16:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
SendKeys好像没有返回值

TA的精华主题

TA的得分主题

发表于 2024-1-16 16:59 | 显示全部楼层
Excel2119 发表于 2024-1-16 16:57
首先感谢wanghan519老师,针对这个问题我想要的是通用性。

                                alt + 数字键,举几个例子:

是通用的,二进制数据解码GBK就可以输入了,比如wps在线文档里
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-16 17:04 | 显示全部楼层
wanghan519 发表于 2024-1-16 16:59
是通用的,二进制数据解码GBK就可以输入了,比如wps在线文档里

wanghan519老师,这是用Python实现的吧,用VBA如何实现呢?纯纯的vba代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-16 17:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-1-16 17:11 | 显示全部楼层
Excel2119 发表于 2024-1-16 17:04
wanghan519老师,这是用Python实现的吧,用VBA如何实现呢?纯纯的vba代码

问了一下ai给出了很神奇的代码
  1. Function PackUint16BE(ByVal value As Long) As String
  2.     Dim packedBytes(0 To 1) As Byte
  3.    
  4.     packedBytes(0) = (value \ 256) And 255
  5.     packedBytes(1) = value And 255
  6.    
  7.     PackUint16BE = StrConv(packedBytes, vbUnicode)
  8. End Function
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-16 17:40 | 显示全部楼层
wanghan519 发表于 2024-1-16 17:11
问了一下ai给出了很神奇的代码


wanghan519老师,好神奇,这就成了。感谢啊      (神奇的ai)
老师,您用哪款ai,能推荐一下吗?还有如何使用也是个很操心的问题

我做了一下循环,测试如下:
录屏.gif

代码如下:(共享资源是一件很开心的事,感谢wanghan519老师)
  1. Sub text()

  2.     Dim i
  3.    
  4.     For i = 41425 To 41460
  5.         
  6.         n = Range("A" & i - 41423).value
  7.         
  8.         b = PackUint16BE(Range("A" & i - 41423).value)
  9.         
  10.         Range("B" & i - 41423) = b
  11.     Next

  12. End Sub

  13. Function PackUint16BE(ByVal value As Long) As String
  14.     Dim packedBytes(0 To 1) As Byte
  15.    
  16.     packedBytes(0) = (value \ 256) And 255
  17.     packedBytes(1) = value And 255
  18.    
  19.     PackUint16BE = StrConv(packedBytes, vbUnicode)
  20. End Function
复制代码



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 08:37 , Processed in 0.040773 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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