![](https://img-blog.csdnimg.cn/20200101213646247.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
VBA基础知识
文章平均质量分 54
VBA学习
奔跑的犀牛先生
自学代码的中年大叔,人不痴狂枉少年
展开
-
EXCEL2019版,字符串合并的5个公式,尤其textjoin() 和 concat()
2019新增了 concat() 和 textjoin() 等新字符串合并公式(1) &A1&A2不支持选择一个区域(2) concatenate()concatenate(A1,B1,C1,) 只能逗号连接各个字符串不支持选择一个区域可以认为 concatenate() 等价于& ,就是大号的 &(3)PHONETIC()可以支持,选择一个区域但是只能连接字符串(4)co...原创 2021-11-29 17:48:19 · 3934 阅读 · 0 评论 -
VBA的goto语句,goto 和 gosub 的区别
Sub test40() I = 1 GoTo lineA I = 99 Debug.Print "i=" & I Exit SublineA: Debug.Print "i=" & I End SubSub test41() I = 1 GoTo lineA I = 99 Debug.Print "i=" & I' Exit SublineA: Debug.Print "i=" & I ...原创 2021-11-05 18:09:33 · 2195 阅读 · 0 评论 -
VBA里不能用百分数%,以及%代表得整型integer数据类型
1 EXCEL可以用 百分数来直接运算,但是VBA里不允许2VBA里无法用%这种数据类型来计算VBA里没有 %百分数这种数据类型VBA里无法用%这种数据类型,来计算如果在VBE里输入 5% 会自动变成 5VBA里最多可以像文本一样显示百分数,比如 text(a,"0.00%")3 %在VBA里是什么意思呢表示一种数据类型,integer4 声明数据类型得2中方法,语法不同正确 dim a% 错误 dim a as % 错误 d...原创 2021-10-11 18:16:08 · 3520 阅读 · 0 评论 -
VBA数值溢出问题 int才能支持65535
EXCEL和VBA里默认的数值一般是int尤其是VBA里int是很不够用的int的数值范围很小,只支持 65535 ,稍微大一点的计算,可能就报错了,会显示 “数值溢出”处理方法clng(500000)randmizeclng(1+(500000-1)*RND)...原创 2021-09-03 11:36:51 · 2143 阅读 · 0 评论 -
VBA的坑,坑2,VBA给多个变量赋值,千万不要这样赋值 n1 = n2 = n3 = 1,错误!
1连续声明多个变量的作用域,这样写没问题Private a1, a2, a3, a4a, a50Private s1, s2, s32 如果是,给多个变量赋值,千万别这样写 :n1 = n2 = n3这样写,一个变量的赋值都不会对,全是错误的Sub te1()'坑1, 还有赋值不能多个,只有 private 等范围声明是可以这样的'ee1 = ee2 = ee3 = 0 '坑?n1 = n2 = n3 = 1Debug.Print "n1=" &...原创 2021-09-02 14:38:01 · 1913 阅读 · 0 评论 -
VBA的坑,坑1,注意不要写这样的表达式: if 1 < a < 3 是错误的!要写成if a>1 and a<3 这样!
坑爹判断式,不要再VBA里这样写 1 < a < 3比如下面例子的if1 < 5 < 3 居然是对的。。。估计是判断了 1<5Sub tt2()Call tt3(5)Call tt4(5)End SubSub tt3(a)If a > 1 And a < 3 Then Debug.Print "a符合"Else Debug.Print "a不符合"End IfEnd SubSub tt4(a)If...原创 2021-09-02 11:33:49 · 247 阅读 · 0 评论 -
【原创】VBA学习笔记(316)VBA编程基础知识扫盲,只适合纯自学新手看
1 基础概念理解不透导致的问题1:语句不完整问题1.1 语句不完整导致的报错新手比如我在VBE里写了点东西,很多时候报错,是因为语句不完整导致的问题 比如写下面这些语句,点运行VBE会报错,为什么? Range(“a1:a8”) a 1+21.2 只有这样写才不报错,因为这样的一行都是完整的“一行语句”arr1= Range(“a1:a8”) Debug....原创 2019-12-24 18:36:24 · 2297 阅读 · 0 评论 -
【原创】VBA学习笔记(315)VBA 程序之间的调用,执行,关闭控制等基础
1 执行其他过程sub call sub()2 调用其他函数(VBA若只调用函数,并不会直接返回函数返回值)func1 call function()3 调用其他函数并使用函数返回值Debug.Print func1(1, 3) a = func1(100, 99)4 如何关闭其他sub,用传递参数的方法test12 1 5如何关闭...原创 2019-12-31 22:25:18 · 1526 阅读 · 0 评论 -
【原创】VBA学习笔记(314)VBA 数组基础知识3,空值问题,index停留在+1的地方,
1 数组里中有空值,会一直存在着数组不能直接删除其中的方式 数组里中有空值,会一直存在着,可以把数组某个值置空可以利用这一点只用数组前一截 数组的后面多一些空值,不咋影响,因为截断用前面的,没啥影响,可以利用这一点,只用数组前一截 但是数组中间有空值还是挺恶心的 这样redim 去重数组时可以随意大一点了Sub test_arr1()arr1 = Array(1, 3, ...原创 2020-01-10 16:07:51 · 1885 阅读 · 1 评论 -
【原创】VBA学习笔记(313)VBA字典相关:遍历字典,用key查item, 用item查key的方法
1 字典的遍历方法即使是后期绑定,也可以用 for each i in dict1.keys() '这里用到的 dict1.keys() 但不是 dict1.keys(i) 是可以的Sub test_dict11()Dim dict1 As ObjectSet dict1 = CreateObject("scripting.dictionary")dict1....原创 2020-01-09 21:28:39 · 23996 阅读 · 2 评论 -
【原创】VBA学习笔记(312)VBA生成字典的多种方法,和最优方法
1 生成字典多种方法1.1 add方法生成字典逐个add 循环,add,需要判断是否重复1.2 整体添加keys() items() ,整体生成数组(用数组等)循环赋值给 keys() items()1.3 循环赋值生成数组的方法循环dict5(I) = ""2 生成字典最合适的方法:循环赋值生成数组的方法--因为足够灵活,容错率高循环dict5(I) =...原创 2020-01-10 14:28:51 · 2819 阅读 · 0 评论 -
【原创】VBA学习笔记(311)VBA的range() 是特例可以当做变量/对象,但range()如果是obejct不能被直接当成数组
1 区分好VBA中的不同数据类型:1.1 VBA对象,Excel--application对象,变量,数组VBA中vb的对象: object fso scripting.dictionaryVBA中A(application=excel)的对象:cells() range() sheet() workbook() 等等VBA中的数据结构: 常量 变量 数...原创 2019-12-27 17:12:22 · 2738 阅读 · 0 评论 -
【原创】VBA学习笔记(310)VBA的一维数组相关的 工作表函数,方法等等
1 数组相关的工作表函数,方法工作表函数(都是只对一维数组生效)application.max() application.min() application.large() application.small() application.count() application.counta()代码1Sub test110()arr1 = Array(1, 2, 3,...原创 2019-12-24 20:33:02 · 664 阅读 · 0 评论 -
【原创】VBA学习笔记(309)VBA 时间相关函数和方法整理
1 时间相关的基础用法1.1 让程序等待xx秒/分/时timevalue("") '需要加引号 错误语法: application.wait(now+timevalue(00:00:01)) 错误语法: application.wait(now+timevalue("00:00:01"))Sub maomi1()Debug.Print "point 1"t = Timer...原创 2019-12-27 11:59:16 · 5431 阅读 · 0 评论 -
【原创】VBA学习笔记(308)VBA基础知识关于行号,列号等,分清楚 .row 和 .rows 和 .rows.count
1 为什么连,行号,列号之类的都要重新拿出来说很多基础知识,我以为我懂 但其实我一用就发现各种问题,其实我不懂 现在想想,王阳明先生的知行合一,真有道理,知而不能行,就是不知。2 如何获得行号,列号单行单列的 行号,列号 .row .column 范围内的 行号,列号 集合 range().rows 范围内的 行号,列号 集合的数量 rang...原创 2019-12-27 08:56:44 · 8834 阅读 · 1 评论 -
【原创】VBA学习笔记(307)VBA的一些细节:比如 cells() 可随意,但是 range() 赋值需要range().value
1 range赋值,有时候注意些完整,加range().valuecells() 赋值 可以 cells()=cells() range() 赋值 不可以 range()=range() Range("b5:d7") = Range("b1:d3").Value 才可以Sub test112()Range("f1:h3") = ...原创 2019-12-27 13:58:14 · 5788 阅读 · 0 评论 -
【原创】VBA学习笔记(306)VBA中关于 exit 的用法
1 exit 用法的简要总结1.1 具体用法exit do ' 用在do loop 循环里 exit for ' 用在 for next 循环里 exit sub ' 用在sub里 exit function ' 用在function里 exit propp...原创 2019-12-30 18:58:53 · 5633 阅读 · 1 评论 -
【原创】VBA学习笔记(305)vba中end的用法
endend subend functionend type"在End Sub、End Function或End属性后面只能出现注释"提示。Public Type RECTLeft As LongTop As LongRoght As LongBottom As LongEnd Type...原创 2019-12-31 14:40:31 · 5605 阅读 · 0 评论 -
【原创】VBA学习笔记(304)VBA数组array基础知识(2):数组更适合整体处理,字典更适合操作每个元素
1 数组更像1个整体,而字典更像1个集合适合逐个处理。 设计数组和字典的人,目的性很不同 理解array 和 dictionary 两者的定位有很多差别 1.1 数组的特点1.1.1数组方便的操作----数组最好用的方法是:循环数组整体赋值 arr1=range() (动态)数组整体改变赋值 取得数组的上下限制,lbound() 和 uboun...原创 2020-01-08 16:42:32 · 2392 阅读 · 0 评论 -
【原创】VBA学习笔记(303)VBA 要善用各种VBE 代码窗口 自带的帮助系统
1VBE编辑器代码窗口,VBE如果会自动将首字母大写,表示通过了基本的语法检查如果你写完代码后,某些地方VBE没有首字母自动帮你大写,则你需要注意了 下面例子 但也不是绝对,有时候这样也没问题 2 如果输入的是对象,接着输入. 后面会出现可用的方法和属性(对象的成员列表) 自动显示.之后的 对象的成员列表,属性,方法3 +- =等运算符两...原创 2020-01-06 11:42:36 · 523 阅读 · 0 评论 -
【原创】VBA学习笔记(302)VBA的变量的作用范围 与 生命周期
sub内的代码,声明周期也是过程级,应该不影响其他吧Application.DisplayAlerts = False 这个声明的生命周期也应该在sub内,有啥必要非在sub结尾前关闭掉?多此一举把1变量的声明范围(作用范围)1.1 跨模块级变量(模块内,过程外)public1.2 模块级变量(模块内,过程外)public dim private1...原创 2020-01-01 01:11:37 · 2010 阅读 · 0 评论 -
【原创】VBA学习笔记(301)VBA 用application.index() 取2维数组里的某1列,某1行
1 函数用法application.index() 用法range() 从EXCEL拿出来的必然都是2维数组 arr1=range("a1:c5") '取出来的是一个2维数组 arr2=range("a1:d1") '取出来的看着是1行,但不是一维数组,实际是一个2维数组 arr3=range("a1:a10") '取出来的看着是1列,但不是一维数组,实际是...原创 2019-12-24 20:23:10 · 23550 阅读 · 0 评论 -
【原创】VBA学习笔记(300)VBA 很多工作表函数都只对1维数组有用,用2维数组上经常报错!
1 VBA 很多工作表函数,都只对一维数组有用,用2维数组上经常报错很多工作表函数都不能对二维数组生效 有时候连错误值都不返回,直接代码中断)2 举例1:join() 和 split() 函数 只对生效2.1比如 join() 和 split() 函数,只适合一维数组值得注意的是:split和join只能对一维数组进行操作Sub try001()str1 = "1,2...原创 2019-12-23 11:09:27 · 820 阅读 · 1 评论 -
【原创】VBA学习笔记(29)VBA里的转义字符
1 "" 有转义规则""" 相当于 " """" 相当于 " "内部的"" 内部其他" 显示结果为 内部的"内部其他2 符号常数生效chr(32) "空格 chr(34) "双引号 chr(39) "单引号 chr(10) "换行 等同 vblf3 \n 等 asc2码的转义好像不生效 ,很奇怪?S...原创 2019-05-29 07:48:38 · 17800 阅读 · 0 评论 -
【原创】VBA学习笔记(28)VBA中的宏
1宏和VBA的相同之处和不同之处广义的讲,宏就是VBA 狭义的讲,宏是录制的部分操作代码(只能录制非循环的部分,也不能包含判断),然后自动执行/多次执行(也不是循环执行)2宏安全性运行xlsm前,需要先设置安全性3 宏的执行录制宏 执行宏 添加宏: 图片指定宏 / 各种控件指定宏4宏(sub,function)起名要求宏的名称 首字母不...原创 2019-05-17 08:49:21 · 639 阅读 · 0 评论 -
【原创】VBA学习笔记(27)VBA里的过程,函数,变量的作用域(生效范围/作用范围)
一 谁的作用范围?不同对象的作用范围完全不是一回事,不要混淆比如 sub 和 sub里的变量a 作用范围不是一回事public sub sub1()dim aend sub二 sub 和 function的作用范围2.1 语法public sub sub_name() private sub sub_name() static sub sub_na...原创 2019-05-16 15:50:06 · 2089 阅读 · 2 评论 -
【原创】VBA学习笔记(26)VBA里的各种默认初值
1 基础概念:默认值只是缺省时的 备选值而已初值 <> 默认值 默认初值,只是不赋值时的默认值而已2 VBA里变量可以不赋值,直接可以先进入表达式运算,是因为有默认值2.1 变量一般变量默认值为""2.2 数组数组坐标 一般数组默认需要从0开始,注意不要 造成下标越界等 比如arr1= array() 默认从0开始...原创 2019-05-16 09:36:46 · 2723 阅读 · 0 评论 -
【原创】VBA学习笔记(25)sub和function 调用方法
1 sub的三种调用方式直接调用 sub名 call sub名 Application.Run sub名 2 sub /function 调用时需要注意不能让sub名赋值,但是 functionname可以的 没有赋值的变量可以直接表达式运算,但默认为0值 Public a, b这种语句不能写在sub内,只能放在模块脚本最前面,只能定义,赋值只能在内部...原创 2019-05-14 18:42:42 · 23462 阅读 · 0 评论 -
【整理】VBA学习笔记(24)工作表函数和VBA,对EXCEL对象的不同引用写法
1 工作表函数 对 EXCEL对象的引用语法1.1 同一个sheet里在同一个sheet里 cell range row column 层面,一般用冒号:如SUM(A:A) 引用 平行的多个对象,一般用逗号,如=SUM(A1,B1,G1)1.2 跨同1个workbooks的sheets跨sheet,用 sheet名+感叹号 这里的sheet名,就是sheet的直接...原创 2019-05-07 14:35:31 · 1433 阅读 · 0 评论 -
【整理】VBA学习笔记(23)VBA的一些潜规则和备忘
编程语言都是时间杀手,慢慢学慢慢练用中练吧1 VBE编辑器,有时候会有些问题1 VBE编辑器,有时候出现一些问题,比如需要重新关闭一下VBE编辑器再打开才能好 2 运行时错误,报错有时候会报错不同行的错。2 宏的作用2.1 宏的用处有些代码关键字和参数,用宏录一下,可以看到一些 语法写法 录一些不熟悉的操作,看看语法 初学时可以用下2.2 宏的局限性...原创 2019-05-07 11:13:24 · 5489 阅读 · 2 评论 -
【整理】VBA学习笔记(22)VBA常用符号常数:如chr(10) chr(13) vbcrlf 和ASCII码
1 VBA和EXCEL使用符号常数有语法差别1.1 语法差别比如EXCEL里使用char(10) VBA中只能写成 chr(10) VBA的语法错误,VBE没有把第1个首字母大写就应该看出来 char(13) 是错误的1.2 举例: chr(32) 类空格MsgBox "hello" & Chr(32) & "world" & Chr(3...原创 2019-04-24 15:00:28 · 14866 阅读 · 2 评论 -
【原创】VBA学习笔记(21) VBA函数,appliacation函数,工作表函数,三种同名函数对比举例(3个例子)
1 VBA里可以使用的3类函数,都是独立的VBA函数 application函数 application.worksheetfunction函数VBA函数,appliacation函数,工作表函数,三种同名函数完全独立 EXCEL工作表函数(默认都是只能针对一个cell做作用的! 并且一般是cell.value)1.1 比如 match函数vba.matc...原创 2019-04-24 14:42:03 · 2129 阅读 · 0 评论 -
【原创】VBA学习笔记(20) range().end() 或 cells().end() 的用法
1 Range().End() 或cells().End() 属性 1.1 单元格的end属性两种写法都可以 range().end() cells().end() 1.2 返回的内容返回一个 Range 对象 该对象代表包含源区域的区域尾端的单元格。 等同于按键 (End+向上键、End+向下键、End+向左键、End+向右键) 或等同于CTR...原创 2019-04-15 08:19:31 · 17609 阅读 · 3 评论 -
【原创】VBA学习笔记(19)VBA的函数/过程3种调用方式
1 VBA里sub和function的3种调用方式1.1 调用函数的多种写法function() call function()1.2 执行过程的多种写法sub 1个参数 sub 参数1 参数2(错误) call sub (1个参数) call sub (参数1,参数2) appcaiton.run sub1.3 application.run...原创 2019-04-09 07:34:25 · 10946 阅读 · 0 评论 -
【原创】VBA学习笔记(18) VBA的自定义函数 / 过程,到底能不能改变EXCEL单元格内容?
一 自定义函数1.1 什么是EXCEL 的自定义函数VBA里用户自己写了一些函数,这些非 EXCEL 和 VBA 内置的函数,也可以在EXCEL直接使用 VBA的函数在 EXCEL里如何使用? 单元格里输入 = 自定义函数名 即可1.2 明确概念: 函数错误 Vs 函数返回值错误函数错误:是 语法错误,允许错误,逻辑错误等等 函数返回值错误:是 函数调用后,返回值报错了...原创 2019-04-09 07:32:42 · 5296 阅读 · 0 评论 -
【原创】VBA学习笔记(17)VBA事件程序
1 VBA内的3种程序代码过程(宏): 过程是可被执行的 ( 手动运行) 函数: 函数正常不会执行,只在被其他程序调用时才执行。 事件: 事件是被动触发的,满足触发条件后,会自动运行2 事件2.1 事件的基本构成事件程序,必须有对象,挂在对象下 只有在对象窗口内,选择了这个对象,后面的 过程列表中才会出现这个对象的各种事件!! 每个对象下,可能有多个不同的事件,...原创 2019-04-09 07:31:49 · 684 阅读 · 0 评论 -
【原创】VBA学习笔记(15)VBA的参数传递:ByVal 和 ByRef 的区别,VBA默认按byRef传递
1 参数传递时的 byVal 和 byRef 区别的简单总结只有变量有这个问题,常量怎么传递本身也不改变byVal 只是传递值,其他引用到这个参数的 过程或函数,只操作此参数的值,而不改变这个参数本身 更安全byRef 引用传递,传递参数的地址,其他引用到这个参数的 过程或函数,操作此参数的值,也同时会改变这个参数本身 参数默认是byRef,要特别注意 其实觉得默认是b...原创 2019-04-03 22:08:24 · 13903 阅读 · 3 评论 -
【原创】VBA学习笔记(16)VBA的变量的声明, 作用域(生效范围),赋值(默认值)
想整理下VBA变量的3个问题变量的声明 变量的赋值 变量的默认值(如果没有赋值,那么默认值就是初值)1 变量的作用域(生效范围)1.1 变量的作用域跨工作簿变量? 可以跨多个工作簿生效,有这样的变量吗?跨模块变量: 用public 在模块的第1个过程之前声明的变量 (public不能用在过程内) 可以在多个模块内都生效 public 声明的变量,丢失有两种...原创 2019-04-08 22:21:09 · 8075 阅读 · 0 评论 -
【原创】VBA学习笔记(14)VBA的分支判断语句(条件语句)
一 理解分支条件语句1.1 VBA里的3种语句顺序执行的block 分支判断语句(典型的就是指if)--- 按顺序判断,但不按顺序执行,只选择性执行,选择执行1个分支 循环语句1.2 理解分支条件语句block内部,也是从上往下执行分支语句是有序的 是从上往下执行的 所以很多判断逻辑,都得基于这个设计基础考虑1.3 多层条件分支语句的嵌套(先小后大)第1层(...原创 2019-04-02 09:31:34 · 2338 阅读 · 0 评论 -
【原创】VBA学习笔记(13)VBA的字典 dictionary
1字典 dictionary (key-item形式)1.1字典的前期绑定首先需要,先加载库文件 工具--添加-- scrrun.dll,否则无法前期绑定 参考方法:http://www.360doc.com/content/19/0629/17/30583536_845611094.shtml 先点 工具--引用---浏览 找到scrull.dll 然后在 工具...原创 2019-04-02 09:27:34 · 3032 阅读 · 1 评论