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

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

-NO.01-

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

— —  — —

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

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

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

同理,科学家们也有一样的烦恼:很多基因的名字都是英文缩写形式,因此经常出现 SEP1MARCH1这样的名字。它们的本意是英文全称 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

欢迎加入、一起进步

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

  1. this.$modal.confirm 自定义按钮关闭_【勤哲资料】7.6 自定义打印

    自定义打印 通常情况下,我们填报了一份表单,若想打印的话,直接利用Excel本身的打印功能就可以了,但是在某些情况下,Excel的打印功能就不能完全满足我们的需要了,例如: 套打 把合计行作为页尾,每 ...

  2. this.$modal.confirm 自定义按钮关闭_自定义函数,让你玩转Excel得心应手

    让"自动更正"输入统一的文本,你是不是经常为输入某些固定的文本,如<电脑报>而烦恼呢?那就往下看吧. 1.执行"工具→自动更正"命令,打开" ...

  3. 最新QT从入门到实战完整版(08.qt中的坐标系-09 信号和槽-点击按钮关闭窗口_)

    最新QT从入门到实战完整版(08.qt中的坐标系-09 信号和槽-点击按钮关闭窗口_) 一.08.qt中的坐标系 二,09 信号和槽-点击按钮关闭窗口_ 来自 一.08.qt中的坐标系 二,09 信号 ...

  4. abap选择屏幕工具栏按钮问题

    选择屏幕的工具栏按钮?听上去好像就是SE80创建report的时候,新增加一个GUI状态嘛,对不对?其实不是的. 我们先看一个普通的report程序 不就是这样嘛? 我们运行这个report看看 点击 ...

  5. 【MFC】工具栏按钮的热点效果

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 工具栏按钮的热点效果可 ...

  6. js点击取消按钮关闭当前弹框_js关闭当前页面(窗口)的几种方式总结

    1. 不带任何提示关闭窗口的js代码 代码如下: 关闭 2.自定义提示关闭 代码如下: // 这个脚本是 ie6和ie7 通用的脚本 function custom_close(){ if (conf ...

  7. HTML页面中点击按钮关闭页面几种方式与取消

    1.不带任何提示关闭窗口的js代码 1 <input type="button" name="close" value="关闭" on ...

  8. qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...

    前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...

  9. HTML_页面点击按钮关闭页面的几种方式

    HTML页面点击按钮关闭页面的几种方式 文章目录 HTML页面点击按钮关闭页面的几种方式 一.不带任何方式的关闭窗口 二.提示之后关闭页面 三.点击关闭本页面并跳转到其他页面 四.将 三 中的方法放到 ...

最新文章

  1. 用Windows系统实现RAID功能
  2. javascript感叹号1_「翻译」JavaScript的可视化学习之三:作用域(链)
  3. java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO
  4. [Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
  5. C语言中const的用法
  6. rowid 对应mysql_请教一下相当于MySQL中Oracle的RowID
  7. python 免费空间_总算找到php免费空间
  8. 避免一个用户多次登录修改版
  9. maskrcnn还可以加网络吗_绿茶加蜂蜜的功效,绿茶可以加蜂蜜吗?
  10. 母版页(Master Pages)--轉載
  11. 触发器及其应用实验报告总结_双面喷绘材料的分类及其应用,超全总结!(建议收藏)...
  12. bzoj1013 [JSOI2008]球形空间产生器sphere
  13. UI设计灵感|如果你想设计一款有趣的状态提示,看这里OOPS!
  14. (十)用于面部识别的混合边缘人工智能:下一步
  15. html背景图片只显示一张图片,img只显示图片一部分 或 css设置背景图片只显示图片指定区域(示例代码)...
  16. linux第三课:一些注意点
  17. 总结—每个程序员都应该了解的固态硬盘知识
  18. IOS微信浏览器返回事件popstate监听
  19. Code Review(自评)
  20. JAVA常用关键字和英文缩写

热门文章

  1. nor flash启动与nand flash启动的区别
  2. Github 个人首页档案资料卡 README 自述文件
  3. 如何在一个.c文件里调用另一个.c文件里的变量
  4. 5.2.3 OS之I/O设备的分配与回收(DCT-COCT-CHCT-SDT)
  5. 3.1.6 OS之分页存储(页号、页偏移量等)
  6. percona+mysql插件_使用percona mysql插件来监控mysql5.7
  7. 算法练习day11——190329(平衡二叉树、搜索二叉树、完全二叉树)
  8. 命令 / Linux / netstat 详解
  9. 32 位和 64 位 OS 下的各种数据类型的大小
  10. 启明云端分享|ESP32-C3(ESP32­C3­MINI­1)使用的RISC与CISC有什么区别