this.$modal.confirm 自定义按钮关闭_Excel迫使人类基因重命名?用VBA给科学家们支一招!—— 怎样快速定制工具栏按钮...
点击上方蓝色文字关注我们吧~

大家好!前几天有一个不大不小的科技新闻引起了很多朋友的共鸣:


-NO.01-
为什么Excel会让科学家犯愁?
— — — —
之所以说它能引起共鸣,是因为科学家们遇到的这个问题,对于我们各行各业的Excel用户来说都已经非常熟悉,那就是Excel在数据类型转换方面的“过度人性化”。
比如我们受命维护一个“秘密特工通讯录”,那么打开工作表后随便找个单元格,输入特供编号“007”,结果看到的就只有一个数字“7”。

结果本来一个听起来很酷的代号“凌凌漆”,就这样变成了 “特小七” 。

同理,科学家们也有一样的烦恼:很多基因的名字都是英文缩写形式,因此经常出现 SEP1、MARCH1这样的名字。它们的本意是英文全称 Strand Exchange Protein 1和Membrane Associated Ring-CH Type Finger 1 的缩写;但总所周知,Sep在英文里也是九月(September)的缩写,而March干脆就是三月的意思。所以当我们在Excel中输入这两个基因名称时,Excel当即就会把它们转换为日期类型:

事实上,即使我们马上意识到这一点,也无法再把它自动改回字符串“MARCH1”。因为我们在《全民一起VBA 提高篇》中讲过,Excel的日期类型其实就是一个数字,所以即使再把单元格格式设置为“文本”,显示的也是这个数字的文本形式:

更要命的是:上面一切操作都是Excel强制执行的,根本没有提供关闭自动转换功能的按钮,大概微软认为这种转换对所有用户都是最好的吧。所以科学家们实在无法忍受、只能给基因们改名大吉。


这就是“Excel自动转换导致人类基因被迫改名”的原因
-NO.02-
怎样用VBA 关闭自动转换?
— — — —
生物学家可以给基因改名,但是其他行业怎么办呢?没关系,Excel没有关闭转换功能的按钮,我们就自己做一个!比如下面的样子:我们自己开发一个“文本格式”按钮,只要按下去,再输入任何内容,都不会发生自动转换。

这个功能是怎样实现的呢?其实非常简单 —— 一行代码就能搞定。大体来说,它的思路就是:
1. 编写一个宏,一旦运行,就能够将当前工作表中所有单元格的格式,设置为“文本”类型。这样再在工作表中任何一个单元格输入数值,都会以原来的文本方式显示;
2. 办法在Excel的选项卡中添加一个按钮,然后把这个宏关联到该按钮上,于是每次启动Excel都可以使用这个功能。
对于第一步,我们已经知道,“当前工作表”在VBA中用 Application.ActiveSheet 对象表示(Application可以省略),“全部单元格” 则可以用这个工作表对象的Cells属性表示。
而对于“设置单元格格式”的操作,只要录制一个宏就能发现,它调用的是Cells的NumberFormatLocal 属性。如果把这个属性设置为 “@”,就代表 “文本类型” ;而设置为“G/通用格式” ,就代表 “常规” 模式,即自动转换。

结合这两点,我们就可以写出两个宏,功能分别是 “将全部单元格设为文本格式” 和 “将全部单元格设置为常规(自动转换)格式”。


于是,短短两行代码,就可以对单元格格式自动切换
-NO.03-
怎样把这两个程序做成Excel工具栏按钮?
— — — —
这样两行代码,我们所有的程序就写好了!接下来要解决的就是第二个问题:怎样把这两个宏做成Excel的工具栏按钮?
我们在《全民一起VBA 实战篇》中曾经介绍过用“加载项”方式实现工具按钮的方法。不过今天,我们再介绍另一个思路:使用Personal.xlsb 文件定制功能区!

首先,我们可以随便录制一个宏。这时Excel会弹出一个对话框,询问我们将这个宏保存到什么地方:

在这个对话框中,请选择“个人宏工作簿”,于是Excel就会自动创建一个名为“Personal.xlsb”的模板文件,保存在系统默认的文件夹中。而神奇的是:将来在本台电脑上,任何时间打开Excel,这个Personal.xlsb都会被自动加载进来。因此,凡是写在这个工作簿中的VBA宏,都可以像Excel自带功能那样,随时供我们使用。
于是录制完这个宏之后,我们再打开VBA编辑器,就可以看到左边工程浏览器中多了一个PERSONAL.XLSB。在这个项目中新建一个模块,然后把刚才我们自己写好的两个宏保存到其中,就意味着我们随时可以调用这两个宏,设置单元格格式为文本或常规了。

接下来,在Excel工具栏上点击鼠标右键,选择“自定义功能区”:

然后在弹出的“自定义功能区”对话框右侧,首先点击“新建选项卡”按钮,创建一个自己的选项卡并命名(比如下图的“个人工具”);再点击“新建组”按钮,在该选项卡中创建一个分组并命名(比如下图的“统一单元格类型”):

接下来就是最后一步!仍然是这个对话框,在左边的“从下列位置选择命令”下拉菜单中,选择“宏”,就可以看到我们写在Personal.xlsb中的两个VBA程序:

然后在对话框右侧的栏目中选中我们刚刚创建好的选项卡和分组,再点击对话框中间的 “添加” 按钮,就可以将这两个宏添加为工具栏分组中的两个按钮。添加进来之后,再点击下面的“重命名”按钮,就可以给这两个按钮指定名字和图标:

现在关闭所有对话框,再回到Excel中就可以看到我们自定义的选项卡,以及其中的两个按钮了!只要点击,就可以自动运行ActiveSheet.Cells.NumberFormatLocal = "@" 这一句,将整个表格设为文本格式。


提醒:本方法只适用于2013以上版本的Excel
当然,这个方法远远谈不上完美,真正的解决之道还是要请微软给Excel添加一个关闭自动转换的开关。但是通过这个小实验,我们可以学会一种简易的自定义工具栏方法、把自己编写的VBA程序做成功能按钮,所以还是很值得一试的。只是要注意:本方法只对Excel2013及以上版本适用。
~END~
更多精彩阅读

接下来,我们会怎么走 —— 关于新的课程和教学方式
不变的,是初心 —— 写在又一门课程收尾之际
为什么又是游戏?—— 摘一段二十多年前的青涩文章

扫码听课
杨老师课程全集
全民一起玩Python
全民一起VBA
欢迎加入、一起进步
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
