【原创】VBA学习笔记(316)VBA编程基础知识扫盲,只适合纯自学新手看

1 基础概念理解不透导致的问题1:语句不完整问题

1.1 语句不完整导致的报错

  • 新手比如我在VBE里写了点东西,很多时候报错,是因为语句不完整导致的问题
  • 比如写下面这些语句,点运行VBE会报错,为什么?
  • Range("a1:a8") 
  • a
  • 1+2

 

1.2  只有这样写才不报错,因为这样的一行都是完整的“一行语句”

  • arr1= Range("a1:a8"
  • Debug.print Range("a1:a8")才是完整的

 

1.3  为什么呢?因为对 变量,表达式,语句,语句块等概念傻傻没分清楚

  • 变量,常量。比如a, 比如 range("a1:a8")
  • 表达式:   比如 1+3
  • 语句,一行代码的最小单位,一行代码至少得是一个语句。比如 a=1+99
  • 语句块 ,多个语句

 

1.4 debug.print语句这种呢?这是一个操作,也是完整的语句

  • debug.print
  • debug.print ""
  • debug.print "hello"
  • DEBUG算啥?对象?模块?类? 还是特殊的

 

2 基础概念不牢固辨析2: VBA的基本数据类型没搞清楚

2.1 有时候为什么敲入代码,但输出的内容却不是你想要的?

比如如下

Sub test2()

Debug.Print "第1行打印="; a
Debug.Print "第2行打印="; "a"
Debug.Print "第3行打印="; 1 + 2
Debug.Print "第4行打印="; a = 3

End Sub

 

2.2 问题在于对VBA的基本数据类型没理解

2.2.1 基础数据类型,自身存储格式不同的数据存储类型

  • 常量
  • 字符串  "a"   "1"
  • 数字    1
  • isnumeric       isnumeric(1)=true   isnumeric("1")=true

 

2.2.2 位置/存储空间/ 名字/代称------名字代表是指代的内容(指向存储的地方)

  • 变量名代表变量,数组名就代表数组
  • 函数名指向函数,没毛病

 

  • 变量  a  :动态变量包罗万象?可以代表不同类型的变量,默认初值不同
  • array与array名
  • dict 与 dictionary 名
  • sub 与sub名
  • function 与 function 名
  • object 与 object 名

 

2.2.3 指代型数据类型的声明

  • 必须事先声明的
  • 数组,obejct等等

 

  • 事先可先不声明的
  • 变量可以不事先定义,也可以不赋初值
  • 变量时不需要加引号的
  • =SUM(INDIRECT(A1&"!B:B"))   相当于 sum(sheet1!b:b)

 

2.2.4 对比其他语言的  数据类型

  • js 里 变量名 $a  字符串a  
  • VBA 变量名 a  字符串 "a"      数组array1=array()   函数 func1()
  • python 变量名 a  字符串 "a"   数组 list=[]               函数 func1()

 

3 所谓数据结构,我的理解

  •  我感觉比如 array  dict 都是大神自己的自定义函数,加了一堆好用的方法和属性
  • 所以,也就意味着某种语言和某种语言上的数据结构也是有局限性的,因为是人设计的嘛,肯定根据他当时的思路和遇到的问题是有关系的,很难普适所有情况吧。当然大神是很多的,这些语言和数据结构都很屌。
  • 然后就变成了通用的标准了
  • 你牛逼你也可以啊,哈哈

 

4 关于各种返回值

4.1 一般无返回值的,默认都返回 "" false 0

各种无返回值的 变量,表达式等,默认返回都为false ""

 

4.2 返回值确定为string类型的函数

  • inputbox()  返回的一般都是字符串string类型 , 使用前记得要处理
  • split()   返回的也是字符串,即使是数字,也是 "5" 这样的

 

4.3 理解概念,比如 string 字符串概念

  • 不要记死的概念,比如变量和字符串
  • 实际上要知道代码里 a=b1, a  这种都是变量,返回值为false  ""
  • 而 "a" 才是string

 

5 先弄清VBA的参数传递方法,然后才能明白函数参数写法

5.1 参数类型

  • 必选参数
  • 可选参数

 

5.2 传递方式

  • 按位置传递参数,是有序的
  • 按名称传递参数,不要求顺序,只要求 参数名正确
  • 如果是混合传递,那么按名称传递的参数只能放在后面

 

5.3 比如最后1个参数不能是 , 省略,但是前面的参数可以省略

  • arr4 = Application.Index(arr1, 3, 0)
  • arr5 = Application.Index(arr1, 3)
  • arr5 = Application.Index(arr1, 3,) 错误写法

 

  • resize(3,2)
  • resize(3)
  • resize(3,)  错误写法 

 

5.4  参数写法举例

Sub maomi3()

Debug.Print VBA.DateSerial(2019, 12, 31)
Debug.Print VBA.TimeSerial(9, 15, 0)
Debug.Print

Debug.Print VBA.DateSerial(Year:=2019, Month:=12, Day:=31)
Debug.Print VBA.TimeSerial(Hour:=9, Minute:=15, Second:=0)
Debug.Print

'Debug.Print VBA.DateSerial() Year:=2019, Month:=12, Day:=31
'Debug.Print VBA.TimeSerial() Hour:=9, Minute:=15, Second:=0
'Debug.Print


End Sub

 

 

6 需要搞清楚,变量的生效范围------否则不能理解变量什么时候需要独立,什么时候可以用一样的

6.1 变量的生效范围

  • 一段代码里,特别注意变量要独立
  • 新手喜欢一个变量,重复使用,要知道前面的代码极可能改变了变量的现在值。
  • 理解
  • 跨模块级变量  public
  • 模块级变量   private  dim 
  • 过程级变量   dim   static

 

6.2 什么时候变量名尽量要独立?

  • 因为过程和过程之间,变量一般不互相影响,所以除非是模块级变量,不同过程内,函数内的变量完全没必要独立
  • 过程内,函数内的变量,尽量独立,否则会互相影响的可能性很大。除非不断的重置,也会很复杂把

 

7 有些函数,比如 工作表函数,需要把 查找单元格 加""

  • range("a1:a8")
  • [a1:a8]
  • application.match("1", , 0)

 

 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值