前言:
今天兄弟们对“vba强制转换”大体比较关怀,各位老铁们都需要了解一些“vba强制转换”的相关文章。那么小编也在网上汇集了一些关于“vba强制转换””的相关内容,希望我们能喜欢,咱们一起来了解一下吧!前言
VB/VBA的边边角角里安插了不少实用工具,而一般使用者也很难将所有特性都践行一遍。BtOfficer应该算对VB/VBA有较为深入的研究,但是依然不敢保证对所有特性都了如指掌。
这不,前不久在帮助网友分析一个国外项目代码的Bug时,就遇上了。为此,BtOfficer将其简化后,以《这是传说中VB/VBA的Bug吗?》分享给大家,看看大家是否碰到过。
该Bug,其实跟懒有关。还记得《VB/VBA的任性,从Variant开始》中那句『有一种懒叫VB,你不懂』吗?没错,该Bug跟为了更好地懒有关,这便是DefType语句。想必,各位网友很少用到吧,那本文就带大家一起来了解下该语句的妙用。
一、VB/VBA中可以无需声明变量
如果设置里,不强制要求变量声明,则在VB/VBA中,变量是随使用而声明的。也即在代码书写过程中,完全无需Dim语句,也是可以的。
变量的具体数据类型由代码确定,这就使得VB/VBA具有动态语言的特征。在一些小型应用上,代码的编写和存储的效率自是不必说的。
这是VB/VBA提供给用户的第一层懒,而且是默认的。主要用于屏蔽数据类型相关知识,从而大幅降低编码要求。这就使得非计算机专业的业余人士,也能快速上手,几分钟便可捣鼓出自己首个可运行的程序。这对于计算机编程启蒙的作用,是显而易见的。
二、VB/VBA中可以无需声明变量类型
如果在选项对话框中勾选了『要求变量声明』,则在新建代码模块时,会在首行自动填充Option Explicit语句。
该语句的作用,如上图所示。此时,当用户使用了未声明的变量,则解释器在运行或编译前,就会给出语法错误,高亮并显示指出未声明的变量。这样,可以不断矫正用户的编程习惯,并将变量相关知识输送到使用者大脑中。是不是自带循序渐进的教学模式?
此时,VB/VBA将用户分为两个层次,一个层次,用于容纳得过且过,不思规范的群体。他们可能仅仅应付课程作业,编程的乐趣并未吸引住他们。另一个层次,用于佛度有缘人,毕竟强扭的瓜不甜嘛,也不是每个人都能成为程序员。
尽管变量必须要声明了,但有些懒人肯定能想到,懒得声明类型,不也照样可以么。没错,VB/VBA还准备了默认数据类型。如果用户没有追求,VB/VBA是愿意来兜底的。
这便是Variant类型,当用户没有用As语句显式覆盖,则所有变量的类型都是Variant。因此如上图所示,直接声明变量名本身即可,这是VB/VBA提供的第二层懒。
虽然Variant在VB/VBA中吃得开,但是其隐含的类型转换,却是实打实地费CPU呀。所以,VB/VBA语法规则逐渐熟练起来的用户,都会抛弃这种懒。这样不仅提高了代码性能,也能让代码的可读性也变得更好。
其实,人类一直都在懒的路上不断深入。其他不说,现在五花八门的、层出不穷的高级编程语言,就是为了满足人类日益增长的懒需求。你以为,用Dim X As TypeName,就是规范,就是成长了?错,可以懒出潇洒的VB/VBA,岂能多敲字符。
不信你看《VB/VBA/VBS中哪些函数可加$符,能提高性能吗?》,为了性能与偷懒兼顾,As语句是不可能带的,毕竟后面跟一长串字符。这时候,VB/VBA里,那些躲在角落里的类型修饰符,就开始闪闪发光了。没错,VB/VBA还预留了类型修饰符,不同类型有不同的专有修饰符,可以兼顾代码简洁与性能。感兴趣的读者,可点击该链接,获取相应文章进行了解。
VB/VBA,为了懒,可谓是煞费苦心呀。
三、VB/VBA中可直接设置变量默认类型
如果读者朋友,认为VB/VBA可以懒到如此地步,也算是贴心,可以了的话,那就大错特错了。还有个处心积虑的猛货,等待各位去开光呢。这就本文的重点,DefType语句。
该语句同Option Explicit一样,放到模块的声明区顶部,用于声明所在模块变量、过程及其参数和返回值的类型。也就是说,仅需这么一条语句,就可以默认相应变量的数据类型。这样连变量修饰符都可以不要了,你说算得上是处心积虑不?
回到《这是传说中VB/VBA的Bug吗?》一文所提的Bug上来,其实就跟该语句相关。该语句语法如下:
DefBool LetterRange[,LetterRange] ...
DefByte LetterRange[,LetterRange] ...
DefInt LetterRange[,LetterRange] ...
DefLng LetterRange[,LetterRange] ...
DefSng LetterRange[,LetterRange] ...
DefLngLng LetterRange[,LetterRange] ...
DefLngPtr LetterRange[,LetterRange] ...
DefCur LetterRange[,LetterRange] ...
DefDbl LetterRange[,LetterRange] ...
DefDate LetterRange[,LetterRange] ...
DefDec LetterRange[,LetterRange] ...
DefStr LetterRange[,LetterRange] ...
DefObj LetterRange[,LetterRange] ...
DefVar LetterRange[,LetterRange] ...
上述不同的语句设置不同类型的默认范围,LetterRange既可以是abc这样的单个字符,也可以是a-c这样的字符范围,不区分大小写。这些字符定义的范围,即为变量名、参数名、过程名的首字符,这样相应的变量、参数和过程就不用再单独声明类型啦。
当然DefType语句,与Variant类型一样,主要充当的擦屁股的作用。如果用户使用Dim As语句,则可覆盖这种默认类型。DefType语句除了,让用户更精致地懒以外,还可以让代码更精简紧凑的同时,也不丢可读性。
该语句使用过程中的问题,以及还有哪些妙特征,欢迎关注BtOfficer,一起交流学习,分享给更多的网友哦!
标签: #vba强制转换 #vba强制转换数据类型 #vb转换数据类型