
- 启发语言
- Visual Basic,QuickBASIC
- 外文名
- Visual Basic for Applications
- 操作系统
- Microsoft Visual,Mac OSX
- 简 称
- VBA
- 发行时间
- 1993年
- 释 义
- Visual Basic的一种宏语言
- 语言属性
- 应用程序一种通用的自动化语言
- 中文名
- Visual Basic宏语言
- 功 能
- 扩展Windows的应用程式功能
- 具备功能时间
- 1994
-
vba
2013-04-08 14:26:25Erase arr(清空VBA数组) 在循环中,如果需要清空VBA数组,可以用Erase方法来实现. 该示例使用 Erase 语句重新初始化固定大小的数组中的元素,以及释放动态数组存储空间。 Dim NumArray(10) As Integer ' ...Erase arr(清空VBA数组)
在循环中,如果需要清空VBA数组,可以用Erase方法来实现.
该示例使用 Erase 语句重新初始化固定大小的数组中的元素,以及释放动态数组存储空间。
Dim NumArray(10) As Integer ' Integer 数组。
Dim StrVarArray(10) As String '变长的 String 数组。
Dim StrFixArray(10) As String * 10 '定长的 String 数组。
Dim VarArray(10) As Variant 'Variant 数组。
Dim DynamicArray() As Integer '动态数组。
ReDim DynamicArray(10) '分配存储空间。
Erase NumArray '将每个元素设为 0。
Erase StrVarArray '将每个元素设为 '零长度字符串 ("")。
Erase StrFixArray '将每个元素设为 0。
Erase VarArray '将每个元素设为 Empty。
Erase DynamicArray '释放数组所用内存。
VBA动态数组
VBA动态数组
偶尔用到VBA,发现在help中就有VB的简单的帮助,第一次用需要安装,程序会自动安装好。
关于动态数组在网上搜索得出的结论如下:
1. 用法
Dim sAry() As Variant
vba,vb,动态数组,帮助,excel
ReDim sAry(2) '定义成三个
ReDim Preserve sAry(4) '定义成五个
ReDim Preserve sAry(3) '定义成四个
Erase sAry '回收数组
2. 可能在有效区域内有效,跳出后就释放了,如果不放心,那么同上面使用Erase -
一小时搞定 简单VBA编程 Excel宏编程快速扫盲
2018-01-19 09:45:191. Excel VBA编辑界面 (进入路径: sheet名称 --> 鼠标右键菜单 --> 查看代码) 2. 输入代码方法: 在VBE编辑器的代码模块中输入VBA代码,通常有以下几种方法: ■手工键盘输入; ■使用...Excel宏编程可以快速完成批量表格操作:复制粘贴、数据过滤等,宏代码基于VB语言实现,有基础的编程经验就能快速阅读。下面是我的学习笔记。
1. Excel VBA编辑界面
(进入路径: sheet名称 --> 鼠标右键菜单 --> 查看代码)
2. 输入代码方法:
在VBE编辑器的代码模块中输入VBA代码,通常有以下几种方法:
■ 手工键盘输入;
■ 使用宏录制器,即选择菜单“工具——宏——录制新宏”命令,将所进行的操作自动录制成宏代码;
■ 复制/粘贴代码,即将现有的代码复制后,粘贴到相应的代码模块中;
■ 导入代码模块:文件-->导入文件 **不用的模块可以:文件-->移出模块
3. VB代码阅读扫盲
(1) 模块声明:
Sub sName() ... End Sub Sub xxxxx() XXXXXXXXX End Sub
(2) 变量声明:
Dim sPara As sType Dim para1, para2, para3 Dim para4 As workbook, para5 As String Dim G As Long
(3) 选择结构:
With ... End With If condition Then ... End If # 举个例子:遍历每个Sheet把表粘贴成一个大表的语句,使用For Next With End With语句 With Workbooks(1).ActiveSheet For G = 1 To Sheets.Count Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1) Next WbN = WbN & Chr(13) & Wb.Name Wb.Close False End With
(4) 循环结构
Do While condition ... Loop For i = 0 to 100 ... Next
(5) 输出Log:
MsgBox sString
案例解析:解析拷贝路径下所有Excel到一个工作表下的示例:
************************************************************************************************************************************
Sub 合并当前目录下所有工作簿的全部工作表() #模块名称 Dim MyPath, MyName, AWbName #变量声明 Dim Wb As workbook, WbN As String Dim G As Long Dim Num As Long Dim BOX As String Application.ScreenUpdating = False #停止屏幕刷新 MyPath = ActiveWorkbook.Path #获取当前工作文件路径 MyName = Dir(MyPath & "\" & "*.xls") #获取当前文件名(截取字符串) AWbName = ActiveWorkbook.Name #获取当前BookName Num = 0 #准备进入循环处理 Do While MyName <> "" #第一个循环体:遍历所有文件 终止条件是 文件名为空 If MyName <> AWbName Then #条件:文件名当前激活文件不同 Set Wb = Workbooks.Open(MyPath & "\" & MyName) # 设置工作表的名称(当前Sheet Name) Num = Num + 1 #计数用于输出 With Workbooks(1).ActiveSheet .Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4) #赋值语句:激活Sheet的A列最后一个单元格赋值为MyName去掉‘.xls’的部分 #Left 截取字符串 去掉了'.xls' #workbooks(n) 为取工作簿 的写法 #A65535(一个极大数)单元格向上,最后一个非空的单元格的行号 For G = 1 To Sheets.Count #嵌套循环体:遍历文件的所有Sheets Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1) #赋值所有内容到以结束内容空一行开始的表格中 Next #且套循环体结束 WbN = WbN & Chr(13) & Wb.Name # & 为合并字符串的符号 Wb.Close False #对于文件操作结束,关闭Excel文件 End With #退出第二个判断 End If #退出第一个判断 MyName = Dir #怎么拿到第二个bookName Loop #循环体结束 Range("B1").Select #选中B1 Application.ScreenUpdating = True #允许Excel屏幕刷新 MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示" End Sub
************************************************************************************************************************************
常用模块:
1. 把一个workBook的一块表格拷贝到另一个WorkBook中的一般化方法:
上面的代码中是一种简单的实现:拷贝所有内容到空行区域
需要将拷贝的内容和粘贴的位置控制更加精准控制:
拷贝指定位置到指定位置:
Workbooks("工作簿1.xls").Sheet1.Range("A1:C50").Copy ThisWorkbook.Sheet2.Range("A1")
2. 找到粘贴位置:
b=sheet2.[BI].end(xlToLeft).row+1 获取最后一次编辑的各自的列号! .Range("B65536").End(xlUp).Row + 2 最后一次编辑的格子的行号
A1 直接编辑
.Cells(nRowNo, nColNo)
...
实战案例分析:一个将多个相同格式表格合并生成横表的例子:
Sub 合并当前目录下所有工作簿的全部工作表() Dim MyPath, MyName, AWbName Dim Wb As Workbook, WbN As String Dim G As Long Dim Num As Long Dim BOX As String Dim HasTitil As Boolean Dim LastRange As String Dim CurRowNo As Long Application.ScreenUpdating = False MyPath = ActiveWorkbook.Path MyName = Dir(MyPath & "\" & "*.xls") AWbName = ActiveWorkbook.Name Num = 0 HasTitil = False With Workbooks(1).ActiveSheet .Cells(1, 2) = "Cor.Name" Do While MyName <> "" If MyName <> AWbName Then Set Wb = Workbooks.Open(MyPath & "\" & MyName) Num = Num + 1 .Cells(1, Num + 2) = Left(MyName, Len(MyName) - 4) If HasTitil <> True Then Wb.Sheets(1).Range("A4:B43").Copy .Cells(2, 1) Wb.Sheets(1).Range("E4:F43").Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1) Wb.Sheets(2).Range("A5:B73").Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1) Wb.Sheets(2).Range("E5:F73").Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1) Wb.Sheets(3).Range("A4:B32").Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1) Wb.Sheets(3).Range("E4:F32").Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1) Wb.Sheets(4).Range("A5:B100").Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1) HasTitil = True End If CurRowNo = 2 Wb.Sheets(1).Range("D4:D43").Copy .Cells(CurRowNo, Num + 2) CurRowNo = CurRowNo + 40 Wb.Sheets(1).Range("H4:H43").Copy .Cells(CurRowNo, Num + 2) CurRowNo = CurRowNo + 40 Wb.Sheets(2).Range("D5:D73").Copy .Cells(CurRowNo, Num + 2) CurRowNo = CurRowNo + 69 Wb.Sheets(2).Range("H5:H73").Copy .Cells(CurRowNo, Num + 2) CurRowNo = CurRowNo + 69 Wb.Sheets(3).Range("D4:D32").Copy .Cells(CurRowNo, Num + 2) CurRowNo = CurRowNo + 29 Wb.Sheets(3).Range("H4:H32").Copy .Cells(CurRowNo, Num + 2) CurRowNo = CurRowNo + 29 Wb.Sheets(4).Range("D5:D100").Copy .Cells(CurRowNo, Num + 2) Wb.Close False End If MyName = Dir Loop End With Range("B1").Select Application.ScreenUpdating = True End Sub
-
VBA
2007-08-04 13:20:00VBA一,概述 二, 宏 三,使用控件设计用户界面 四,使用VB编辑器 五,VBA语法基础 六,VBA对象模型 七,模块 八,测试与错误处理 九,VBA的安全性和保护工具 十,VBA程序的部署 十一,VBA高级应用 参见 一,概述VBA...VBA 一,概述 二, 宏 三,使用控件设计用户界面 四,使用VB编辑器 五,VBA语法基础 六,VBA对象模型 七,模块 八,测试与错误处理 九,VBA的安全性和保护工具 十,VBA程序的部署 十一,VBA高级应用 参见
一,概述
VBA(Visual Basic For Applications)是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。VBA是Visual Basic的一个子集,VBA不同于VB,原因是VBA要求有一个宿主应用程序才能远行,而且不能用于创建独立应用程序。而VB可用于创建独立的应用程序。VBA可使常用的过程或者进程自动化,可以创建自定义的解决方案,最适用于来定制已有的桌面应用程序。二, 宏
三,使用控件设计用户界面
四,使用VB编辑器
五,VBA语法基础
VBA语法基础六,VBA对象模型
VBA对象模型七,模块
数据类型 短前缀 长前缀 A r r a y a a r y B o o l e a n f b i n B y t e b b i t C u r r e n c y c c u r D a t e / Ti m e d t dtm/d a t D o u b l e d d b l I n t e g e r I i n t L o n g l l n g O b j e c t o o b j S i n g l e ? s n g S t r i n g s s t r Va r i a n t v v a r 八,测试与错误处理
属性 说明 Number 存储最后一个错误的数字ID。这是默认属性 Description 存储说明错误的有关信息 Source 包含发生了错误的对象名或应用程序名 HelpFile? 包含帮助文件的名字 HelpContextID? 包含错误号对应的帮助上下文ID LastDLLError? 包含最后一次调用DLL的系统错误代码 '添加一个模块创建一个函数,命名为HandleErrors
Function HandleErrors(iErrNum) As Integer
Select Case iAction
Case 5
'Invalid procedure call
MsgBox Error(iErrNum) & " Contact Help Desk."
iAction = 2
Case 7
'Out of memory
MsBox "Close all unnecessary applications. "
iAction = 1
Case 11
'Division by zero
MsgBox "Zero is not a valid value. "
iAction = 1
Case 48, 49,51
'Error in loading DLL
MsgBox iErrNum & "Contact Help Desk. "
iAction = 5
Case 57
'Device I/O error
MsgBox "Insert Disk in Drive A."
iAction = 1
Case Else
MsgBox "Unrecoverable Error. "
iAction = 5
End Select
ErrorHandler = iAction
End Function
'在另一模块的ErrorExample过程中使用HandleErrors函数
Private Sub ErrorExample ()
Dim sngValue As Single, sngDivideBy As Single, sngAnswer As Single
Dim iResponse As Integer
On Error GoTo ErrorZone
s n g Value = InputBox("Enter the number you wish to divide: ")
sngDivideBy = InputBox("Enter the number you wish to divide by: ")
sngAnswer = sngValue / sngDivideBy
MsgBox "The answer is " & sngAnswer
Exit Sub
E r r o r Z o n e :
'This Select statement uses the value returned
'from the HandleErrors function for its condition.
Select Case HandleErrors(Err)
'对应于五种处理方法:Resume/Resume Next/Resume “行”/退出该过程/结束整个应用程序。
Case 1
Resume
Case 2
Resume Next
'This procedure doesn't need case 3 which is resuming to a line.
Case 4
Exit Sub
Case 5
End
End Select
End Sub
九,VBA的安全性和保护工具
>Tools菜单上的Digital Signture(数字签名)命令>单击Choose(选择)指定数字证书。>Macro宏>Security安全性。可以指定Security LeveI?(安全级别)和Trusted Source(信任源)>Tools>Project 属性,写人密码锁定代码查看十,VBA程序的部署
十一,VBA高级应用
参见
-
VBA SPLIT函数详解
2019-01-31 13:25:26VBA编程是经常会用到字符串拆分函数SPLIT,用法也不复杂,但是大家对于这个函数的参数未必完全了解,下面结合示例讲解一下参数的用法。 SPLIT函数的语法格式如下: Split(expression, [ delimiter, [ limit, [ ...VBA编程是经常会用到字符串拆分函数
SPLIT
,用法也不复杂,但是大家对于这个函数的参数未必完全了解,下面结合示例讲解一下参数的用法。SPLIT
函数的语法格式如下:Split(expression, [ delimiter, [ limit, [ compare ]]])
参数 含义 express 需要拆分的字符串 delimiter 参数为拆分的分隔符,如果省略则使用空格做为分隔符 limit 指定返回字符串的数量 compare 指定拆分子字符串时的比较类型 先来看一个示例,现在需要拆分
Good good study day day up
为单个单词。Sub Demo1() Dim strString As String Dim varResult As Variant Dim arrResult() As String strString = "Good good study day day up" varResult = VBA.Split(strString) arrResult = VBA.Split(strString) End Sub
VBA.Split(strString)
省略delimiter
参数,则使用空格做为分隔符,拆分为6个单词字符串,在【本地窗口】中可以查看数组的值,如下图所示。
请注意变量声明语句,用于保存结果的数组,可以使用如下两种方式:Variant变量或者字符串数组,但是不可以声明为Variant数组。Dim varResult As Variant Dim arrResult() As String
一般情况下,都无须指定
LIMIT
参数,下面看一个使用LIMIT
参数的例子。对于一些国外地址如:888, Ocean Wind Rd, Markham, V4A
,需要拆分为888
,Ocean Wind Rd
和Markham, V4A
,而不是拆分为4段,此时就需要设置LIMIT
参数为3。Sub Demo2() Dim strString As String Dim arrResult() As String Dim i As Integer strString = "888, Ocean Wind Rd, Markham, V4A" arrResult = VBA.Split(strString, ",", 3) For i = LBound(arrResult) To UBound(arrResult) Debug.Print Trim(arrResult(i)) Next i End Sub
接下来看一下如何使用
compare
参数,下面示例代码中设置为vbTextCompare
,即执行文本比较,也就是说忽略字符大小写区别(S和s都可以作为分界符)。如下代码结果为包含4个元素的字符串数组(AAA
,BBB
,CCC
和DDD
)。Sub Demo3() Dim strString As String Dim arrResult() As String Dim i As Integer strString = "AAAsBBBSCCCsDDD" arrResult = VBA.Split(strString, delimiter:="s", compare:=vbTextCompare) For i = LBound(arrResult) To UBound(arrResult) Debug.Print Trim(arrResult(i)) Next i End Sub
如果将
compare
参数设置为vbBinaryCompare
,那么结果就会不同了。Sub Demo4() Dim strString As String Dim arrResult() As String Dim i As Integer strString = "AAAsBBBSCCCsDDD" arrResult = VBA.Split(strString, delimiter:="s", compare:=vbBinaryCompare) For i = LBound(arrResult) To UBound(arrResult) Debug.Print Trim(arrResult(i)) Next i End Sub
字符串被拆分为三段,
BBB
和CCC
之间的S
不再做为分界符。AAA
BBBSCCC
DDD通过这个讲解,希望大家完全明白了
SPLIT
函数的用法。 -
一键解决WPS中的VBA支持库安装问题
2019-06-06 11:01:28解决 WPS中的VBA问题 在网上看了好多基本都是垃圾文件 ,用不了 话不多说 ,自己亲身经历 直接用 链接:https://pan.baidu.com/s/1uma1TOQy_wdDbG--HH-VWg 提取码:j4r2 完美 ... -
VBA帮助VBA帮助
2009-02-05 14:54:46VBA帮助。很有用的东东啊,欢迎大家下载啊。快快快。VBA帮助VBA帮助VBA帮助VBA帮助VBA帮助 -
MS Office VBA(包括Excel VBA、Word VBA、Access VBA等)资料下载汇总
2019-07-17 21:10:15VBA(Visual Basic for Application): ... VBA 简明教程 Office VBA编程手册合集大全 (CHM) Microsoft Office VBA 语言参考 Microsoft Office 2007 System VBA 编程 Office VBA 编程高手 VBA 傻瓜书 第五版 Excel VBA... -
【VBA研究】VBA编程产生不重复随机数
2014-08-08 09:41:08VBA编程实现不重复随机数输出。VBA里的随机函数是RND,在工作表中随机函数是RAND,一字之差,可要记好了。RND取值范围是[0,1),意思是0和1之间的一个随机数,包含0,但不包含1。 1、用法 语法:Rnd[(number)] 如果... -
VBA 7.1 FOR WPS 2019
2018-10-30 13:53:38适用于安装 WPS 2019 版本的 缺少 VBA 模块的 亲测可用,内含 VBA 7.1 安装顺序1、2、3、4按照顺序安装; -
VBA 禁止修改VBA代码,禁止查看VBA代码
2020-01-30 20:42:20如果是加密整个 workbook,就是wb 无法打开,保护表和VBA 如果是只想保护某个worksheet的修改,可以选择保护 worksheet ,可设置单独密码 如果是想保护workbook结构,可设置单独密码 如果是想单独保护VBA不能... -
VBA-vba与运算符
2018-11-09 19:26:08声明:笔记来源于我要自学网-《Excel VBA基础教程》-授课讲师:曾贤志 定义:运算符是代表VBA某种运算功能的符号 赋值运算符:= 数学运算符:&(字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/... -
VBA入门
2018-08-13 23:37:491.VBA代码:VBA的代码组成了VBA程序。 2.过程:用VBA代码把完成一个任务的所有操作保存起来就是一个VBA过程。 3.模块:是保存过程的地方,一个模块可以有多个过程。 4.对象:就是代码操作和控制的东西。 ... -
EXCEL VBA编程入门二:什么是VBA?什么是EXCEL VBA?
2019-08-08 16:08:26VBA是Visual Basic for Application的简写,是一种由微软开发的自动化语言。 主要用于控制Office应用程序 EXCEL VBA就是利用VBA控制EXCEL应用程序 VBA与VB的区别? VBA与VB的代码编写时类似的 其不同之处在于 ... -
EXCEL VBA编程进阶
2016-02-06 11:14:19数组:为了提高VBA的运算速度,特别讲解了数组。以及他的相关应用 图形:这是精彩的部分。讲了图形的各种批量插入方式。通过坐标自动绘制图形。批量制作员工卡等实例。很多实例在工作上都能用到。 -
VBA教程
2018-06-28 14:34:39https://www.yiibai.com/vba/ -
vba编程
2018-08-07 18:05:18VBA 宏编程 相关文件在连接 https://download.csdn.net/download/wei198621/10589098 一 前期安装条件 解压13+Vba6.3+for+WPS+.zip 文件夹内容,执行安装 将后缀从pptx改为pptm,这样可以运行宏 ... -
VBA事件
2018-12-08 22:45:32在VBA中,要手动更改单元格或单元格值范围时,可以触发事件驱动的编程。 更改事件可能会使事情变得更容易,但您可以非常快速地结束一个完整的格式化页面。VBA中有两种事件 - 工作表事件 工作簿事件 工作表事件 ... -
VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹)
2017-07-06 16:14:31在VBA中经常要用到文件对话框来进行打开文件、选择文件或选择文件夹的操作。用Microsoft Office提供的文件对话框比较方便。用法如下Application.FileDialog(fileDialogType)fileDialogType MsoFileDialogType 类型... -
VBA字典(详解,示例)
2019-05-03 17:14:36字典主要作用:条件计数、条件求和、去重、匹配。 本篇主要介绍了VBA字典以上使用方法及注意事项。 -
Excel之VBA简单宏编程
2018-06-05 01:26:32Excel之VBA简单宏编程 excel是一款很经典的数据分析的工具,里面包含了很多内置函数,但实际情况有时却复杂得多,而excel的宏编程提供了自定义函数的功能,正好有老师需要帮忙做一些数据分析,就学习了一下,下面是... -
VBA 生成二维码
2016-02-18 09:01:48vba代码生成二维码,需要改写代码,生成的二维码比较大 -
Visual Basic for Applications(VBA)安装包
2012-04-10 21:41:04Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic Script。 -
【Excel VBA】在VBA中调用函数
2019-03-23 11:10:15在VBA代码中直接调用计算数据 EXCEL的表函数也可以直接在VBA中直接调用执行,具体调用格式如下: 调用方法1:变量对象= Application.WorksheetFunction.表函数(表函数参数) 实例:Range("d8") = Application.... -
VBA注释
2017-11-23 17:24:14VBA注释 注释是用来记录程序逻辑和用户信息与其他程序员可以在相同的代码无缝协同工作打好基础。 它可包括开发,修改的信息,例如,它也可以包括引入作为逻辑。注释被解释执行时忽略。 在VBA中的注释用两种方法来... -
Excel VBA开发自动发送邮件
2017-04-27 17:37:33若没有做如下操作设置,则Excel VBA调用Outlook自动发送邮件时提示如下 2.1 Outlook->工具->信任中心 2.2 编程访问->选中”从不向我发出可疑活动警告(不推荐)“,注意:建议使用Excel VBA自动发送... -
VBA基础知识整理
2017-12-16 17:05:54最近由于项目的需要,需要在Excel自定义一些函数,来完成特殊的处理,为了完成工作,就囫囵吞枣的写了一些代码,现在闲暇下来,就好好的学习一下,VBA的基础知识。1.变量 1.Dim <<variable_name>> As ... -
VBA6帮助手册,VBA6MSDN文档
2011-01-26 10:59:54VBA6帮助手册,VBA6MSDN文档 chm文档,语言为中文