this.$modal.confirm 自定义按钮关闭_Excel迫使人类基因重命名?用VBA给科学家们支一招!—— 怎样快速定制工具栏按钮...

点击上方蓝色文字关注我们吧~

ca2abd72b7b9a67ae5c36b76de5868be.png

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

d4e07cafc2aee784602f83a2f6d2080f.png

2b9b4d7d16c67e0f294f1c784247e10b.png

-NO.01-

为什么Excel会让科学家犯愁?

— —  — —

之所以说它能引起共鸣,是因为科学家们遇到的这个问题,对于我们各行各业的Excel用户来说都已经非常熟悉,那就是Excel在数据类型转换方面的“过度人性化”。

比如我们受命维护一个“秘密特工通讯录”,那么打开工作表后随便找个单元格,输入特供编号“007”,结果看到的就只有一个数字“7”。

940520935af0c2c45fab8a7948b80910.gif

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

c01fe4bc5b3b188c3f4c163ef04b93f3.png

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

3282d87f71a623cec2f0537a262afbb9.gif

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

26d202cdc739301680b662abf4a81e2e.gif

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

5f85a5df826615c8ee7ae1c3218a2773.png

5a308f24fa7ec34197d0915c7a51f945.png

这就是“Excel自动转换导致人类基因被迫改名”的原因

-NO.02-

怎样用VBA 关闭自动转换?

— —  — —

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

43a1abf8ad032c6c7666c28a6b8283e5.gif

这个功能是怎样实现的呢?其实非常简单 —— 一行代码就能搞定。大体来说,它的思路就是:

1. 编写一个宏,一旦运行,就能够将当前工作表所有单元格的格式,设置为“文本”类型。这样再在工作表中任何一个单元格输入数值,都会以原来的文本方式显示;

2. 办法在Excel的选项卡中添加一个按钮,然后把这个宏关联到该按钮上,于是每次启动Excel都可以使用这个功能。

对于第一步,我们已经知道,“当前工作表”在VBA中用 Application.ActiveSheet 对象表示(Application可以省略),“全部单元格” 则可以用这个工作表对象的Cells属性表示。

而对于“设置单元格格式”的操作,只要录制一个宏就能发现,它调用的是Cells的NumberFormatLocal 属性。如果把这个属性设置为 “@”,就代表 “文本类型” ;而设置为“G/通用格式” ,就代表 “常规” 模式,即自动转换。

 019817b86b35bfb47989e0c662b94956.png

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

38a33b598f3a63691b3e4a91dbf26e61.png

5a308f24fa7ec34197d0915c7a51f945.png

于是,短短两行代码,就可以对单元格格式自动切换

-NO.03-

怎样把这两个程序做成Excel工具栏按钮?

— —  — — 

这样两行代码,我们所有的程序就写好了!接下来要解决的就是第二个问题:怎样把这两个宏做成Excel的工具栏按钮

我们在《全民一起VBA 实战篇》中曾经介绍过用“加载项”方式实现工具按钮的方法。不过今天,我们再介绍另一个思路:使用Personal.xlsb 文件定制功能区! 

4597bc85359e1bbaae63170766f51897.png

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

9cebfa49733f799d9ddc01e3002b59b6.png

在这个对话框中,请选择“个人宏工作簿”,于是Excel就会自动创建一个名为“Personal.xlsb”的模板文件,保存在系统默认的文件夹中。而神奇的是:将来在本台电脑上,任何时间打开Excel,这个Personal.xlsb都会被自动加载进来。因此,凡是写在这个工作簿中的VBA宏,都可以像Excel自带功能那样,随时供我们使用。

于是录制完这个宏之后,我们再打开VBA编辑器,就可以看到左边工程浏览器中多了一个PERSONAL.XLSB。在这个项目中新建一个模块,然后把刚才我们自己写好的两个宏保存到其中,就意味着我们随时可以调用这两个宏,设置单元格格式为文本或常规了。

08743fdbfc759759dc9884eebf50e243.png

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

023c89bb51080b93f6ee2ec80ac550b4.png

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

6db0fb951338bedbbe69fce457a09657.png

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

05fc261bbafa5c92894fd67ce59e4c30.png

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

7fc992f3ef8b45a9dee8473a8239397b.png

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

 43a1abf8ad032c6c7666c28a6b8283e5.gif

5a308f24fa7ec34197d0915c7a51f945.png

提醒:本方法只适用于2013以上版本的Excel

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

~END~

更多精彩阅读

58182be0da063ecad569cd41a7c264aa.gif

接下来,我们会怎么走 —— 关于新的课程和教学方式

不变的,是初心 —— 写在又一门课程收尾之际

为什么又是游戏?—— 摘一段二十多年前的青涩文章

31ea944c7f165f92db8141b34ea06621.png

扫码听课

杨老师课程全集

全民一起玩Python

全民一起VBA

欢迎加入、一起进步


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部