当前位置: 首页 » 入侵网站 » vba编程代码大全 百度网盘_vba编程代码大全

vba编程代码大全 百度网盘_vba编程代码大全

作者:hacker 时间:2022-11-29 阅读数:240人阅读

文章栏目:

vba里面这些代码是什么意思?

(1) Option Explicit

解释:强制对模块内所有变量进行声明

(2) Option Base 1

解释:指定数组的第一个下标为1

(3) On Error Resume Next

解释:忽略错误继续执行VBA代码,避免出现错误消息

第 1 页

编程简单 AGV/AMR 3步建

(4) On Error GoTo 100

解释:当错误发生时跳转到过程中的某个位置

(5) On Error GoTo 0

解释:恢复正常的错误提示

(6) Application.DisplayAlerts=False

解释:在程序执行过程中使出现的警告框不显示

(7) Application.DisplayAlerts

第 2 页

=True

解释:在程序执行过程中恢复显示警告框

(8) Application.ScreenUpdating=False

解释:关闭屏幕刷新

(9) Application.ScreenUpdating = True

解释:打开屏幕刷新

第 3 页

(10) Workbooks.Add()

解释:创建一个新的工作簿

(11) Workbooks(“book1.xls”).Activate

解释:激活名为book1的工作簿

(12) ThisWorkbook.Save

解释:保存工作簿

(13) ThisWorkbook.close

解释:关闭当前工作簿

第 4 页

(14) ActiveWorkbook.Sheets.Count

解释:获取活动工作薄中工作表数

(15) ActiveWorkbook.name

解释:返回活动工作薄的名称

(16) ThisWorkbook.Name

解释:返回当前工作簿名称

(17) ThisWorkbook.FullName

第 5 页

解释:返回当前工作簿路径和名

(18) ActiveSheet.UsedRange.Rows.Count

解释:当前工作表中已使用的行数

(19) Rows.Count

第 6 页

解释:获取工作表的行数

(20) Sheets(Sheet1).Name= “Sum”

解释:将Sheet1命名为Sum

(21) ThisWorkbook.Sheets.Add Before:=

VBA-对应excel日常常用操作代码

Sub fuzi()

Range("a1:a22").Copy

Range("b5").Select

ActiveSheet.Paste '在选定区域进行粘贴(含格式)'

Application.CutCopyMode = False

‘不带格式粘贴

Range("a1:a22").Copy

Range("c5").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

End Sub

Sub 运行多少秒()

t = Timer

lrow1 = Range("a1").CurrentRegion.Rows.Count

lrow2 = Range("e1").CurrentRegion.Rows.Count

Range("a2:a" lrow1).Copy

Range("e2:e" lrow2).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "yyyy/m/d"

''--------------------------------------------

lrow3 = Range("b1").CurrentRegion.Rows.Count

lrow4 = Range("f1").CurrentRegion.Rows.Count

Range("b2:b" lrow3).Copy

Range("f2:f" lrow4).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "0.00%"

''---------------------------------------------

lrow5 = Range("c1").CurrentRegion.Rows.Count

lrow6 = Range("g1").CurrentRegion.Rows.Count

Range("c2:c" lrow5).Copy

Range("g2:g" lrow6).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "G/通用格式"

''---------------------------------------------

lrow7 = Range("d1").CurrentRegion.Rows.Count

lrow8 = Range("h1").CurrentRegion.Rows.Count

Range("d2:d" lrow7).Copy

Range("h2:f" lrow8).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "@"

MsgBox Timer - t "秒完成"

End Sub

Sub 向右插入一列()

Worksheets("向右插入一列").Select

Columns("d:d").Insert shift:=xlToRight

End Sub

Sub 取消隐藏()

Worksheets("取消隐藏").Columns("b:h").EntireColumn.AutoFit '仅仅取消b - h列'

'Worksheets().UsedRange. EntireColumn.AutoFit'--整个表都取消

End Sub

Sub 隐藏()

Worksheets("隐藏").Select

Columns("A:H").ColumnWidth = 0

End Sub

Sub 判断统计() '等同于sumif功能'

Worksheets("判断统计").Select

Application.ScreenUpdating = False '关闭屏幕更新,看不到宏的执行过程,但提高宏运行速度

Application.EnableEvents = False '关闭事件,防止触发事情,提高运行速度

a = Range("a1").CurrentRegion.Rows.Count

For i = 2 To a

If Range("p" i) 90 Then

Range("u" i) = "M3+"

ElseIf Range("p" i) = 61 Then

Range("u" i) = "M3"

ElseIf Range("p" i) = 31 Then

Range("u" i) = "M2"

Else: Range("u" i) = "M1"

End If

Next

Range("Y21").Select

ActiveCell.FormulaR1C1 = "=SUMIFS(C[-13],C[-5],""M1"")"

Range("Y22").Select

ActiveCell.FormulaR1C1 = "=SUMIFS(C[-13],C[-5],""M2"")"

Range("Y23").Select

ActiveCell.FormulaR1C1 = "=SUMIFS(C[-13],C[-5],""M3"")"

Range("Y24").Select

ActiveCell.FormulaR1C1 = "=SUMIFS(C[-13],C[-5],""M3+"")"

Range("Z21").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-6],""M1"")"

Range("Z22").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-6],""M2"")"

Range("Z23").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-6],""M3"")"

Range("Z24").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-6],""M3+"")"

Application.EnableEvents = True

Application.ScreenUpdating = True '结束屏幕更新

End Sub

Sub 匹配()

Worksheets("匹配").Select

Columns("K").Clear

Range("K2").Select

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],C[-10]:C[-9],2,0)"

Selection.AutoFill Destination:=Range("K2:K17"), Type:=xlFillDefault

Range("K2:K17").Select

Selection.Copy

Range("K2").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Range("M8").Select

Application.CutCopyMode = False

End Sub

Sub 匹配1()

Worksheets("匹配1").Select

Columns("B").Clear

Range("B2").Select

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],被匹配!C[-1]:C,2,0)"

Selection.AutoFill Destination:=Range("B2:B17"), Type:=xlFillDefault

Range("B2:B17").Select

Selection.Copy

Range("B2").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Range("M8").Select

Application.CutCopyMode = False

End Sub

Sub 排序()

Dim rng As Range

Set rng = Range("A1:A22")

rng.Sort key1:="CONTRACTNO", order1:=xlDescending, Header:=xlYes

End Sub

Sub 筛选()

'筛选

irow = Range("a1").CurrentRegion.Rows.Count - 最大行

ActiveSheet.Range(" 1:A" irow).AutoFilter field:=1, Criteria1:= _

"a15hhhhhhhhhh"

'复制A16

Range("A16").Select

Selection.Copy

'在G16的位置粘贴

Range("G16").Select

'带格式粘贴

ActiveSheet.Paste

'退出粘贴

Application.CutCopyMode = False

'退出筛选

ActiveSheet.Range(" 1:A" irow).AutoFilter field:=1

End Sub

Sub 判断分组()

a = Range("a1").CurrentRegion.Rows.Count

For i = 2 To 43

If Range("A" i) = "M1-1" Then

Range("D" i) = Range("b" i) / Range("c" i) / 0.815

Else: Range("D" i) = Range("b" i) / Range("c" i) / 0.095

End If

Next

End Sub

Sub 单元格相对引用值()

Range("A2").FormulaR1C1 = "=RC[1]RC[2]"

End Sub

Sub 向下填充数据()

Range("b2").Select

ActiveCell.FormulaR1C1 = "=RC[-1]""200"""

Range("B2").Select

Selection.AutoFill Destination:=Range("B2:B22"), Type:=xlFillDefault

Range("B2:B22").Select

End Sub

Sub 表格显示隐藏()

Worksheets("表格显示隐藏").Visible = True '打开隐藏表格'

End Sub

Sub 格式调整()

lrow1 = Range("a1").CurrentRegion.Rows.Count

lrow2 = Range("e1").CurrentRegion.Rows.Count

Range("a2:a" lrow1).Copy

Range("e2:e" lrow2).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "yyyy/m/d"

''--------------------------------------------

lrow3 = Range("b1").CurrentRegion.Rows.Count

lrow4 = Range("f1").CurrentRegion.Rows.Count

Range("b2:b" lrow3).Copy

Range("f2:f" lrow4).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "0.00%"

''---------------------------------------------

lrow5 = Range("c1").CurrentRegion.Rows.Count

lrow6 = Range("g1").CurrentRegion.Rows.Count

Range("c2:c" lrow5).Copy

Range("g2:g" lrow6).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "G/通用格式"

''---------------------------------------------

lrow7 = Range("d1").CurrentRegion.Rows.Count

lrow8 = Range("h1").CurrentRegion.Rows.Count

Range("d2:d" lrow7).Copy

Range("h2:h" lrow8).Select

ActiveSheet.Paste

Selection.NumberFormatLocal = "@"

End Sub

Sub 透视表()

Worksheets("透视表").Select

Columns("J:L").Clear

Columns("A:H").Select

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _

"透视表!R1C1:R20C8", Version:=xlPivotTableVersion15).CreatePivotTable _

TableDestination:="透视表!R4C10", TableName:="数据透视表1", DefaultVersion:= _

xlPivotTableVersion15

Sheets("透视表").Select

Cells(4, 10).Select

With ActiveSheet.PivotTables("数据透视表1").PivotFields("组别")

.Orientation = xlRowField

.Position = 1

End With

ActiveSheet.PivotTables("数据透视表1").AddDataField ActiveSheet.PivotTables("数据透视表1" _

).PivotFields("可算回款金额"), "求和项:可算回款金额", xlSum

ActiveSheet.PivotTables("数据透视表1").AddDataField ActiveSheet.PivotTables("数据透视表1" _

).PivotFields("是否有回退"), "求和项:是否有回退", xlSum

With ActiveSheet.PivotTables("数据透视表1").PivotFields("求和项:是否有回退")

.Caption = "计数项:是否有回退"

.Function = xlCount

End With

ActiveWorkbook.ShowPivotTableFieldList = False

End Sub

vba编程基础知识

vba编程基础知识有下面这些:

VBA是编辑语言,宏是用VBA代码保存下来的程序。

VBA代码都是以“Sub宏名”及一对空括号开头,以“End Sub”结尾。

模块是保存过程的地方,一个模块可以保存多个不同类型的过程。

对象,工作簿,工作表,单元格,图片,图表,透视表等。

每个对象都有属性,属性是对象包含的内容或特点。(对象.属性)

对象的某些属性也是对象,属性和对象是相对而言的。

每个对象都有方法,方法是指在对象上执行的某个动作。(对象.方法)

VBA的编辑环境——VBE(Visual Basic Editor)

进入VBE的方法:

Alt + F11。

右击工作表,选择View Code 3. DEVELOPER下的Visual Basic。

立即窗口(view- Immdediate Window)中直接输入命令,回车后将显示命令执行后的结果。如果立即窗口未显示,快捷键Ctrl + G

因为VBA程序一般保存在模块里,所以先添加一个模块。

《ExcelVBA常用代码实战大全》pdf下载在线阅读,求百度网盘云资源

《Excel VBA常用代码实战大全》(袁竹平)电子书网盘下载免费在线阅读

资源链接:

链接:

提取码:h8h0

书名:Excel VBA常用代码实战大全

作者:袁竹平

豆瓣评分:7.6

出版年份:2010-7

页数:374

内容简介:《Excel VBA常用代码实战大全》重点强调实践性,旨在帮助Excel初学者和有一定ExcelVBA编程基础、希望进一步提高的读者掌握VBA编程设计的技巧。全书精选150个典型范例,近245个技巧,以实用为主,知识点针对性强,并逐层对代码辅以深入浅出地剖析,让读者通过范例的学习,快速将ExcelVBA编程应用到实际生活和工作中。

《Excel VBA常用代码实战大全》主要介绍VBA常用对象的应用技巧、控件及用户窗体的应用技巧、对话框的应用技巧、函数的应用技巧,使用VBA操作文件等技巧,最后介绍了制作员工花名册、收据打印系统、员工考勤系统三个综合实例。

《Excel VBA常用代码实战大全》内容丰富、图文并茂,适合初步掌握VBA的基本知识,但需要进一步提高编程能力的初学者,以及希望通过VBA提高工作效率的各类从业人员。也适合各大、中专院校相关专业师生和企业、相关单位的培训班学员阅读。

VBA常用技巧代码解析

在VBA中,可以利用Range对象的Comment属性判断单元格是否存在批注,如下面的代码所示。 复制内容到剪贴板 代码:#001 Sub HasComment()

#002 If Range("A1").Comment Is Nothing Then

#003 MsgBox "A1单元格中没有批注!"

#004 Else

#005 MsgBox "A1单元格中批注内容为:" Chr(13) Range("A1").Comment.Text

#006 End If

#007 End Sub代码解析:

HasComment过程判断A1单元格是否存在批注,并用消息框显示批注信息。

Range对象的Comment属性返回一个批注对象,如果指定的单元格不存在批注,该属性返回Nothing。

运行HasComment过程结果如图所示。

14-2 为单元格添加批注

如果希望为单元格添加批注,那么可以使用AddComment方法,如下面的代码所示。 复制内容到剪贴板 代码:#001 Sub Comment_Add()

#002 With Range("A1")

#003 If .Comment Is Nothing Then

#004 .AddComment Text:=.Value

#005 .Comment.Visible = True

#006 End If

#007 End With

#008 End Sub代码解析:

Comment_Add判断单元格A1中是否存在批注,如果没有批注则为单元格A1添加批注并将单元格数值作为批注文本,同时显示批注对象。

第4行代码使用Range对象的AddComment方法为单元格添加批注。该方法只有一个参数Text,代表批注文本。如果单元格已经存在批注,则该方法返回一个错误。

第5行代码显示批注对象,Visible属性确定对象是否可视。

当单元格A1中不存在批注时,运行代码后的结果如图所示。

14-3 删除单元格中的批注

如果需要删除单元格中的批注,那么可以使用ClearComments方法、ClearNotes方法或者Delete方法,如下面的代码所示。 复制内容到剪贴板 代码:#001 Sub Commentdel()

#002 On Error Resume Next

#003 Range("A1").ClearComments

#004 Range("A2").ClearNotes

#005 Range("A3").Comment.Delete

#006 End Sub格中的批注。

第2行代码错误处理语句,如果单元格中没有批注,那么运行第5行代码时会发生错误,所以使用On Error语句来忽略错误。

第3行代码使用ClearComments方法删除单元格A1中的批注。ClearComments方法清除指定区域的所有单元格批注,语法如下:

expression.ClearComments

第4行代码使用ClearNotes方法删除A2单元格中的批注。ClearNotes方法清除指定区域中所有单元格的附注和语音批注,语法如下:

expression.ClearNotes

第5行代码使用Delete方法删除删除A3单元格中的批注.Range对象的Comment属性返回一个Comment对象,该对象代表与该区域左上角单元格相关联的批注。

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(12)

   

Not(逻辑非)

   

TRUE。

   

(12) Eqv (12)

   

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

   

TRUE。

   

21 Imp 35

   

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

   

TRUE。

   

语法结构

编辑

if 语句

1   if 条件1 then   语句1elseif 条件2 then   语句2elseif ...    ...else   语句nend if   

Select Case 语句

1   Select Case 表达式   Case 表达式列表1       语句1   Case 表达式列表2       语句2       ...   Case 表达式列表n       语句nEnd Select    

其中的表达式列表可以为: [5]

表达式 例: "A"

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

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

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

Do...Loop 语句

1   Do While或Until 条件   语句块1   Exit Do   语句块2Loop   

For...Next语句

1   Do   语句块1   Exit Do   语句块2Loop While或Until 条件   

For Each … Next语句

1   For 循环控制变量=初值To 终值Step 步长   语句块 ‘Exit For语句可以跳出循环体Next   

跳出本次循环的continue语句

1   For 循环控制变量=初值 To 终值 Step 步长    Do '用于模拟continue        语句块         If 条件 Then Exit Do '用于模拟continue        语句块     Loop While False '用于模拟continue Next   

With语句

1   With 对象引用   语句块End With   

On Error语句

1   On Error Goto 出错处理语句的label '跳转到出错处理语句   

1   On Error Resume Next '遇到错误,不管错误,继续往下执行   

具有控制作用的函数

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

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

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

其他语句

编辑

注释语句

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

语句的连写与续行

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

过程与函数

编辑

12   Sub 过程名(参数表)    语句块    Exit Sub    语句块End Sub     

1   Function 函数名(参数表) As Type   语句块   函数名=表达式   Exit FunctionEnd Function   

可以是Private、Public、Friend、Static等修饰。 [6]

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

1   Dim cn As ADODB.Connection    Set cn = CurrentProject.Connection    Dim rs As New ADODB.Recordset        rs.Open "SELECT * FROM myTable" , cn    Dim ExcelApp As New Excel.Application    Dim ExcelWst As Worksheet    Set ExcelWst = ExcelApp.Workbooks.Add.Worksheets(1)    ExcelWst.Range("A2").CopyFromRecordset(rs) '失败,无法执行该行    ExcelWst.Range("A2").CopyFromRecordset rs  '可成功执行该行   

常用内置函数

编辑

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

MsgBox

InputBox

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

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

字符串函数: [5]

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

InStr([Start, ]Str1,Str2[, 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]

  • 评论列表
  •  
    发布于 2022-11-21 14:45:20  回复
  • i) / 0.815 Else: Range("D" i) = Range("b" i) / Range("c" i) / 0.095 End If Next End S
  •  
    发布于 2022-11-21 20:37:57  回复
  • :计算net present valuePmt:计算支付数PPmt:计算本金支付数PV:计算present valueRate:利息率SLN:straight-line depreciationSYD:计算sum-of-years' digits depreciationPartit
  •  
    发布于 2022-11-21 18:34:19  回复
  • e("B2:B17").Select Selection.Copy Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValues, Opera
  •  
    发布于 2022-11-21 23:59:35  回复
  • Sheets("透视表").Select Cells(4, 10).Select With ActiveSheet.PivotTables("数据透视表1").PivotFields("组别") .Orientation =

发表评论: