vb怎么编写代码,vb如何编写代码

代码 2

你是不是也为每月要处理超多人的工资条拆分而苦恼

你是不是也为每月要处理超多人的工资条拆分而苦恼?繁琐枯燥还怕出错?想要一个一劳永逸的方法吗?今天它来了。教你用ChatGPT快速拆分Excel表格。
·第一步,用ChatGPT生成VBA代码。提问方式首先为GPT设定角色,以提高输出质量。接着为GPT提供任务情景,提问时强调输出的形式为vba代码。这里要注意的是GPT输出质量不稳定,可以参考它提供的几个版本。
·第二步,复制GPT生成的代码。
·第三步,打开需要处理的Excel表,同时按下Alt加F11进入VB编辑模式。
·第四步,点击左上角新建模块的按钮,进入代码编辑界面,在弹出的编辑框中空白处粘贴VBA代码。
·第五步,完成粘贴后在VB编辑器的左上方找到蓝色三角按钮,并点击随后程序就开始帮你干活啦。最后返回Excel表检查结果。

VB/VBA中Declare声明API时

VB/VBA中Declare声明API时

VB/VBA中Declare声明API时,这样用效率又会增加一点点哦!

1、有时候说VB/VBA简单易用吧,它的确足够简单,没有C/C++中的晦涩符号,语句写出来几近自然语言。COM包裹下的内置函数体系,有足够的容错空间,因此感觉易用。但是,真要VB/VBA干点什么的时候,总离不开API。灵活性虽然有,但是封装性又远远不够。所以,VB/VBA入门容易,精专难。这个难就难在,需要直接使用API来干活。

2、直接使用API干活,虽然性能有保障,但是必须得直面计算机专业相关的东西。VB/VBA原本通过抽象层隔离了编程背后的专业概念,但直接使用API时是没有办法屏蔽的。所以,API对于很大一部分VB/VBA用户来讲,已经算门槛了。

3、好在,VB/VBA提供了Declare机制,将函数指针完全屏蔽了。大部分VB/VBA用户,通过API的Declare说明,至少VB官方给出的千余个API,还是能凑合用。但是,Declare方式使用API,虽然遮盖了函数指针,降低了使用门槛,但是性能开销也不低啊。

4、在前面的分享文章中,笔者也介绍了Declare的相关特点,这里从导入函数的角度说一说。熟悉Win的PE结构的朋友,不难知道应用程序若使用了其他DLL的代码(函数),就会将其放入导入表中,这样在应用程序初始化的时候,就会载入相应的DLL,并将调用函数的地址更新到导入表中,这样应用程序运行的时候,就可以直接根据导入表中地址跳转执行相应的函数代码。
但是,VB/VBA中无论Declare了多少DLL中的函数,编译后的EXE/DLL中却死活只有1个导入库,就是MSVBVMXX.DLL。这充分说明,Declare是动态调用API,是运行时通过GetProcAddress函数查找函数地址,然后再跳转执行函数代码。
这不仅需要在VB/VBA应用程序里存储Declare相应的参数,从而增大文件体积,而且也无法充分利用编译上的性能优势。所以,Declare使用API是一种开销和性能都不占优的方式。

5、有没有其他更好的方式呢?当然有啊,C/C++中怎么用,就可以怎么用。不过,那样对于很多VB/VBA朋友来讲,就需要补课了。那有没有在Declare基础上,优化的方法呢?本文,笔者就是要介绍这个知识点。既不增加使用负担,又能提升性能的好办法。

6、Declare能用的API都是人家DLL的导出函数,这个不用解释吧。所以,VB/VBA编译的DLL默认不能导出函数时,很多人就发明了标准DLL来贬低VB/VBA。其实人家导出了4个函数,如果懂这4个导出函数,就可以调用了呀,只不过不是Declare这种方式而已。
既然Declare使用的都是导出函数,那就说说导出函数吧。导出函数有两种方式,一种序数导出,另一种名称导出。从现在的眼光来看,序数导出只是为了兼容。因为可读性差,所以绝大部分导出函数都是以名称方式导出,这样使用API的语句,可读性就要强点,当然性能也会损失那么一点点。
为何说序数导出是为了兼容呢?想想当年一张软盘才多大,函数名是字符串啊,存储字符串可费地方了。在当年存储金贵的年代,只能牺牲可读性来节约空间,毕竟序号仅占2字节。所以,这里也可以回答,32位DLL能导出多少个函数,那就是2的16方(也即65536)个。

7、今天给大家伙介绍的性能提升,就跟这个序号有关。也即是说,使用Declare声明API时,可以将函数名替换为相应的序号,就可以提升性能哦。
为何这么说呢?因为所有导出函数的相对地址(RVA),都会放入『导出地址表』中,这个表项的顺序跟导出序号顺序一致的。如果使用导出序号,就可以直接索引到表项。但是使用函数名时,就会多出两个表。1个『导出函数名称表』,1个『名称序数表』。先要去『导出函数名称表』中找到函数所在表项索引,然后再根据这个索引到『名称序数表』中找到函数名对应在『导出地址表』中的序号,才能根据该序号索引到相应的地址。
当导出函数名较多,使用的名称又比较靠后时,就会进行大量的字符串比较,这是非常耗时的。所以,直接使用序号,就可以避免。

8、不过Declare,也使用了类似于导入表的机制,在应用程序生命周期中,只会执行1次函数寻址。所以,使用名称对性能的影响也就不明显了。但是,序数在笔者之后要介绍的VB/VBA高阶应用中,却有大大的用处哦(不妨收藏以备后用)。
欢迎关注BtOfficer(收藏、点赞、关注+转发),更多精彩仍在继续哦(专栏文章将更系统,更全面,但需要阁下支持哦),有严肃的技术,也有轻松的唠嗑,期待你的加入!

让VB/VBA的语句提升10倍以上的性能

让VB/VBA的语句提升10倍以上的性能

让VB/VBA的语句提升10倍以上的性能!

1、在前面的文章中,给大家分析了VB/VBA改进的方向和意义。尽管目前的改进离Delphi还有差距(功能的完备性),但部分改进已经能拿来测试了。这一测不要紧,竟然与VB自带的语句间有10倍以上的性能差异,而且还是在PCODE环境下。所以,尽管夜已深,但还是按奈不住激动,分享给大家伙吧。

2、我们都知道,在VB/VBA中Variant无处不在,因其庞大的身躯(结构详见之前的文章)和那些说不清道不明的内部转换,导致Variant成为VB/VBA性能表现的掣肘。所以,本篇测试就拿这个Variant开刀。

3、在前面也给大家分享了VB/VBA的内置函数的概览,Variant就占据了这些内置函数的方方面面。无论是在代码的编写过程中,还是在给内置函数传参的过程中,随时都进行着赋值语句(Variant与其他类型之间)。既然如此,我们就来看看赋值语句吧。

4、如图1所示,uStr为String类型,且已被初始化为&34;,v为Variant类型,未被初始化。按传统方式,将uStr赋值给v。因为这种赋值,其实也蛮快的,为了针对问题,将其重复执行1000万次,并测试3次,结果分别为1810、1841和1825。

5、如图2所示,将其更换为改进方式,并用指针代替字符串变量,同样重复执行1000万次,并测试3次,结果分别为172、156和141。

6、上述测试均在IDE环境,也即PCODE模式下,二者有着显著的性能差异。由此可以说明,VB/VBA的可玩性还是蛮高的,要性能有性能,要皮实有脸厚。
欢迎关注BtOfficer(收藏、点赞、关注+转发),更多精彩仍在继续哦(专栏文章将更系统,更全面),有严肃而枯燥的技术,也有轻松的唠嗑,更有现成工具等你来拿,期待你的加入!

chatGPT爆火前

chatGPT爆火前,也有不少类似的AI对话产品,为什么之前的没有火起来?我的看法是两者有本质的区别,一个是玩具,一个是生产力工具,有本质的区别。看看下面的例子,要求chatGPT写代码:

我:
写一段VB代码,查找一个工作簿中两
个表格(sheet1和sheet2)中的差异,并把两个表格中有差异的单元格标成黄色。

chatGPT:
这是一段使用 Visual Basic for Applications (VBA) 实现查找工作簿中两个表格 (Sheet1 和 Sheet2) 中的差异并将不同的单元格标记为黄色的代码:

Sub CompareSheets()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim rng2 As Range
Dim cell1 As Range
Dim cell2 As Range

Set ws1 = ThisWorkbook.Sheets(&34;)
Set ws2 = ThisWorkbook.Sheets(&34;)

Set rng1 = ws1.Range(&34;)
Set rng2 = ws2.Range(&34;)

For Each cell1 In rng1
For Each cell2 In rng2
If cell1.Address = cell2.Address And cell1.Value <> cell2.Value Then
cell1.Interior.Color = RGB(255, 255, 153)
End If
Next cell2
Next cell1

End Sub
该代码定义了两个工作表 (ws1 和 ws2),并为它们定义了一个区域 (rng1 和 rng2)。然后,代码使用两个嵌套的循环,分别比较每个单元格 (cell1 和 cell2)。如果两个单元格的值不同,则将该单元格的背景颜色设置为黄色。

请注意,上面的代码将比较的单元格范围固定为 A1 到 Z100,您可以根据需要调整该范围。

不但给出来代码,还有相关注释。这段代码我在Excel表中测试过了,完全可用。

真的有人要失业了!

标签: #代码 #源码 #编辑器 #溯源码怎么查询 #代码 #真假 #代码 #开头