首页 > 软件 > vba编程代码

vba编程代码

软件 2023-10-13

excel vba常用代码

Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。[1]

数据类型

基本数据类型

即Primary Type Data,下述列表的括号内为字节数:

  • Byte(1):无符号数类型,取值范围0-255

  • Boolean(2)

  • Integer(2)

  • Long(4)

  • Single(4)

  • Double(8)

  • Currency(8)

  • Decimal(14)

  • Date(8)

  • String

  • Object(4)

  • Variant(根据分配确定)[2]

  • 自定义的数据类型

    相当于C语言的struct,例如:[2]

    Type 自定义类型名 元素名 As 类型 … [元素名 As 类型] End Type

    数组

  • Option Base 0 :数组索引值从0开始[2]

  • Option Base 1 :数组索引值从1开始

  • Dim MyArray(10) :声明一个数组变量,10是最大的可用的数组索引值

  • MyArray(5) = 101 :给数组的元素赋值

  • Dim Data(10,5) :声明一个二维数组变量

  • Data(1,1) = "A001" :给数组元素赋值

  • Dim cArr(-11 To 20, 1 To 3) As String :声明一个数组,定义数组索引值的上下界

  • Dim dArr() As String :声明动态数组

  • ReDim dArr(0 To 5, 1 To 2) :改变动态数组的尺寸默认把原数据清除。如果保留原来的数据,必须加上参数

  • Preserve:使用Preserve参数时只能改变最后一位的大小

  • If UBound(vTemp) = -1 Then:判断数组变量vTemp是否为空数组

  • End If Erase MyArrar, Data Erase语句清除数组元素,释放变量占用的空间[2]

  • 常量

    编辑

    系统定义常量

    系统定义常量有3个:True、False和Null。[4]

    固有常量

    固有常量是编程时引用的对象库定义的常量。所有固有常量都可以在宏或VBA代码中使用。通常,固有常量通过前两个字母来指明定义该常量。来自VB库的常量则以“vb”开头。来自Access的常量以“ac”开头。可以使用对象浏览器来查看所有对象库中的固有常量列表。[4]

    在VBA中,常量的数据类型有整型、长整型、单精度型、双精度型、字节型、货币型、字符型、日期型和逻辑型。一个整型数据就是一个整型常量,一个长整型数据就是一个长整型常量。例如,12%、-1%是整型常量,32768&、10000000&是长整型常量,-2.5 1、3.14是单精度实型常量,3.1415926#是双精度实型常量,China、Shanghai是字符型常量,#07/13/2001 11:45PM#是日期常量,由符号 “ # ” 将字符括起来。[4]

    符号常量

    可以自行定义的常量即符号常量,必须先定义,后使用。可见,需要声明的常量都是符号常量。[4]

    基本语法格式:

    1
  • [Publicr/Private]Const常量名[As类型]=表达式
  • 如:Global Const符号常量名称 = 常量值[4]

    语句功能:

    定义一个符号常量,并将指定表达式的值赋给符号常量。[4]

    语句说明如下:[4]

    1)“常量名”指定符号常量的名字。符号常量名可以由字母、数字和下画线组成,但只能以字母开头,不能含有空格。[4]

    2)“表达式”指定符号常量的值。该表达式通常由数值型、字符型、逻辑型或日期型数据以及各种运算符组成,但在表达式中不能出现变量和函数。[4]

    3) public用来表示这个常量的作用范围是整个数据库的所有模块。[4]

    4) private则表示这个常量只在使用该声明常量语句的模块中起作用。[4]

    说明:

    1)除用户定义的符号常量外,VBA还提供了许多符号常量,我们可以直接使用。[4]

    2)对数码比较长,并且在程序中多次使用的常量,通常使用符号常量代替。运行程序时,系统自动把程序中的所有符号常量换为赋给它的值。[4]

    变量

    编辑

    与常量一样,变量也是一块内存空间,用于保存程序运行过程中可能变化的数据。变量的名称是用户定义的一个标识符。[5]

    在代码中需要使用该变量时,只需引用相应的标识符即可,而不用管变量当前的值具体是什么。[5]

    声明

    与用户自定义的常量相似,变量在使用之前都需要声明,在VBA中声明变量的语法格式有以下几种:[5]

  • 关键字变量名 AS数据类型

  • 关键字变量1,变量2 ... 变量n AS数据类型

  • 关键字变量1 AS数据类型,变量2 As数据类型, ... ,变量n AS数据类型

  • 在第二种语法格式中, “变量n”的数据类型为AS关键字后定义的数据类型,而“变量1”、“变量2”、…的数据类型为变体型。[5]

    在VBA中,可用Dim、Private、Public和Static这4个关键字来声明变量,使用不同关键字声明的变量其含义也有所不同。[5]

    ◆ 利用Dim关键字声明变量:Dim关键字主要用来在内存中分配一块空间,并为该空间命名,是VBA中声明变量最常用的关键字。使用Dim关键字声明的变量只能在当前过程或模块中使用。[5]

    ◆ 利用Private关键字声明变量:Private关键字用于在类模块中声明一个私有变量,它只能在当前的类模块中使用。当定义变量的位置同处于类模块中时,其使用效果与使用Dim关键字定义的变量相同。[5]

    ◆ 利用Public关键字声明变量:利用Public关键字声明的变量可以在程序的任何地方调用,而与声明变量的位置无关。[5]

    ◆ 利用Static关键字声明变量:Static关键字用于声明静态变量,即变量的值在整个代码运行期间都能被保留。[5]

    赋值

    变量在使用时还需要对其进行赋值。在VBA中对变量进行赋值可通过 “ = ” 符号或 “ Set ” 关键字进行。通过 “ = ” 符号对变量赋值的语法格式有以下几种。[5]

  • 变量名=数据

  • 变量1=变量2 运算符 数据

  • 变量1=变量2 运算符 变量3 … 运算符 变量n

  • 如果在定义变量时指定了变量的数据类型,则为变量所赋的值也必须是该数据类型的值。如果变量定义为Integer类型,而在赋值时却给了变量一个String类型的数据,则在编译运行的过程中将弹出错误弹框。[5]

    运算符

    编辑

    运算符是在程序中执行计算功能的某些特殊符号,它是程序代码的重要组成部分。在程序代码中,运算符不能单独使用,必须与其操作数共同组成表达式后才具有运算意义。VBA中的运算符包含算术运算符、连接运算符、比较运算符和逻辑运算符等。[4]

    算术运算符

    算术运算符主要用于执行四则运算,仅用算术运算符连接起来的表达式称为算术表达式。算术运算符及其作用与示例如表所示。[5]

    例子

    名称

    结果

    -$a

  • 取反

  • $a 的负值。

  • $a + $b

  • 加法

  • $a 和 $b 的和。

  • $a - $b

  • 减法

  • $a 和 $b 的差。

  • $a * $b

  • 乘法

  • $a 和 $b 的积。

  • $a / $b

  • 除法

  • $a 除以 $b 的商,允许小数。

  • $a \ $b 除法 $a 除以 $b 的商,结果取整。

    $a Mod $b

  • 取余

  • $a 除以 $b 的余数

  • 注意:

    在执行算术运算时,运算符两侧操作的数据类型必须相同,否则会出现“类型不匹配”的错误提示。当“+”运算符左右两侧都是字符串类型的操作数时,执行的是连接运算,如表达式“"Pass+"word"的计算结果为字符串“ PassWord ”。[5]

    连接运算符

    连接运算符的作用是将运算符两侧的操作数连接成一个数,其操作数的数据类型通常都为String类型。VBA中的连接运算符有“&”和“+”两种,由于使用“+”执行连接运算时,容易与加法运算混淆,所以通常都采用“&”进行连接运算。[5]

    比较运算符

    比较运算符可以对运算符两侧的操作数执行比较运算,其返回结果为Boolean类型的True或False。比较运算符的操作数通常为具体的数值,当操作数为字符串或其他符号时,是根据该符号的ASCII码进行比较的。VBA中的比较运算符及其作用与示例如表所示。[5]

    例子

    名称

    结果

    $a = $b

  • 等于

  • TRUE,如果 $a 等于 $b。

  • $a <> $b

  • 不等

  • TRUE,如果 $a 不等于 $b。

  • $a < $b

  • 小于

  • TRUE,如果 $a 严格小于 $b。

  • $a > $b

  • 大于

  • TRUE,如果 $a 严格大于 $b。

  • $a <= $b

  • 小于等于

  • TRUE,如果 $a 小于或者等于 $b。

  • $a >= $b

  • 大于等于

  • TRUE,如果 $a 大于或者等于 $b。

  • 逻辑运算符

    逻辑运算符用于对运算符两侧的操作数执行逻辑运算,参与逻辑运算的操作数本身可以是逻辑表达式(表达式的最终结果为True或 False),也可以是算术表达式(表达式的最终返回值为0或非0)。[5]

    在逻辑运算中,数值0与逻辑值 False相同,表示逻辑假;非0数值与True相同,表示逻辑真。逻辑运算符及其含义与示例如表所示。[5]

    例子

    名称

    结果

    $a and $b

  • And(逻辑与)

  • TRUE,如果 $a 与 $b 都为TRUE。

  • $a or $b

  • Or(逻辑或)

  • TRUE,如果 $a 或 $b 任一为TRUE。

  • $a xor $b

  • Xor(逻辑异或)

  • TRUE,如果 $a 或 $b 同位相异。

  • Not(1>2)

  • Not(逻辑非)

  • TRUE。

  • (1>2) Eqv (1>2)

  • 两个操作数同为假,返回False;两个操作数同为真,返回True;两个操作数一真一假,返回False

  • TRUE。

  • 2<>1 Imp 3<5

  • 运算符左右同为真,返回True;左右同为假,返回True;左真右假,回返 False;左假右真,返回True

  • TRUE。

  • 语法结构

    编辑

    if 语句

    1
  • if条件1then语句1elseif条件2then语句2elseif......else语句nendif
  • Select Case 语句

    1
  • SelectCase表达式Case表达式列表1语句1Case表达式列表2语句2...Case表达式列表n语句nEndSelect
  • 其中的表达式列表可以为:[5]

  • 表达式例: "A"

  • 用逗号分隔的一组枚举表达式例:2,4,6,8

  • 表达式1 To表达式2 例:60 To 100

  • Is关系运算符表达式 例:Is < 60

  • Do...Loop 语句

    1
  • DoWhile或Until条件语句块1ExitDo语句块2Loop
  • For...Next语句

    1
  • Do语句块1ExitDo语句块2LoopWhile或Until条件
  • For Each … Next语句

    1
  • For循环控制变量=初值To终值Step步长语句块‘ExitFor语句可以跳出循环体Next
  • 跳出本次循环的continue语句

    1
  • For循环控制变量=初值To终值Step步长Do'用于模拟continue语句块If条件ThenExitDo'用于模拟continue语句块LoopWhileFalse'用于模拟continueNext
  • With语句

    1
  • With对象引用语句块EndWith
  • On Error语句

    1
  • OnErrorGoto出错处理语句的label'跳转到出错处理语句
  • 1
  • OnErrorResumeNext'遇到错误,不管错误,继续往下执行
  • 具有控制作用的函数

  • If(条件式,表达式1,表达式2)[5]

  • Switch(条件式1,表达式1,[条件式2,表达式2[,...,条件式n,表达式n]])

  • Choose(索引式,选项1[,选项2,...[,选项n]]) '这是基于1的索引

  • 其他语句

    编辑

    注释语句

    使用REM或者单引号开始的行。[6]

    语句的连写与续行

    如果一行包括多条语句,用冒号分割各个语句。跨多行的语句,在行末用“空格加下划线”表示续行[6]。

    过程与函数

    编辑

    12
  • Sub过程名(参数表)语句块ExitSub语句块EndSub
  • 1
  • Function函数名(参数表)AsType语句块函数名=表达式ExitFunctionEndFunction
  • 可以是Private、Public、Friend、Static等修饰。[6]

    调用函数/过程时,可以加括号或者不加括号。如果调用表达式作为一行的一部分,那么必须用参数,例如函数调用的返回值赋给变量。 调用过程时, 可以使用/不使用call关键字。使用call语句调用过程,如果无参数,则不加括号;如果有参数,必须加括号。如果调用时用括号包住单个参数,则该参数强行按值传递。需要特别注意,不用call不加括号的调用,形参与实参是传值(passed by value)而不是传引用(passed by reference),这会导致一些对象的方法调用失败。例如:[6]

    1
  • DimcnAsADODB.ConnectionSetcn=CurrentProject.ConnectionDimrsAsNewADODB.Recordsetrs.Open"SELECT*FROMmyTable",cnDimExcelAppAsNewExcel.ApplicationDimExcelWstAsWorksheetSetExcelWst=ExcelApp.Workbooks.Add.Worksheets(1)ExcelWst.Range("A2").CopyFromRecordset(rs)'失败,无法执行该行ExcelWst.Range("A2").CopyFromRecordsetrs'可成功执行该行
  • 常用内置函数

    编辑

    VBA的常用内置函数:[5]

  • MsgBox

  • InputBox

  • 舍入函数:Fix 向0取整,Int向下取整, Round四舍五入

  • Rnd: 返回0-1内的单精度随机数

  • 字符串函数:[5]

  • Filter:对字符串的一维数组的过滤

  • InStr([Start, ],[, Compare])与InStrRev: 查找子串

  • Len:字符串长度

  • Join:连接一维数组中的所有子字符串

  • Left,Right,Mid: 截取子字符串

  • Space(数值) :生成空格字符串

  • Ucase,Lcase:大小写转换函数

  • Ltrim, Rtrim,Trim :删除首尾空格

  • Replace

  • Split:分割一个字符串成为一维数组

  • StrComp:字符串比较

  • StrConv:字符串转换

  • String(number, character):制定字符重复若干次

  • StrReverse

  • 日期/时间有关函数:[5]

  • Year, Month, Day, WeekDay,Hour,Minute,Second: 截取日期时间分量

  • DateAdd: 日期/时间增量函数

  • DateDiff(<间隔类型>,<日期1>,<日期2>[,W1][,W2])日期/时间的距离函数

  • DatePart(<分割类型>,<日期>[,w1][,w2])时间分割函数

  • DateSerial(<表达式1>,<表达式2>,<表达式3>) 合成日期;DateValue(“字符串表达式”)返回日期;

  • Date,Time,Now,Timer: 返回日期时间

  • DateValue

  • TimeSerial:由时间序列得到时间对象

  • TimeValue:由时间字符串得到时间对象

  • Weekday:获得日期的周几

  • WeekdayName

  • 转换函数:CBool、CByte、CCur、CDate、 CDbl、CDec、CInt、CLng、CLngLng、CLngPtr、[5]CSng、CStr、CVar、CVErr、Asc(<字符串表达式>)返回第一个字符的Ascii编码值、Chr(ASCII码)返回字符、Hex、Oct、Str(<数值表达式>)返回字符串、Val(string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName。

  • Nz(表达式或字段属性值[,规定值])如果是空,则返回0或者""或者函数的第二个参数值[5]

  • 验证函数:isNumeric、isDate、isNull、isEmpty、IsArray、IsError、IsMissing、IsObject[5]

  • 数学函数:Abs、Sqr、Tan、Atn(即atan)、Sin、Cos、Exp(e为基的指数)、Log自然对数[5]

  • Array:构造一个Array对象[5]

  • CallByName: get or set a property, or invoke a method at run time using a string name.[5]

  • 控制流:Choose:类似于C语言的select语句、If相当于IF-ELSE语句、Switch[5]

  • Command:获取命令行参数[5]

  • CreateObject:创建ActiveX对象

  • CurDir:返回指定驱动器的当前工作路径[5]

  • 由基本数学函数导出的函数:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN

  • DoEvents:暂时把CPU控制权交回给系统[5]

  • Environ:返回环境变量的值[5]

  • 文件操作:[5]

  • Dir:返回满足条件的所有文件、目录的名字

  • EOF

  • FileAttr

  • FileDateTime

  • FileLen

  • FreeFile Function

  • GetAttr:返回文件、目录的属性值

  • Input:读取文件

  • Loc:文件指针位置

  • LOF:文件打开时的指针位置

  • Seek:文件指针定位

  • Spc:使用Print做position output

  • Tab:用于Print函数

  • Error:错误号对应的错误消息[5]

  • Windows Registry中的数据:GetAllSettings、SaveSetting、DeleteSetting、GetSetting[5]

  • GetObject:ActiveX组建的引用[5]

  • IMEStatus:返回当前Input Method Editor (IME)[5]

  • Macintosh平台:MacID、MacScript[5]

  • 金融函数:[5]

  • DDB:使用double-declining balance计算贬值

  • FV:计算固定利率的年金

  • IPmt:计算利率

  • IRR:计算利率

  • MIRR:计算利率

  • NPer:计算周期数

  • NPV:计算net present value

  • Pmt:计算支付数

  • PPmt:计算本金支付数

  • PV:计算present value

  • Rate:利息率

  • SLN:straight-line depreciation

  • SYD:计算sum-of-years' digits depreciation

  • Partition:返回字符串,表示一个数值名字落在各个range内。常用于SQL select语句[5]

  • QBColor:颜色值[5]

  • RGB:颜色值[5]

  • TypeName:得到变量的类型名[5]

  • VarType:得到变量的类型数[5]

求VBA代码大全

1:打开所有隐藏工作表
2:循环宏
3:录制宏时调用“停止录制”工具栏
4:高级筛选5列不重复数据至指定表
5:双击单元执行宏(工作表代码)
6:双击指定区域单元执行宏(工作表代码)
7:进入单元执行宏(工作表代码)
8:进入指定区域单元执行宏(工作表代码)
9:在多个宏中依次循环执行一个(控件按钮代码)
10:在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)
11:在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)
12:根据A1单元文本隐藏/显示按钮(控件按钮代码)
13:当前单元返回按钮名称(控件按钮代码)
14:当前单元内容返回到按钮名称(控件按钮代码)
15:奇偶页分别打印
16:自动打印多工作表第一页
17:查找A列文本循环插入分页符
18:将A列最后数据行以上的所有B列图片大小调整为所在单元大小
19:返回光标所在行数20:在A1返回当前选中单元格数量
21:返回当前工作簿中工作表数量
22:返回光标选择区域的行数和列数
23:工作表中包含数据的最大行数
24:返回A列数据的最大行数
25:将所选区域文本插入新建文本框
26:批量插入地址批注
27:批量插入统一批注
28:以A1单元内容批量插入批注
29:不连续区域插入当前文件名和表名及地址
30:不连续区域录入当前单元地址
31:连续区域录入当前单元地址
32:返回当前单元地址
33:不连续区域录入当前日期
34:不连续区域录入当前数字日期
35:不连续区域录入当前日期和时间
36:不连续区域录入对勾
37:不连续区域录入当前文件名
38:不连续区域添加文本
39:不连续区域插入文本
40:从指定位置向下同时录入多单元指定内容
41:按aa工作表A列的内容排列工作表标签顺序
42:以A1单元文本作表名插入工作表
43:删除所有未选定工作表
44:工作表标签排序
45:定义指定工作表标签颜色
46:在目录表建立本工作簿中各表链接目录
47:建立工作表文本目录
48:查另一文件的所有表名
49:当前单元录入计算机名
50:当前单元录入计算机用户名
51:解除所有工作表保护
52:为指定工作表加指定密码保护表
53:在有密码的工作表执行代码
54:执行前需要验证密码的宏(控件按钮代码)
55:执行前需要验证密码的宏()
56:拷贝A1公式和格式到A2
57:复制单元数值
58:插入数值条件格式
59:插入透明批注
60:添加文本
61:光标定位到指定工作表A列最后数据行下一单元
62:定位选定单元格式相同的所有单元格
63:按当前单元文本定位
64:按固定文本定位
65:删除包含固定文本单元的行或列
66:定位数据及区域以上的空值
67:右侧单元自动加5(工作表代码)
68:当前单元加2
69:A列等于A列减B列
70:用于光标选定多区域跳转指定单元(工作表代码)
71:将A1单元录入的数据累加到B1单元(工作表代码)
72:在指定颜色区域选择单元时添加/取消"√"(工作表代码)
73:在指定区域选择单元时添加/取消"√"(工作表代码)
74:双击指定单元,循环录入文本(工作表代码)
75:双击指定单元,循环录入文本(工作表代码)
76:单元区域引用(工作表代码)
77:在指定区域选择单元时数值加1(工作表代码)
78:混合文本的编号
79:指定区域单元双击数据累加(工作表代码)
80:选择单元区域触发事件(工作表代码)
81:当修改指定单元内容时自动执行宏(工作表代码)
82:被指定单元内容限制执行宏
83:双击单元隐藏该行(工作表代码)
84:高亮显示行(工作表代码)
85:高亮显示行和列(工作表代码)
86:为指定工作表设置滚动范围(工作簿代码)
87:在指定单元记录打印和预览次数(工作簿代码)
88:自动数字金额转大写(工作表代码)
89:将所有工作表的A1单元作为单击按钮(工作簿代码)
90:闹钟——到指定时间执行宏(工作簿代码)
91:改变Excel界面标题的宏(工作簿代码)
92:在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)
93:B列录入数据时在A列返回记录时间(工作表代码)
94:当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)
95:指定单元显示光标位置内容(工作表代码)
96:每编辑一个单元保存文件
97:指定允许编辑区域
98:解除允许编辑区域限制
99:删除指定行
100:删除A列为指定内容的行
1:打开所有隐藏工作表
Sub打开所有隐藏工作表()
DimiAsInteger
Fori=1ToSheets.Count
Sheets(i).Visible=True
Nexti
EndSub

2:循环宏
Sub循环()

AAA=Range("C2")

DimiAsLong
DimtimesAsLong
times=AAA
'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)
Fori=1Totimes
Call过滤一行

IfRange("完成标志")="完成"Then
ExitFor
'假如名为'完成标志'的命名单元的值等于'完成',则退出循环,假如一开始就等于'完成',则只执行一次循环就退出

'IfSheets("传送参数").Range("A"&i).Text="完成"Then
ExitFor
'假如某列出现"完成"内容则退出循环
Nexti
EndSub

3:录制宏时调用“停止录制”工具栏
Sub录制宏时调用停止录制工具栏()
Application.CommandBars("StopRecording").Visible=True
EndSub
4:高级筛选5列不重复数据至指定表
Sub高级筛选5列不重复数据至Sheet2()
Sheets("Sheet2").Range("A1:E65536")=""'清除Sheet2的A:D列
Range("A1:E65536").AdvancedFilterAction:=xlFilterCopy,CopyToRange:=Sheet2.Range(_
"A1"),Unique:=True
Sheet2.Columns("A:E").SortKey1:=Sheet2.Range("A2"),Order1:=xlAscending,Header:=xlGuess,_
OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,SortMethod_
:=xlPinYin
EndSub
5:双击单元执行宏(工作表代码)
PrivateSubWorksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean)
IfRange("$A$1")="关闭"Then
ExitSub
SelectCaseTarget.Address
Case"$A$4"
Call宏1
Cancel=True
Case"$B$4"
Call宏2
Cancel=True
Case"$C$4"
Call宏3
Cancel=True
Case"$E$4"
Call宏4
Cancel=True
EndSelect
EndSub
6:双击指定区域单元执行宏(工作表代码)
PrivateSubWorksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean)
IfRange("$A$1")="关闭"ThenExitSub
IfNotApplication.Intersect(Target,Range("A4:A9","C4:C9"))IsNothingThenCall打开隐藏表
EndSub
7:进入单元执行宏(工作表代码)
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)'以单元格进入代替按钮对象调用宏
IfRange("$A$1")="关闭"ThenExitSub
SelectCaseTarget.Address
Case"$A$5"'单元地址(Target.Address),或命名单元名字(Target.Name)
Call宏1
Case"$B$5"
Call宏2
Case"$C$5"
Call宏3
EndSelect
EndSub
8:进入指定区域单元执行宏(工作表代码)
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
IfRange("$A$1")="关闭"ThenExitSub
IfNotApplication.Intersect(Target,Range("A4:A9","C4:C9"))IsNothingThenCall打开隐藏表
EndSub
9:在多个宏中依次循环执行一个(控件按钮代码)
PrivateSubCommandButton1_Click()
StaticRunMacroAsInteger
SelectCaseRunMacro
Case0
宏1
RunMacro=1
Case1
宏2
RunMacro=2
Case2
宏3
RunMacro=0
EndSelect
EndSub
10:在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)
PrivateSubCommandButton1_Click()
WithCommandButton1
If.Caption="保护工作表"Then
Call保护工作表
.Caption="取消工作表保护"
ExitSub
EndIf
If.Caption="取消工作表保护"Then
Call取消工作表保护
.Caption="保护工作表"
ExitSub
EndIf
EndWith
EndSub
11:在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)
OptionExplicitPrivateSubCommandButton1_Click()
WithCommandButton1
If.Caption="宏1"Then
Call宏1
.Caption="宏2"
ExitSub
EndIf
If.Caption="宏2"Then
Call宏2
.Caption="宏3"
ExitSub
EndIf
If.Caption="宏3"Then
Call宏3
.Caption="宏1"
ExitSub
EndIf
EndWith
EndSub
12:根据A1单元文本隐藏/显示按钮(控件按钮代码)
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
IfRange("A1")>2Then
CommandButton1.Visible=1
Else
CommandButton1.Visible=0
EndIf
EndSub
PrivateSubCommandButton1_Click()
重排窗口
EndSub
13:当前单元返回按钮名称(控件按钮代码)
PrivateSubCommandButton1_Click()
ActiveCell=CommandButton1.Caption
EndSub
14:当前单元内容返回到按钮名称(控件按钮代码)
PrivateSubCommandButton1_Click()
CommandButton1.Caption=ActiveCell
EndSub
15:奇偶页分别打印
Sub奇偶页分别打印()
Dimi%,Ps%
Ps=ExecuteExcel4Macro("GET.DOCUMENT(50)")'总页数
MsgBox"现在打印奇数页,按确定开始."
Fori=1ToPsStep2
ActiveSheet.PrintOutfrom:=i,To:=i
Nexti
MsgBox"现在打印偶数页,按确定开始."
Fori=2ToPsStep2
ActiveSheet.PrintOutfrom:=i,To:=i
Nexti
EndSub
16:自动打印多工作表第一页
Sub自动打印多工作表第一页()
DimshAsInteger
Dimx
Dimy
Dimsy
Dimsyz
x=InputBox("请输入起始工作表名字:")
sy=InputBox("请输入结束工作表名字:")
y=Sheets(x).Index
syz=Sheets(sy).Index
Forsh=yTosyz
Sheets(sh).Select
Sheets(sh).PrintOutfrom:=1,To:=1
Nextsh
EndSub
17:查找A列文本循环插入分页符
Sub循环插入分页符()
'Selection=Workbooks("临时表").Sheets("表2").Range("A1")调用指定地址内容
DimiAsLong
DimtimesAsLong
times=Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"),"分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)
Fori=1Totimes
Call插入分页符
Nexti
EndSub
Sub插入分页符()
Cells.Find(What:="分页",After:=ActiveCell,LookIn:=xlValues,LookAt:=_
xlPart,SearchOrder:=xlByRows,SearchDirection:=xlNext,MatchCase:=False)_
.Activate
ActiveWindow.SelectedSheets.HPageBreaks.AddBefore:=ActiveCell
EndSub
Sub取消原分页()
Cells.Select
ActiveSheet.ResetAllPageBreaks
EndSub
18:将A列最后数据行以上的所有B列图片大小调整为所在单元大小
Sub将A列最后数据行以上的所有B列图片大小调整为所在单元大小()
DimPicAsPicture,i&
i=[A65536].End(xlUp).Row
ForEachPicInSheet1.Pictures
IfNotApplication.Intersect(Pic.TopLeftCell,Range("B1:B"&i))IsNothingThen
Pic.Top=Pic.TopLeftCell.Top
Pic.Left=Pic.TopLeftCell.Left
Pic.Height=Pic.TopLeftCell.Height
Pic.Width=Pic.TopLeftCell.Width
EndIf
Next
EndSub
19:返回光标所在行数
Sub返回光标所在行数()
x=ActiveCell.Row
Range("A1")=x
EndSub
20:在A1返回当前选中单元格数量
Sub在A1返回当前选中单元格数量()
[A1]=Selection.Count
EndSub
21:返回当前工作簿中工作表数量
Sub返回当前工作簿中工作表数量()
t=Application.Sheets.Count
MsgBoxt
EndSub


93:B列录入数据时在A列返回记录时间(工作表代码)
PublicSubWorksheet_Change(ByValTargetAsRange)
IfTarget.Column=2Then
Target.Offset(,-1)=Now
EndIf
EndSub
94:当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)
PublicSubWorksheet_Change(ByValTargetAsRange)
IfNotApplication.Intersect(Target,[A1:A1000])IsNothingThen
IfTarget.Column=1Then
Target.Offset(,1)=Date
Target.Offset(,2)=Time
EndIf
EndIf
EndSub
PublicSubWorksheet_Change(ByValTargetAsRange)
IfNotApplication.Intersect(Target,[A1:A1000])IsNothingThen
IfTarget.Column=1Then
Target.Offset(,1)=Format(Now(),"yyyy-mm-dd")
Target.Offset(,2)=Format(Now(),"h:mm:ss")
EndIf
EndIf
EndSub
95:指定单元显示光标位置内容(工作表代码)
PrivateSubWorksheet_SelectionChange(ByValTAsRange)
Sheets(1).Range("A1")=Selection
EndSub
96:每编辑一个单元保存文件
PrivateSubWorksheet_Change(ByValTargetAsRange)
ThisWorkbook.Save
EndSub
97:指定允许编辑区域
Sub指定允许编辑区域()
ActiveSheet.ScrollArea="B8:G15"
EndSub
98:解除允许编辑区域限制
Sub解除允许编辑区域限制()
ActiveSheet.ScrollArea=""
EndSub
99:删除指定行
Sub删除指定行()
Workbooks("临时表").Sheets("表2").Range("5:5").Delete
EndSub
100:删除A列为指定内容的行
Sub删除A列为指定内容的行()
Dima,bAsInteger
a=Sheet1.[a65536].End(xlUp).Row
Forb=aTo2Step-1
IfCells(b,1).Value="删除"Then
Rows(b).Delete
EndIf
Next
EndSub

vba代码怎么编写

在工作表事件(比如在sheet1)中添加以下代码:

PrivateSubWorksheet_Change(ByValTargetAsRange)
IfTarget.Column=7Then
Cells(Target.Row,Target.Column+2).Select
ElseIfTarget.Column=9Then
Cells(Target.Row,Target.Column+2).Select
ElseIfTarget.Column=11Then
Cells(Target.Row+1,7).Select
EndIf
EndSub

EXCEL中VBA程序代码使用

1)打开原始代码所在的工作簿,按Alt+F11,进入宏窗口,选择模块找到对应的代码,拷贝代码, 再到需要的工作簿,再按alt+F11,插入->宏模块,粘帖刚才拷贝好的代码,在新工作簿中就可以调用了 2)在工具,自定义中找到对应的控件工具箱,打勾后关闭

VBA代码是什么????????

VBA开发实用指南 唐大中 附录文章 VBA(Visual Basic for Application)是Office自带的二次开发工具,可为日常办公带来极大的便利。本文讲述Office各个成员VBA开发的常用对象和其相关的属性、方法和事件(包括Word、Excel、PowerPoint等),并给出相关的实例代码。 一、VBA基础 1.什么是VBA 在Office对于一些烦琐、重复的操作,用户可以通过“宏”来实现。“宏”即是由一系列命令和指令组合而成的命令集,其本质是VBA代码组成的程序。VBA是微软在其开发的应用程序中共享的通用自动化语言。 2.录制/运行宏 VBA初期开发可通过录制“宏”的

标签:信息技术 编程语言 编程 MicrosoftOffice MicrosoftExcel

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18