├── 1505548045994.png ├── 1505548422147.png ├── 1505548886377.png ├── 1505549069568.png ├── 1505555701907.png ├── 1505556598033.png ├── 1505749555407.png ├── README.md ├── demo1.1.gif ├── excel.md ├── install.md └── redis.md /1505548045994.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505548045994.png -------------------------------------------------------------------------------- /1505548422147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505548422147.png -------------------------------------------------------------------------------- /1505548886377.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505548886377.png -------------------------------------------------------------------------------- /1505549069568.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505549069568.png -------------------------------------------------------------------------------- /1505555701907.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505555701907.png -------------------------------------------------------------------------------- /1505556598033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505556598033.png -------------------------------------------------------------------------------- /1505749555407.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/1505749555407.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 文档整理 2 | 3 | [![Page Views Count](https://badges.toozhao.com/badges/01EH4NT41A7VSVF232K1PYKCMJ/green.svg)](https://badges.toozhao.com/badges/01EH4NT41A7VSVF232K1PYKCMJ/green.svg "Get your own page views count badge on badges.toozhao.com") 4 | 5 | ## TASK 6 | - [] mq使用和常见问题 7 | - [] airflow等任务调度 8 | - [] apollo配置中心 9 | 10 | ## 2017更新 11 | 12 | - [简明Excel VBA](./excel.md) 13 | - [Redis实战 笔记](./redis.md) 14 | 15 | ## 开源应用 16 | 17 | - [RabbitMQ](http://rabbitmq.mr-ping.com/AMQP/AMQP_0-9-1_Model_Explained.html) 18 | 19 | 20 | ## 便捷配置 21 | 22 | - [vim配置](https://github.com/ma6174/vim) 23 | 24 | ## 安装 25 | 26 | - [install script](./install.md) 27 | -------------------------------------------------------------------------------- /demo1.1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vlean/blog/9e13d08f9180a02b00e4afa21771b5cef72c26bd/demo1.1.gif -------------------------------------------------------------------------------- /excel.md: -------------------------------------------------------------------------------- 1 | 2 | # 简明Excel VBA:whale: 3 | 4 | ## TODO 5 | - [x] 提纲 6 | - [x] 文档列表 7 | - [x] 语法说明 8 | - [ ] VBA界面介绍 9 | - [ ] 对象操作说明 10 | - [ ] 参考资料 11 | - [ ] 若雨化 12 | 13 | ## changelog 14 | 15 | - 2017/09/22 fix对象的一些表述错误 16 | - 2017/09/18  补充`Set`&`Dim`;VBA界面介绍 17 | - 2017/09/16 VBA语法说明 18 | 19 | ## 0x00 文档列表 20 | - [Excel VBA 参考,官方文档,适用2013及以上](https://msdn.microsoft.com/zh-cn/library/ee861528.aspx) 21 | - [Excel宏教程 (宏的介绍与基本使用)](http://blog.csdn.net/lyhdream/article/details/9060801) 22 | - [Excel2010中的VBA入门,官方文档](https://msdn.microsoft.com/zh-cn/library/office/ee814737(v=office.14).aspx) 23 | - [Excel VBA的一些书籍资源,百度网盘](https://pan.baidu.com/s/1i5QSIX3) 24 | - [Excel 函数速查手册](https://support.office.com/zh-cn/article/Excel-%E5%87%BD%E6%95%B0%EF%BC%88%E6%8C%89%E7%B1%BB%E5%88%AB%E5%88%97%E5%87%BA%EF%BC%89-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb?ui=zh-CN&rs=zh-CN&ad=CN) 25 | - [VBA的一些使用心得](http://www.cnblogs.com/techyc/p/3355054.html) 26 | - [VBA函数参考](https://msdn.microsoft.com/zh-cn/library/office/jj692811.aspx) 27 | - [VBA入门参考,英文](http://analystcave.com/vba-cheat-sheet/) 28 | 29 | ## 0x01 语法说明 30 | 31 | 都知道学会了英语语法,再加上大量的词汇基础,就算基本掌握了英语了。类似的要使用vba,也要入乡随俗,了解他的构成,简单的说vba包含`数据类型`、`变量&常量`、`对象`和常用的`语句结构`。 32 | 33 | 不过呢在量和复杂度上远低于英语,不用那么痛苦的记单词了,所以vba其实很简单的。熟悉了规则之后剩下就是查官方函数啦,查Excel提供的可操作对象啦。 34 | 35 | 顺带一提的是,函数其实也很容易理解,方便使用。拿到一个函数,例如`sum`,只要知道它是求多个数的和就够了,剩下的就是用了。例如`sum(1000,9)`结果就是`1009`了。函数的一大好处就是隐藏具体实现细节,提供简洁的使用方法。 36 | 37 | 38 | ### 1.1 数据和数据类型 39 | 40 | Excel里的每一个单元格都是一个`数据`,无论是数字、字母或标点都是数据。对数据排排队,吃果果,对不同的数据扔到不同的篮子里归类,篮子就是`数据类型`了。 41 | 42 | 在Excele里面吧,`数据类型`只有`数值`、`文本`、`日期`、`逻辑`或`错误`五种类型。前四种就是最常用的了。数据范围呢也不记,知道多大的数用啥类型就足够了。 43 | 44 | 45 | | 类型 | 类型名称 | 范围 | 占用空间|声明符号 | 备注| 46 | |--------|-------|-----|--------|-----|----| 47 | | **逻辑型**| 48 | | 布尔 | Boolean|逻辑值True或False|2| 49 | |**数值型**| 50 | |字节| Byte | 0~255的整数|1| 51 | |整数| Integer| -32768~32767|2|%| 52 | |长整数|Long|-2147483648~2147483647|4|&| 53 | |单精度浮点|Single||4|!| 54 | |双精度浮点|Double||4|#| 55 | |货币|Currency||8|@| 56 | |小数|Decimal||14| 57 | |**日期型**| 58 | |日期|Date|日期范围:100/1/1~9999/12/31|8| 59 | |**文本型**| 60 | |变长字符串|String|0~20亿||$| 61 | |定长字符串|String|1~65400|| 62 | |**其他**| 63 | |变体型|Variant(数值)|保存任意数值,也可以存储Error,Empty,Nothing,Null等特殊数值| 64 | |对象|Object|引用对象|4| 65 | 66 | 表1.1 VBA数据类型 67 | 68 | 补充一点是,数组就像一筐水果,里面可以存不止一个数据。他不是一个具体的数据类型,叫数据结构更合适些。 69 | 70 | ### 1.2 常量和变量 71 | 72 | 定义后不能被改变的量,就是`常量`;相反的`变量`就能修改具体值。 73 | 74 | 在vba里,使用一个`变量`/`常量`要先声明。 75 | 76 | `常量`声明方法如下: 77 | `Const 常量名称 As 数据类型 = 存储在常量中的数据` 78 | 例如: 79 | ```vba 80 | Const PI As Single = 3.14 '定义一个浮点常量为PI,值为3.14 81 | ``` 82 | 83 | `变量`声明方法如下: 84 | 85 | `Dim 变量名 As 数据类型` 86 | 87 | 变量名,必须字母或汉字开头,不能包含空格、句号、感叹号等。 88 | 89 | 数据类型,对应上面👆表1.1里的那些 90 | 91 | 更多的声明方法,跟`Dim`声明的区别是作用范围不同: 92 | ```vba 93 | Private v1 As Integer 'v1为私有整形变量 94 | Public v2 As String 'v2为共有字符串变量 95 | Static v3 As Integer 'v3为静态变量,程序结束后值不变 96 | 97 | '变量声明之后,就可以赋值和使用了 98 | v1 = 1009 99 | v2 = "1009" 100 | v3 = 1009 101 | 102 | '使用类型声明符,可以达到跟上面同样的效果 103 | public v2$ '与 Public v2 As String 效果一样 104 | 105 | '声明变量时,不指定具体的类型就变成了Variant类型,根据需要转换数据类型 106 | Dim v4 107 | ``` 108 | 109 | 使用数组和对象时,也要声明,这里说下数组的声明 110 | ```vba 111 | '确定范围的数组,可以存储b-a+1个数,a、b为整数 112 | Dim 数组名称(a To b) As 数据类型 113 | 114 | Dim arr(1 TO 100) As Integer '表示arr可以存储100个整数 115 | arr(100) '表示arr中第100个数据 116 | 117 | '不指定a,直接声明时,默认a为0 118 | Dim arr2(100) As Integer '表示arr可以存储101个整数,从0数 119 | arr2(100) '表示arr2中第101个数据 120 | 121 | '多维数组 122 | Dim arr3(1 To 3,1 To 3,1 To 3) As Integer '定义了一个三维数组,可以存储3*3*3=27个整数 123 | 124 | '动态数组,不确定数组大小时使用 125 | Dim arr4() As Integer '定义arr4为整形动态数组 126 | ReDim arr4(1 To v1) '设定arr4的大小,不能重新设定arr4的类型 127 | 128 | ``` 129 | 130 | 除了用`Dim`做常规的数组的声明,还有下面这些声明数组的方式: 131 | ```vba 132 | '使用Array函数将已知的数据常量放到数组里 133 | Dim arr As Variant '定义arr为变体类型 134 | arr = Array(1,1,2,3,5,8,13,21) '将整数存储到arr中,索引默认从0开始 135 | 136 | '使用Split函数分隔字符串创建数组 137 | Dim arr2 As Variant 138 | arr2 = Split("hello,world",",") '按,分隔字符串 hello,world 并赋值给arr2 139 | 140 | '使用Excel单元格区域创建数组 141 | '这种方式创建的数组,索引默认从1开始 142 | Dim arr3 As Variant 143 | arr3 = Range("A1:C3").Value '将A1:C3中的数组存储到arr3中 144 | Range("A4:C6").Value= arr3 '将arr3中的数据写入到A4:C6中的区域 145 | 146 | ``` 147 | 148 | //TODO 补充操作excel赋值的动图 149 | 150 | **数组常用的函数** 151 | 152 | |函数|函数说明|参数说明|示例| 153 | |----|----|----|----| 154 | |`UBound(Array arr,[Integer i])`|数组最大的索引值|`arr`:数组;`i`:整形,数组维数| 155 | |`LBound(Array arr,[Integer i])`|数组最小的索引值|同上| 156 | |`Join(Array arr,[String s])`|合并字符串|`arr`:数组;`s`:合并的分隔符| 157 | |`Split(String str,[String s])`|分割字符串|`str`:待分割的字符串;`s`:分割字符串的分隔符| 158 | 159 | > 函数说明 160 | > 161 | > UBound(Array arr,[Integer i]); 162 | > UBound为函数名 163 | > arr和i为UBound的的参数,用中括号括起来的表示i为非必填参数 164 | > arr和i之前的Array,Integer表示对应参数的数据类型 165 | > 166 | > 补充 167 | > [VBA 内置函数列表](https://msdn.microsoft.com/zh-cn/library/office/jj692811.aspx) 168 | 169 | ### 1.3 运算符 170 | 171 | 运算符的作用是对数据进行操作,像加减乘除等。这块不再具体说明,列一下vba中常用的运算符。 172 | 173 | |运算符|作用|示例| 174 | |----|----|----| 175 | |**算术运算符**| 176 | |+|求两个数的和| 177 | |-|求两个数的差| 178 | |*|求两个数的乘积| 179 | |/|求两个数的商| 180 | |`\`|求两个数相除后所得商的整数| 181 | |^|求一个数的某次方| 182 | |Mod|求两个数相除后所得的余数| 10 Mod 9=3| 183 | |**比较运算符**| 184 | |=|比较两个数据是否相等|相等返回 True;否则返回False| 185 | |<>|不相等| 186 | |<|小于| 187 | |>|大于| 188 | |<=|不大于| 189 | |>=|不小于| 190 | |Is|比较连个对象的引用关系| 191 | |Like|比较两个字符串是否匹配| String1 Like String2| 192 | |**文本运算符**| 193 | |+|连接两个字符串| 194 | |&|连接两个字符串| 195 | |**逻辑运算符**| 196 | |And|逻辑与| 197 | |Or|逻辑或| 198 | |Not|逻辑非| 199 | |Xor|逻辑抑或|`表达式1 Xor 表达式2`两个表达式返回的值不相等时为True| 200 | |Eqv|逻辑等价|`表达式1 Eqv 表达式2`两个表达式返回的值相等时为True| 201 | |Imp|逻辑蕴含| 202 | 203 | ```vba 204 | 'Like是个比较有用的运算符,常用来做匹配或模糊匹配。 205 | '在模糊匹配的时候,有一些通配符能方便模糊匹配规则的书写 206 | "这是一个demo1" Like "*demo1" = True '*号表示匹配任意多个字符 207 | "这是一个demo2" Like "????demo2" = True '?号表示匹配任意单个字符 208 | "这是一个demo3" Like "*demo#" = True '#号表示匹配任意数字 209 | ``` 210 | 211 | ### 1.4 语句结构 212 | 213 | 程序通常都是顺序依次执行的。语句结构用来控制程序执行的步骤,一般有`选择`语句、`循环`语句。 214 | 215 | **选择** 216 | `选择`用来判断程序执行那一部分代码 217 | ```vba 218 | 'If...Then...End If 219 | 'If选择可以嵌套使用 220 | '常用的三种形式 221 | '普通模式 222 | If 10>3 Then 223 | 操作1'执行这一步 224 | End If 225 | 226 | '增加Else 227 | If 1>2 Then 228 | 操作1 229 | Else 230 | 操作2'执行这一步 231 | End If 232 | 233 | '嵌套If 234 | If 10>3 Then 235 | If 1>2 Then 236 | 操作1 237 | Else 238 | 操作2'执行这一步 239 | End If 240 | Else 241 | 操作3 242 | End If 243 | 244 | 'Select...Case..多选一 245 | Dim Length As Integer 246 | Length=10 247 | Select Length 248 | Case Is >=8 249 | 操作1 '执行这一步 250 | Case Is >20 251 | 操作2 252 | Case Else 253 | 操作3 254 | End Select 255 | ``` 256 | 257 | **循环** 258 | `循环`用来让程序重复执行某段代码 259 | ```vba 260 | 'For...Next循环 261 | 'For 循环变量 = 初始值 To 终值 Step 步长 262 | Dim i As Integer 263 | For i = 1 To 10 Step 2 '设定i从1到10,每次增加2,总共执行5次 264 | 操作1 '可以通过设定 Exit For 退出循环 265 | Next i 266 | 267 | 'For Each..循环,又称遍历 268 | 'For Each 变量 In 集合或数组 269 | Dim arr 270 | Dim i As Integer 271 | arr = Array(1,2,3,4,5) 272 | For Each i In arr '定义变量i,遍历arr数组 273 | 操作1 274 | Next i 275 | 276 | 'Do..While循环 277 | 'Do While 表达式 表达式为假时跳出循环 278 | Dim i As Integer 279 | i=1 280 | Do While i<5 '循环5次 281 | i=i+1 282 | Loop 283 | 284 | '将判断条件后置的Do..While 285 | Dim i As Integer 286 | i=1 287 | Do 288 | i=i+1 289 | Loop While i<5 '循环4次 290 | 291 | 'Do Until 直到..循环 292 | 'Do Until 表达式 表达式为真时跳出循环 293 | Dim i As Integer 294 | i=5 295 | Do Util i<1 296 | i=i-1 297 | Loop 298 | 299 | '后置的Do Until 300 | Dim i As Integer 301 | i=5 302 | Do 303 | i=i-1 304 | Loop Util i<1 305 | ``` 306 | 307 | `选择`和`循环`提供了多种实现同一目的的语句结构,他们都能实现同样的作用,差别一般是初始条件。还有书写的复杂度。正确的选择要使用的语句结构,代码逻辑上会更清楚,方便人的阅读。 308 | 309 | **简写** 310 | 311 | 在操作对象的属性时常常要先把对象调用路径都写出来,用`with`可以简化这一操作 312 | ```vba 313 | '简化前 314 | WorkSheets("表1").Range("A1").Font.Name="仿宋" 315 | WorkSheets("表1").Range("A1").Font.Size=12 316 | WorkSheets("表1").Range("A1").Font.ColorIndex=3 317 | 318 | '使用with 319 | With WorkSheets("表1").Range("A1").Font 320 | .Name = "仿宋" 321 | .Size = 12 322 | .ColorIndex =3 323 | End With 324 | ``` 325 | 326 | ### 1.5 过程和函数 327 | 328 | `Sub`和`Function`是VBA提供的两种封装体,利用宏录制器得到的就是`Sub`。 329 | 两者的区别不大,`Sub`不需要返回值,`Function`可以定义返回值和返回的类型。 330 | 331 | **Sub** 332 | ```vba 333 | [Private|Public] [Static] Sub 过程名([参数列表 [As 数据类型]]) 334 | [语句块] 335 | End Sub 336 | '[Private|Public]定义过程的作用范围 337 | '[Static]定义过程是否为静态 338 | '[参数列表]定义需要传入的参数 339 | ``` 340 | 调用`Sub`的方法有三种,使用`Call`、直接调用和`Application.Run` 341 | 342 | 举个栗子: 343 | ![Alt text](./1505555701907.png) 344 | 345 | **Function** 346 | 347 | vba内部提供了大量的函数,也可以通过`Function`来定义函数,实现个性化的需求。 348 | ```vba 349 | [Public|private] [Static] Function 函数名([参数列表 [As 数据类型]]) [As 数据类型] 350 | [语句块] 351 | [函数名=过程结果] 352 | End Function 353 | ``` 354 | 使用函数完成上面的栗子: 355 | ![Alt text](./1505556598033.png) 356 | 357 | **参数传递** 358 | 359 | 参数传递的方式有两种,引用和传值。 360 | 传值,只是将数据的内容给到函数,不会对数据本身进行修改。 361 | 引用,将数据本身传给函数,在函数内部对数据的修改将同样的影响到数据本身的内容。 362 | 363 | 参数定义时,使用`ByVal`关键字定义传值,子过程中对参数的修改不会影响到原有变量的内容。 364 | 默认情况下,过程是按引用方式传递参数的。在这个过程中对参数的修改会影响到原有的变量。 365 | 也可以使用`ByRef`关键字显示的声明按引用传参。 366 | ```vba 367 | Sub St1(ByVal n As Integer,ByRef range) 368 | ... 369 | End SUb 370 | ``` 371 | 372 | 373 | ### 1.6 补充 374 | 375 | - 在vba中使用 `'`进行代码注释 376 | - 在很长的语句中使用`_`来分割成多行 377 | - 在有很多嵌套判断中,代码的可读性会变得很差,一般讲需要返回的内容及时返回,减少嵌套 378 | - `Sub`中默认按引用传递参数,所以注意使用,一般不要对外面的变量进行修改,讲封装保留在内部 379 | 380 | 381 | - `Dim`和`Set`的区别  [参考](http://blog.csdn.net/nctu_to_prove_safety/article/details/53148962) 382 | 383 | ```vba 384 | 'vba中使用Dim设定变量类型,Set将对象引用赋值给变量 385 | 386 | '栗子 387 | '将Range对象赋值给变量rg 388 | Dim rg As Range '声明rg为Range对象 389 | Set rg = Range("A1") '设定rg为Range("A1")的引用,之后操作rg和操作Range("A1")一样了 390 | 391 | '如果不使用Set,下面的代码将报错 392 | Dim rg As Range 393 | rg = Range("A1") '这段代码将报错 394 | 395 | '在非显示声明rg的前提下,下面的代码将会得到不一样的结果 396 | rg = Range("A1") 'rg将会是Range("A1")的内容,rg的类型将会是一种基本类型,Integer/String等 397 | Set rg = Range("A1") '这种情况下,rg将会是Range对象 398 | ``` 399 | 400 | 401 | ### 1.7示例 402 | 403 | 举个排序的栗子,要对`A1:A20`的单元格区域进行排序,区域内的内容为1-100的随机整数,规则是大于50的倒序排列,小于50的正序排列。将结果显示在`B1:B20`的区域里。 404 | 405 | 在这个栗子中,首先定义一个`Sub`过程来随机生成`A1:A20`区域的内容。 406 | 代码如下: 407 | 408 | ![Alt text](./demo1.1.gif) 409 | 410 | ```vba 411 | '创建随机整数,并赋值 412 | Sub createRandom(times As Integer) 413 | Dim num As Integer 414 | Dim arr() As Integer 415 | ReDim arr(times) 416 | 417 | For num = 1 To times 418 | Randomize (1) '初始化随机数 419 | arr(num) = Rnd(1) * 10000 \ 100 'Rnd随机数函数生成0~1的浮点数 420 | '上面使用了运算符进行取整,也可以根据需求使用vba内部的取整函数达到同样的效果 421 | 'arr(num) = Int(Rnd(1) * 100) 422 | 'arr(num) = Round(Rnd(1) * 100) 423 | range("A" & num) = arr(num) 424 | Next num 425 | End Sub 426 | 427 | '自定义排序 428 | Function defSort(rgs) As Variant 429 | Dim arr() As Integer 430 | Dim total As Integer 431 | Dim rg 432 | Dim st As Integer '数组开始标记 433 | Dim ed As Integer '数组结束标记 434 | 435 | Debug.Print "rgs类型:"; TypeName(rgs) 436 | total = UBound(rgs) 437 | ReDim arr(total) 438 | st = 1 439 | ed = total 440 | 441 | '对数组分区 442 | For Each rg In rgs 443 | If rg > 50 Then 444 | arr(ed) = rg 445 | ed = ed - 1 446 | Else 447 | arr(st) = rg 448 | st = st + 1 449 | End If 450 | Next rg 451 | 452 | Dim i As Integer 453 | Dim j As Integer 454 | Dim tmp As Integer 455 | 456 | '冒泡排序 457 | For i = 1 To total 458 | For j = i To total 459 | If arr(i) > 50 And arr(j) > 50 Then '大于50的倒序排列 460 | If arr(i) < arr(j) Then 461 | tmp = arr(i) 462 | arr(i) = arr(j) 463 | arr(j) = tmp 464 | 465 | Debug.Print "大于50的"; i; j; tmp '程序运行过程中在立即窗口显示执行内容,用于调试程序 466 | End If 467 | ElseIf arr(i) <= 50 And arr(j) <= 50 Then '小于50的正序排列 468 | If arr(i) > arr(j) Then 469 | tmp = arr(i) 470 | arr(i) = arr(j) 471 | arr(j) = tmp 472 | 473 | Debug.Print "不大于50的"; i; j; tmp 474 | End If 475 | Else 476 | Exit For 477 | End If 478 | Next j 479 | Next i 480 | defSort = arr 481 | End Function 482 | 483 | 484 | '程序入口 485 | Sub main() 486 | Const SORT_NUM = 20 487 | Dim rgs 488 | Dim arr 489 | 490 | createRandom SORT_NUM '初始化待排序区域 491 | 492 | rgs = range("A1:A" & SORT_NUM) 493 | arr = defSort(rgs) 494 | 495 | '循环赋值 496 | For i = 1 To SORT_NUM 497 | range("B" & i) = arr(i) 498 | Next i 499 | End Sub 500 | ``` 501 | 502 | ## 0x02 VBA界面介绍 503 | 504 | ![Alt text](./1505749555407.png) 505 | 506 | 507 | ## 0x03 对象操作说明 508 | Excel中的每个单元格,工作簿都是可以操作的对象;可以对对象进行复制、粘贴、删除等,也可操作对象的各种属性,来控制其展示和行为。 509 | 510 | 在Excel中,对象有不同的层级关系: 511 | 512 | ![Alt text](./1505548045994.png) 513 | 514 | 实际上Excel中可操作的对象远不止这些,具体的可以参考 [Excel 对象模型](https://msdn.microsoft.com/zh-cn/library/office/ff194068.aspx) 515 | 516 | 类似于数组,将各种类型的对象封装到一块可以组成集合。 517 | 一个集合中调用对象的例子: 518 | ![Alt text](./1505548422147.png) 519 | 520 | 521 | 522 | ### 3.1对象简述 523 | 524 | 对象一般包含下面三种特性: 525 | 526 | - 属性 527 | 528 | 属性表示对象的特征,一般为名词。例如`Workbook.ActiveSheet`表示工作簿当前处于激活状态的工作表对象。 529 | - 方法 530 | 531 | 方法表示对象可用的操作或可执行的动作。例如`Workbook.Activate`表示激活工作簿的第一个工作表。 532 | - 事件 533 | 534 | 事件表示对象可以被触发的行为,一般触发后会执行对应的代码。例如`Workbook.Activate`表示工作簿中的工作表被激活了,然后执行对应的方法。 535 | 536 | 下面的代码就是在`Workbook`被打开时,将工作簿最大化的例子。 537 | 538 | ```vba 539 | Private Sub Workbook_Open() 540 | Application.WindowState = xlMaximized 541 | End Sub 542 | ``` 543 | 544 | 545 | vba中有很多对象,常用的对象如下: 546 | 547 | |对象|对象说明| 文档地址| 548 | |----|----|----| 549 | |Application|代表Excel应用程序|[文档](https://msdn.microsoft.com/zh-cn/library/ff194565.aspx)| 550 | |Workbook|代表Excel的工作簿|[文档](https://msdn.microsoft.com/zh-cn/library/ff835568.aspx)| 551 | |Worksheet|代表Excel的工作表|[文档](https://msdn.microsoft.com/zh-cn/library/ff194464.aspx)| 552 | |Range|代表Excel的单元格,可以是单个单元格或单元格区域|[文档](https://msdn.microsoft.com/zh-cn/library/office/ff838238.aspx)| 553 | 554 | 555 | ### 3.2 Application对象 556 | 557 | 558 | 559 | ### 3.3 Range对象 560 | ![Alt text](./1505548886377.png) 561 | 562 | ![Alt text](./1505549069568.png) 563 | 564 | 565 | ## 0x04 示例 566 | -------------------------------------------------------------------------------- /install.md: -------------------------------------------------------------------------------- 1 | ## 安装php 2 | 3 | ```bash 4 | #ubuntu安装Openssl 5 | sudo apt-get install -y openssl libssl-dev 6 | 7 | ./configure --prefix=/usr/local/php721 \ 8 | --enable-fpm \ 9 | --with-openssl \ 10 | --with-libxml-dir \ 11 | --with-mysqli \ 12 | --with-curl \ 13 | --enable-bcmath \ 14 | --enable-libxml \ 15 | --enable-pcntl \ 16 | --enable-sockets \ 17 | --enable-mbstring \ 18 | --with-pdo-mysql \ 19 | --with-pdo-sqlite 20 | 21 | sudo make && sudo make install 22 | ``` 23 | -------------------------------------------------------------------------------- /redis.md: -------------------------------------------------------------------------------- 1 | 2 | ## redis 支持的数据格式 3 | 4 | - 字符串:key-val形式,存储内容支持文本、整形和浮点,数值型的长度和机器位数有关,提供了直接对数值操作的命令 5 | - 列表:有序的列表,支持左右压入列表操作 6 | - 集合:去重的无序列表,支持对多个集合求交集、并集等操作 7 | - 散列:key-val的列表 8 | - 有序集合:每个设置了分值的集合,支持多个集合根据分值返回来计算交集、并集等操作 9 | 10 | ## 发布和订阅 11 | 12 | 13 | ## redis事务 14 | multi exec watch unwatch discard 15 | 16 | 17 | ## redis持久化 18 | --------------------------------------------------------------------------------