ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-16 17:46 | 显示全部楼层
本帖最后由 Excel2119 于 2024-1-16 17:51 编辑

顺便把结果共享一下:

【已解决】用Excel VBA代码模拟键盘按键的组合键(如:alt 41455,得到★) .rar (13.44 KB, 下载次数: 19)


wanghan519老师,您用的是哪款ai啊?这么神奇,可否推荐一下呢?

效果如下:
录屏.gif

代码如下:
  1. Sub text() '用Excel VBA代码模拟键盘按键的组合键(如:alt+41455,得到★)

  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.    
  15.     Dim packedBytes(0 To 1) As Byte
  16.    
  17.     packedBytes(0) = (value \ 256) And 255
  18.    
  19.     packedBytes(1) = value And 255
  20.    
  21.     PackUint16BE = StrConv(packedBytes, vbUnicode)
  22.    
  23. End Function
复制代码


TA的精华主题

TA的得分主题

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

再次感谢wanghan519老师,效果见7楼

TA的精华主题

TA的得分主题

发表于 2024-1-16 17:57 来自手机 | 显示全部楼层
Excel2119 发表于 2024-1-16 17:46
顺便把结果共享一下:



ai是从github上随便搜的免费的gpt3.5,比如https://kkgithub.com/xx025/carrot,不高级,但是把py代码让它改成vba,它就说可以用strconv,我也才知道可以这么用

TA的精华主题

TA的得分主题

发表于 2024-1-16 18:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-17 09:23 | 显示全部楼层
wanghan519 发表于 2024-1-16 17:57
ai是从github上随便搜的免费的gpt3.5,比如https://kkgithub.com/xx025/carrot,不高级,但是把py代码让 ...


StrConv,这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的。



StrConv:编程函数
中文名:所属类型。

StrConv 函数:
返回按指定类型转换的Variant (String)。


语法:
StrConv(string,conversion, LCID)


StrConv 函数的语法有下面的命名参数:
  
部分
  
  
说明
  
  
string 必要参数。
  
  
要转换的字符串表达式。
  
  
conversion 必要参数。
  
  
Integer。其值的和决定转换的类型。
  
  
LCID 可选的。
  
  
如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)
  


设置值
conversion 参数的设置值为:
  
常数
  
  

  
  
说明
  
  
vbUpperCase
  
  
1
  
  
将字符串文字转成大写。
  
  
vbLowerCase
  
  
2
  
  
将字符串文字转成小写。
  
  
vbProperCase
  
  
3
  
  
将字符串中每个字的开头字母转成大写。
  
  
vbWide*
  
  
4*
  
  
将字符串中单字节字符转成双字节字符。
  
  
vbNarrow*
  
  
8*
  
  
将字符串中双字节字符转成单字节字符。
  
  
vbKatakana**
  
  
16**
  
  
将字符串中平假名字符转成片假名字符。
  
  
vbHiragana**
  
  
32**
  
  
将字符串中片假名字符转成平假名字符。
  
  
vbUnicode
  
  
64
  
  
根据系统的缺省码页将字符串转成Unicode。
  
  
vbFromUnicode
  
  
128
  
  
将字符串由Unicode转成系统的缺省码页。
  


注意:这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode+ vbFromUnicode。当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。


下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。

说明:
在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。

StrConv 函数示例1
本示例使用StrConv 函数来将Unicode 字符串转换成 ANSI 字符串。
Dim i As Long
Dim x( ) As Byte
x =StrConv("ABCDEFG", vbFromUnicode) ' 转换字符串。
For i = 0 ToUBound(x)

Debug.Print x(i)
Next

StrConv 函数示例2:
Buf="A" 'A的Unicode码值为41
OutByte =StrConv(Buf, vbFromUnicode)

则OutByte=41

相关基础知识:
命名参数
一参数,在对象库中预先定义了其名称。对每个参数,不必拘泥于语法所规定的特定顺序来提供值,而是只需按任何顺序用命名参数分配值。例如,假设一方法接受了三个参数:
DoSomeThingnamedarg1, namedarg2, namedarg3


在对命名参数赋值时,可使用以下语句:
DoSomeThingnamedarg3 := 4, namedarg2 := 5, namedarg1 := 20


注意,命名的参数不必按语法中安排的正规顺序出现。

字符串表达式
任何其值为一连串字符的表达式。字符串表达式的元素可包含返回字符串的函数、字符串文字、字符串常数、字符串变量、字符串 Variant 或返回字符串 Variant (VarType 8) 的函数。

Integer 数据类型
一种数据类型,将整型变量作为2 字节整数存储起来,范围是 -32,768 到 32,767之间的数字。Integer 数据类型也可表示列举值。在Visual Basic 可用百分比符号 (%) 的类型声明字符来表示一个 Integer。


参数
传递给一个过程的常数、变量或表达式。

Unicode
国际标准化组织 (ISO) 字符标准。Unicode 使用 16 位 (2 字节) 编码方案,允许 65,536 个不同的字符空间。Unicode 包含标点符号、数学符号、修饰符号等的表示。

常数
执行程序时保持常数值的命名项目。常数可以是字符串、数值、另一常数、任何( 除乘幂与 Is 之外的) 算术运算符或逻辑运算符的组合。每个主应用程序皆可定义自己的一组常数。用户也可以 Const 语句定义附加常数。可在代码中的任何地方使用常数代替实际的值。

区域
关于国家/地区及其语言的信息集合。代码区域设置会影响关键字等术语的语言,也会定义区域专用设置,像小数点、日期格式、字符排序顺序等。
系统的区域设置会影响到判别区域的功能,例如,在显示数字或将字符串转换成日期时,可使用操作系统“控制面板”的实用程序来设置系统所在区域。
虽然代码区域和系统区域通常设置为相同的设置值,但在一些情况仍有不同之处。例如,在标准版 Visual Basic 和专业版 Visual Basic 中,并没有把代码从 English-U.S. 翻译过来。可以把系统区域设置成用户的语言和国家/地区,但总是将代码区域设置成 English-U.S.,而且不能改变。在这种情况下,将使用 English-U.S.分隔符、格式占位符和排序次序。


运行时错误
在代码正在运行的时发生的错误。当一语句要进行非法操作时就会发生运行时错误。

Null
一个值,指示变量不含有效数据。 Null 是将 Null 显式赋值给一变量的结果,或者是包含 Null 的表达式之间的任何运算。

DBCS


使用 1 或 2 字节来表示一字符的字符集,超过个 256 字符也可表示。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-17 10:05 | 显示全部楼层
wanghan519 发表于 2024-1-16 17:57
ai是从github上随便搜的免费的gpt3.5,比如https://kkgithub.com/xx025/carrot,不高级,但是把py代码让 ...

wanghan519老师:下面这两句代码中的256和255是什么意思啊?

packedBytes(0) = (value \ 256) And 255
packedBytes(1) = value And 255

是:2^8=256 即1~256,或0~255?Byte数组转换为字符串?

TA的精华主题

TA的得分主题

发表于 2024-1-17 10:44 | 显示全部楼层
本帖最后由 wanghan519 于 2024-1-18 05:06 编辑
Excel2119 发表于 2024-1-17 10:05
wanghan519老师:下面这两句代码中的256和255是什么意思啊?

packedBytes(0) = (value \ 256) And 255 ...


把41455写入文件,发现二进制是EFA1
把★存为GBK文件,二进制是A1EF


所以不能直接把long写入str,而需要上面的代码

整除256之后,按位与8个1(也就是255)得到A1,放前面
直接按位与8个1,得到EF,放后面
然后这个byte串就是个GBK编码的★,之后可以用strconv转码
clipboard-20240117102638.png
clipboard-20240118050433.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 08:31 , Processed in 0.037951 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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