一 编程的基础知识
1.1 编程基础知识
程序的构成
- 程序的构成(表面):很多语句
- 程序的构成(本质):数据,代码
- 程序的构成(过程构成)---I/O:输入 input,数据处理,输出 output
- 程序就是IO
数据和变量
- 数据是 纯数据,具体数据
- 变量,是存储数据的盒子-------本质是存储数据的地址
- 变量一般有数据类型,只存储这个类型的数据 (Python等语言,变量可以随意变化数据类型)
- 数据存在内存/硬盘内,都以字节 byte为单位
数据类型与大小
- 不同的数据类型,其实是不同的存储字节数byte
- 比如Unicode中 半角字符1个byte 汉字2个byte (utf-8汉字3个byte)
- 计算机内部最小存储单位是bit,一个byte是8bit,也就是11111111
- 2进制1个byte的范围是 00000000 - 11111111也就是2^8 也就是 256
语句/指令,函数,类等等
- 语句/指令: 就是一行代码
- block : 多行代码,一般的多行代码block是无意义的
- 函数(function): 一般看函数都是函数名,其实函数名只是个 名字
- function() 函数名,只是1个代号,
- 函数本质是 那多行代码
- 以{} 扩起来,或者在 f(): 缩进之后,或 function end function 之内
- 类(class)
- 实例 ( instance)
- 方法 object. f()
- 事件 object.open 同于判断触发事件、
- 属性 object.attr object.open() ?
1.2 编程模式
- 面向过程的编程
- 面向对象编程的!---差异很大,先构建 object --- class
- 面向组件编程
二 一些 coding技巧和潜规则等
2.1 怎么编程?
2.1.1 思路在 思考如何处理这个问题,分步骤
一段程序一定包括下面这3段内容(否则程序用来做什么呢?)
- 输入数据
- 处理---------------这是你 coding动手前,先要思考好的逻辑,分解,拆开为多个步骤
- 输出数据
2.1.2 为什么要用函数,不直接写一个block代码,或写个sub
- 因为直接写大段block代码,意味着,其他地方不能复用
- 把代码封装在函数里,比如下面这个,调用的方式用N种
- 第1种:EXCEL表 =filecount() 可以直接调用这个
- 第2种:用sub过程调用
- 第3种:用sub过程调用,然后直接= 函数返回值?
- 封装的注意点:像文件路径参数,需要拿出来,让调用函数的时候带参数调用,更加灵活
Sub jack007()
x1 = FileCount("C:\Users\Administrator\Desktop\test1\")
Debug.Print x1
End Sub
Function FileCount(cPath As String) As Integer
cFile = Dir(cPath & "*.txt")
Do While cFile <> ""
FileCount = FileCount + 1
cFile = Dir
Loop
Debug.Print FileCount
End Function
2.2 一些习惯的规则
2.2.1 冷知识
- VBA停止代码快捷键,出现死循环的时候记得用
- 1 esc
- 2 ctrl+break
- 3 ctrl+alt+delete
- filename
- VBA 所谓的文件名,都是完整的文件路径+文件名
- 使用语句好习惯
- 比如open 文件了,记得马上关闭,特别是循环体内
- open as #1
- close #1
- 对文件处理要成对操作
- 赋初值
- sum=0 一般不是赋值,是重置变量,你赋值一般不会赋值为0,而都是进行运算。
- a=1 这种一般是赋初值(也有重置功能)
- 类似于inputbox
- application.getsaveasfilename
- application.getopenfilename
- Application.GetSaveAsFilename为调出标准的“另存为”对话框,获取用户文件名,但并不真正保存任何文件,然后使用代码保存文件。
- 还有Application.GetOpenFileName可以调出标准的“打开”对话框。
Set NewBook = Workbooks.Add
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName
- 查找使用区域的行的最大,最小单元格
- end(xltoright)
- end(xlleft)
- 查找使用区域的列的最大,最小单元格
- end(xlup)
- end(xldown)
- 非空的最大行数
2.2.2等价写法
- object.方法()往往有两种写法
- 实测这两种写法是等价的
- Workbooks.OpenText ("C:\Users\Administrator\Desktop\test101.txt")
- Workbooks.OpenText Filename:="C:\Users\Administrator\Desktop\test101.txt"
- line语句和line()函数
- Line Input #filenumber, varname '读入1行内容到varname
- varname = Input(1, #1) '读入1个字符到varname
2.2.3 潜规则用法
- 返回值的一个例子
- boolen ,只有2个值 true/1 false/0
- int 效果其实和boolen差不多,但因为 值域更广,所以适用性更强
- 一般情况下
- false/0
- true/1 /-1 /999 /-9999 都是 true
- 举例子,默认eof(1) 返回的肯定是true
- do while not eof(1)
- loop
dir的参数举例子,参数经常是 0,1,2,4,8,16 等2的次方
数 值 描述
vbNormal 0 (缺省) 指定没有属性的文件。
vbReadOnly 1 指定无属性的只读文件
vbHidden 2 指定无属性的隐藏文件
VbSystem 4 指定无属性的系统文件 在Macintosh中不可用。
vbVolume 8 指定卷标文件;如果指定了其它属性,则忽略vbVolume在Macintosh中不可用。
vbDirectory 16 指定无属性文件及其路径和文件夹。
vbAlias 64 指定的文件名是别名,只在Macintosh上可用。
- 返回值的另外一个例子
- while not len()
- 判断字符串--文件名--文件内容,是否为空
- Do While Not Len(str1) '判断是否取到空行
- 循环的例子
- 用循环体i 的例子,经典形式,for i i=i+1 搭配使用
- for i= 1 to 3
- i=i+1
- 不用for也可以用循环体 k,i 等,循环体只要在循环内部即可,不一定非要用for 搭配
- do while not eof(1) 也是可以的
- i=i+1
- loop
- 不用循环体i,用for each也可以做循环
- for each f1 in dir
- next
三 大多数语言的基本控制结构有3种:
顺序结构、选择结构和循环结构。
顺序结构
- 顺序结构就是按照语句的书写顺序从上到下、逐条语句地执行。
- 执行时,编写在前面的代码先执行,编写在后面的代码后执行。
- 这是最普遍的结构形式,也是后面两种结构的基础。
- 顺序结构不需要使用结构控制语句
- 顺序语句我印象最深的就是cmd,goto语句很能说明这个特点
选择结构(我想也可以称为:分支结构,岔路结构,树杈结构吧?)
- 典型的用法就是 if if
- 各个语言里常见的就是 if elseif else , select case case 等等
- 这些都是结构控制语句
循环结构
- 典型的用法就是 for ...next
- 常见的还有 while , do while..... , do ... while
基本的一些规范分类叫法
- 语句 open
- 函数 open()
- 方法 object.open()
- 属性 object. 或 filename:=
VBA的 I/O相关
输出的 output
- msgbox
- Debug.Print [outputlist]
- print #1, "" ;""
输入的 input
- InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])