打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA编程讲解001——如何编写宏程序
userphoto

2022.07.13 天津

关注

1前言

2为什么是VBA

我之前也尝试学习过网上流传比较广泛的Python和C#语言。对于我这种零编程基础的人来说,跟着网上的教程一步一步的学习,也能够学会,但是学习成本比较高。使用这些语言搜索语句时,不如VBA这种老旧的语言快捷,需要一定的门槛。比如,使用VBA语言,直接查询“VBA xx功能”就能找到相关的语句,如果使用C#的话,就需要在大量的语句中,找到自己需要的那一条,还没有注解,实在有点难。

如果使用C#的话,确实更加灵活高效(例如下图的软件,就是使用C#编写的小软件)。建议各位读者自己学习其它更高效的语言,能够少走弯路,更具有普适性。

最后我用来实现在Excel中编写工具箱的语言,使用的还是Excel自带编写宏程序的VB语言,学习成本更低,更快上手。

3如何学习VBA

首先需要声明的是,我基本上没有编写程序的能力,我的程序大部分都是思考我需要的功能,通过以下方式编写。

  • 思考功能,例如“如何获取工作表的最后一行”,在搜索引擎搜索:“工作表最后一行 VBA”。在别人的程序中复制。

  • 使用Excel自带的录制宏功能,手动操作一遍,再把程序复制下来,根据实际情况调整。

  • 找同事的程序,截取需要的功能,改造。

使用VBA编程上手门槛低,一般情况下只要有基础的程序能力(例如大学学习过相关C语言等课程,或能够熟练使用Excel里的公式)就可以直接上手实现一些简单的功能,在编写功能中不断学习基础的语句。

但同时也要指出,由于我个人因为没有系统的学习过VBA语言,所以我的知识体系比较片面,可能会因为不知道某个语句的存在,重复编写很多语句,只为了实现某个简单的功能。

例如,插入一行,只需要编写“Rows('10:10').Insert”,如果你不会使用循环语句,却想要插入100行时,将上述语句重复100次,也能达到效果。如果会使用循环语句,则很简单。

4如何创建VBA

创建宏程序(Visual Basic)、录制宏程序(录制宏)、使用宏程序(宏),都在Excel上方的开发工具中。

进入Visual Basic中,选择需要储存程序的工作薄,创建模块,以后我们的程序都会在模块中编写。(个人习惯使用模块,也可以在Sheet或ThisWorkbook中编写)

一般的程序,是以Sub为开头的组合,例如下图,为一个程序名为SuperLink的宏程序。

上图功能为运行一个弹窗“Hello World”的程序。(没有人在编程生涯中能拒绝Hello World)

5编写程序实例(以超链接目录为例)

我们以某一个需求功能为例,一步一步展示我的编程步骤,最后展示一下完整的程序。

5.1需求功能

我们常用的工作簿中工作表过多,不方便查找,如果能给工作簿做一个目录,就可以方便的核对该工作簿中有哪些工作表。如果能给这个目录做超链接,就能更好的直接连接到需要的工作表处。

5.2编程过程

5.2.1建立目录工作表

目录,需要存放在一个工作表中,我们的第一个需求,就是建立一个目录工作表,并起一个名字,比如就叫SuperLink。

搜索或录制宏得知,建立工作表的语句为:

Sheets.Add after:=Sheets(1)

Sheets(2).Name = 'SuperLink'

该语句会在原工作簿第一个工作表后插入一个工作表,并修改名字为SuperLink。

完成本步骤后,可运行程序尝试效果(F5为直接运行,F8为逐语句运行)

5.2.2读取每一个工作表名字并写入目录页

搜索得知,读取工作表名字的语句为:

For i = 1 To Worksheets.Count

    link = Sheets(i).Name

next i

此处把每一个工作表的名字都写入了一个叫link的变量中(名字随便起)

在循环中,每次link都被覆盖掉了,没有保存下来,所以我们要将这个名字储存到上一步建立的SuperLink工作表中。所以语句将变成

For i = 1 To Worksheets.Count

    link = Sheets(i).Name

    Sheets('SuperLink').Range('A' + Trim(Str(i))) = link

next i

新加的语句,是将每一次的Link变量的值,储存到SuperLink工作表的A列中,随着循环语句i的增加,分别储存到A1、A2、A3……单元格中。

目前完整程序将是:

Sub 基础程序01—SuperLink() '建立超链接目录superlink

    Sheets.Add after:=Sheets(1)

    Sheets(2).Name = 'SuperLink'

    For i = 1 To Worksheets.Count

        link = Sheets(i).Name

        Sheets('SuperLink').Range('A' + Trim(Str(i))) = link

    next i

End Sub

Sub程序名字按自己需求随便起,所有单引号后的内容均自动识别为批注内容。注意符号均应为英文。完成本步骤后,可运行程序尝试效果。

5.2.3为工作表名称增加超链接

搜索得知,添加超链接的语句为:

With Sheets('SuperLink')

    .Hyperlinks.Add Anchor:=.Range('A' + Trim(Str(i))), Address:='', SubAddress:= ''' + link + ''' + '!A1'

    .Range('A' + Trim(Str(i))) = link

End With

With语句是为了省略原语句中重复的值。

Sheets('SuperLink').Range('A' + Trim(Str(i))) = link

等同于

With Sheets('SuperLink')

    .Range('A' + Trim(Str(i))) = link

End With

注意range前需要有.代表.前的内容为with的值。(表达不太好,自行理解下)

Hyperlink.add为增加超链接的语句。连接到名称为Link的工作表的A1单元格。

实用中发现,直接增加超链接,部分文字格式可能会有问题(例如自动转化为数字格式或日期格式,导致名称错误)所以增加超链接后,又重新赋予了一遍单元格名称。

至此程序编写完成。

5.3完整程序展示

与上文相比,我的程序又增加了如下功能:

  • 用dim提前定义使用的变量,不定义也能使用,不过建议大家养成良好的习惯,提前定义,方便使用。

  • 删除原工作薄中,名称为Superlink的工作表,防止重名。

  • 定义目录页的A列宽度,方便查看。

  • 为目录页相关项保留工作表名称颜色。

  • 生成完毕后弹窗说明。

使用语句除了讲解过了,就是for循环语句和if判断语句,都比较好理解,仅看英文的意思,就能够清楚功能。大家也可以根据自己的需要,增加自己额外的功能。

希望各位能够编写出自己需要的小程序。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA编程问答(第1辑)
数控编程最高境界,教你用宏程序编程的方法,实例介绍简单详细!
09年计算机一级辅导:Excel中BASIC程序的运行(VBA是兼容了BASIC编程语言的命令和语法的EXCEL应用软件)
宏程序入门第二讲,外锥面的编程与加工
宏程序编程实例,分析得很到位,一学便会
vba十四课
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服