我之前也尝试学习过网上流传比较广泛的Python和C#语言。对于我这种零编程基础的人来说,跟着网上的教程一步一步的学习,也能够学会,但是学习成本比较高。使用这些语言搜索语句时,不如VBA这种老旧的语言快捷,需要一定的门槛。比如,使用VBA语言,直接查询“VBA xx功能”就能找到相关的语句,如果使用C#的话,就需要在大量的语句中,找到自己需要的那一条,还没有注解,实在有点难。
如果使用C#的话,确实更加灵活高效(例如下图的软件,就是使用C#编写的小软件)。建议各位读者自己学习其它更高效的语言,能够少走弯路,更具有普适性。
最后我用来实现在Excel中编写工具箱的语言,使用的还是Excel自带编写宏程序的VB语言,学习成本更低,更快上手。
首先需要声明的是,我基本上没有编写程序的能力,我的程序大部分都是思考我需要的功能,通过以下方式编写。
思考功能,例如“如何获取工作表的最后一行”,在搜索引擎搜索:“工作表最后一行 VBA”。在别人的程序中复制。
使用Excel自带的录制宏功能,手动操作一遍,再把程序复制下来,根据实际情况调整。
找同事的程序,截取需要的功能,改造。
使用VBA编程上手门槛低,一般情况下只要有基础的程序能力(例如大学学习过相关C语言等课程,或能够熟练使用Excel里的公式)就可以直接上手实现一些简单的功能,在编写功能中不断学习基础的语句。
但同时也要指出,由于我个人因为没有系统的学习过VBA语言,所以我的知识体系比较片面,可能会因为不知道某个语句的存在,重复编写很多语句,只为了实现某个简单的功能。
例如,插入一行,只需要编写“Rows('10:10').Insert”,如果你不会使用循环语句,却想要插入100行时,将上述语句重复100次,也能达到效果。如果会使用循环语句,则很简单。
创建宏程序(Visual Basic)、录制宏程序(录制宏)、使用宏程序(宏),都在Excel上方的开发工具中。
进入Visual Basic中,选择需要储存程序的工作薄,创建模块,以后我们的程序都会在模块中编写。(个人习惯使用模块,也可以在Sheet或ThisWorkbook中编写)
一般的程序,是以Sub为开头的组合,例如下图,为一个程序名为SuperLink的宏程序。
上图功能为运行一个弹窗“Hello World”的程序。(没有人在编程生涯中能拒绝Hello World)
我们以某一个需求功能为例,一步一步展示我的编程步骤,最后展示一下完整的程序。
我们常用的工作簿中工作表过多,不方便查找,如果能给工作簿做一个目录,就可以方便的核对该工作簿中有哪些工作表。如果能给这个目录做超链接,就能更好的直接连接到需要的工作表处。
目录,需要存放在一个工作表中,我们的第一个需求,就是建立一个目录工作表,并起一个名字,比如就叫SuperLink。
搜索或录制宏得知,建立工作表的语句为:
Sheets.Add after:=Sheets(1)
Sheets(2).Name = 'SuperLink'
该语句会在原工作簿第一个工作表后插入一个工作表,并修改名字为SuperLink。
完成本步骤后,可运行程序尝试效果(F5为直接运行,F8为逐语句运行)
搜索得知,读取工作表名字的语句为:
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程序名字按自己需求随便起,所有单引号’后的内容均自动识别为批注内容。注意符号均应为英文。完成本步骤后,可运行程序尝试效果。
搜索得知,添加超链接的语句为:
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单元格。
实用中发现,直接增加超链接,部分文字格式可能会有问题(例如自动转化为数字格式或日期格式,导致名称错误)所以增加超链接后,又重新赋予了一遍单元格名称。
至此程序编写完成。
与上文相比,我的程序又增加了如下功能:
用dim提前定义使用的变量,不定义也能使用,不过建议大家养成良好的习惯,提前定义,方便使用。
删除原工作薄中,名称为Superlink的工作表,防止重名。
定义目录页的A列宽度,方便查看。
为目录页相关项保留工作表名称颜色。
生成完毕后弹窗说明。
使用语句除了讲解过了,就是for循环语句和if判断语句,都比较好理解,仅看英文的意思,就能够清楚功能。大家也可以根据自己的需要,增加自己额外的功能。
希望各位能够编写出自己需要的小程序。
联系客服