当前位置:文档之家› vba]-ExcelVBA命令集(转)

vba]-ExcelVBA命令集(转)

vba]-ExcelVBA命令集(转)
vba]-ExcelVBA命令集(转)

本示例为设置密码窗口(1)

If Application.InputBox("请输入密码:") = 1234 Then

[A1] = 1 '密码正确时执行

Else: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码

End If

本示例为设置密码窗口(1)

X = MsgBox("是否真的要结帐?", vbYesNo)

If X = vbYes Then

Close

本示例为设置工作表密码

ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码'本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容

For Each w In Workbooks

If https://www.doczj.com/doc/e418627917.html, https://www.doczj.com/doc/e418627917.html, Then

w.Close SaveChanges:=True

End If

Next w

'每次打开工作簿时,本示例都最大化Microsoft Excel 窗口。Application.WindowState = xlMaximized

'本示例显示活动工作表的名称。

MsgBox "The name of the active sheet is " & https://www.doczj.com/doc/e418627917.html,

'本示例保存当前活动工作簿的副本。

ActiveWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS"

'下述过程激活工作簿中的第四张工作表。

Sheets(4).Activate

'下述过程激活工作簿中的第1张工作表。

Worksheets(1).Activate

'本示例通过将Saved 属性设为True 来关闭包含本段代码的工作簿,并放弃对该

工作簿的任何更改。

ThisWorkbook.Saved = True

ThisWorkbook.Close

'本示例对自动重新计算功能进行设置,使Microsoft Excel 不对第一张工作表自

动进行重新计算。

Worksheets(1).EnableCalculation = False

'下述过程打开C 盘上名为MyFolder 的文件夹中的MyBook.xls 工作簿。Workbooks.Open ("C:\MyFolder\MyBook.xls")

'本示例显示活动工作簿中工作表sheet1 上单元格A1 中的值。

MsgBox Worksheets("Sheet1").Range("A1").Value

本示例显示活动工作簿中每个工作表的名称

For Each ws In Worksheets

MsgBox https://www.doczj.com/doc/e418627917.html,

Next ws

本示例向活动工作簿添加新工作表, 并设置该工作表的名称?

Set NewSheet = Worksheets.Add

https://www.doczj.com/doc/e418627917.html, = "current Budget"

本示例将新建的工作表移到工作簿的末尾

'Private Sub Workbook_NewSheet(ByVal Sh As Object)

Sh.Move After:=Sheets(Sheets.Count)

End Sub

本示例将新建工作表移到工作簿的末尾

'Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, _ ByVal Sh As Object)

Sh.Move After:=Wb.Sheets(Wb.Sheets.Count)

End Sub

本示例新建一张工作表,然后在第一列中列出活动工作簿中的所有工作表的名称。

Set NewSheet = Sheets.Add(Type:=xlWorksheet)

For i = 1 T o Sheets.Count

NewSheet.Cells(i, 1).Value = Sheets(i).Name

Next i

本示例将第十行移到窗口的最上面?

Worksheets("Sheet1").Activate

ActiveWindow.ScrollRow = 10

当计算工作簿中的任何工作表时,本示例对第一张工作表的A1:A100 区域进行排序

'Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

With Worksheets(1)

.Range("a1:a100").Sort Key1:=.Range("a1")

End With

End Sub

本示例显示工作表Sheet1 的打印预览。

Worksheets("Sheet1").PrintPreview

本示例保存当前活动工作簿?

ActiveWorkbook.Save

本示例保存所有打开的工作簿,然后关闭Microsoft Excel。

For Each w In Application.Workbooks

w.Save

Next w

Application.Quit

下例在活动工作簿的第一张工作表前面添加两张新的工作表? Worksheets.Add Count:=2, Before:=Sheets(1)

本示例设置15 秒后运行my_Procedure 过程,从现在开始计时。Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 本示例设置my_Procedure 在下午 5 点开始运行。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

本示例撤消前一个示例对OnTime 的设置。

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ Procedure:="my_Procedure", Schedule:=False

每当工作表重新计算时,本示例就调整A 列到F 列的宽度。

'Private Sub Worksheet_Calculate()

Columns("A:F").AutoFit

End Sub

本示例使活动工作簿中的计算仅使用显示的数字精度。ActiveWorkbook.PrecisionAsDisplayed = True

本示例将工作表Sheet1 上的A1:G37 区域剪下,并放入剪贴板。Worksheets("Sheet1").Range("A1:G37").Cut

Calculate 方法

计算所有打开的工作簿、工作簿中的一张特定的工作表或者工作表中指定区域的单元

格,如下表所示:

'要计算'依照本示例

所有打开的工作簿' Application.Calculate (或只是Calculate

指定工作表'计算指定工作表Sheet1 Worksheets

("Sheet1").Calculate

指定区域'Worksheets(1).Rows(2).Calculate

本示例对自动重新计算功能进行设置,使Microsoft Excel 不对第一张工作表自动

进行重新计算。

Worksheets(1).EnableCalculation = False

本示例计算Sheet1 已用区域中 A 列、B 列和 C 列的公式。Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate

本示例更新当前活动工作簿中的所有链接?

ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources

本示例设置第一张工作表的滚动区域?

Worksheets(1).ScrollArea = "a1:f10"

本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿。

Set NewBook = Workbooks.Add

Do

fName = Application.GetSaveAsFilename

Loop Until fName False

NewBook.SaveAs Filename:=fName

本示例打开Analysis.xls 工作簿,然后运行Auto_Open 宏。Workbooks.Open "ANALYSIS.XLS"

ActiveWorkbook.RunAutoMacros xlAutoOpen

本示例对活动工作簿运行Auto_Close 宏,然后关闭该工作簿。

With ActiveWorkbook

.RunAutoMacros xlAutoClose

.Close

End With

在本示例中,Microsoft Excel 向用户显示活动工作簿的路径和文件名称。

'Sub UseCanonical()

Display the full path to user.

MsgBox ActiveWorkbook.FullNameURLEncoded

End Sub

本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)。

MsgBox ActiveWorkbook.FullName

本示例关闭Book1.xls,并放弃所有对此工作簿的更改。

Workbooks("BOOK1.XLS").Close SaveChanges:=False

本示例关闭所有打开的工作簿。如果某个打开的工作簿有改变,Microsoft Excel

将显示询问是否保存更改的对话框和相应提示。

Workbooks.Close

本示例在打印之前对当前活动工作簿的所有工作表重新计算?

'Private Sub Workbook_BeforePrint(Cancel As Boolean)

For Each wk In Worksheets

wk.Calculate

Next

End Sub

本示例对查询表一中的第一列数据进行汇总,并在数据区域下方显示第一列数据的总

和。

Set c1 = Sheets("sheet1").QueryTables(1).ResultRange.Columns(1) https://www.doczj.com/doc/e418627917.html, = "Column1"

c1.End(xlDown).Offset(2, 0).Formula = "=sum(Column1)"

本示例取消活动工作簿中的所有更改?

ActiveWorkbook.RejectAllChanges

本示例在商业问题中使用规划求解函数,以使总利润达到最大值。SolverSave 函数

将当前问题保存到活动工作表上的某一区域。

Worksheets("Sheet1").Activate

SolverReset

SolverOptions Precision:=0.001

SolverOK SetCell:=Range("TotalProfit"), _

MaxMinVal:=1, _

ByChange:=Range("C4:E6")

SolverAdd CellRef:=Range("F4:F6"), _

Relation:=1, _

FormulaText:=100

SolverAdd CellRef:=Range("C4:E6"), _

Relation:=3, _

FormulaText:=0

SolverAdd CellRef:=Range("C4:E6"), _

Relation:=4

SolverSolve UserFinish:=False

SolverSave SaveArea:=Range("A33")

本示例隐藏Chart1、Chart3 和Chart5。

Charts(Array("Chart1", "Chart3", "Chart5")).Visible = False

当激活工作表时,本示例对A1:A10 区域进行排序。

'Private Sub Worksheet_Activate()

Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending End Sub

本示例更改Microsoft Excel 链接。

ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _

"c:\excel\book2.xls", xlExcelLinks

本示例启用受保护的工作表上的自动筛选箭头?

ActiveSheet.EnableAutoFilter = True

ActiveSheet.Protect contents:=True, userInterfaceOnly:=True 本示例将活动工作簿设为只读?

ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly

本示例使共享工作簿每三分钟自动更新一次?

ActiveWorkbook.AutoUpdateFrequency = 3

下述Sub 过程清除活动工作簿中Sheet1 上的所有单元格的内容。

'Sub ClearSheet()

Worksheets("Sheet1").Cells.ClearContents

End Sub

本示例对所有工作簿都关闭滚动条?

Application.DisplayScrollBars = False

如果具有密码保护的工作簿的文件属性没有加密,则本示例设置指定工作簿的密码加

密选项。

'Sub SetPasswordOptions()

With ActiveWorkbook

If .PasswordEncryptionProvider "Microsoft RSA SChannel Cryptographic Provider" Then

.SetPasswordEncryptionOptions _ PasswordEncryptionProvider:="Microsoft RSA SChannel Cryptographic Provider", _

PasswordEncryptionAlgorithm:="RC4", _ PasswordEncryptionKeyLength:=56, _ PasswordEncryptionFileProperties:=True

End If

End With

End Sub

在本示例中,如果活动工作簿不能进行写保护,那么Microsoft Excel 设置字符串

密码以作为活动工作簿的写密码。

'Sub UseWritePassword()

Dim strPassword As String

strPassword = "secret"

' Set password to a string if allowed.

If ActiveWorkbook.WriteReserved = False Then ActiveWorkbook.WritePassword = strPassword

End If

End Sub

在本示例中,Microsoft Excel 打开名为 Password.xls 的工作簿,设置它的密码

,然后关闭该工作簿。本示例假定名为Password.xls 的文件位于C:\ 驱动器上。

'Sub UsePassword()

Dim wkbOne As Workbook

Set wkbOne = Application.Workbooks.Open("C:\Password.xls") wkbOne.Password = "secret"

wkbOne.Close

'注意Password 属性可读并返回―********‖。

End Sub

本示例将Book1.xls 的当前窗口更改为显示公式。

Workbooks("BOOK1.XLS").Worksheets("Sheet1").Activate ActiveWindow.DisplayFormulas = True

'本示例接受活动工作簿中的所有更改?

ActiveWorkbook.AcceptAllChanges

本示例显示活动工作簿的路径和名称

Sub UseCanonical()

MsgBox '消息框

[b7] = ActiveWorkbook.FullName '当前工作簿

[b8] = ActiveWorkbook.FullNameURLEncoded '活动工作簿

End Sub

本示例显示Microsoft Excel 启动文件夹的完整路径。

MsgBox Application.StartupPath

本示例显示活动工作簿中每个工作表的名称。

For Each ws In Worksheets

MsgBox https://www.doczj.com/doc/e418627917.html,

Next ws

本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。

For Each w In Workbooks

If https://www.doczj.com/doc/e418627917.html, https://www.doczj.com/doc/e418627917.html, Then

w.Close savechanges:=True

End If

Next w

Activate 事件

激活一个工作簿、工作表、图表或嵌入图表时产生此事件。

当激活工作表时,本示例对A1:A10 区域进行排序。

Private Sub Worksheet_Activate()

Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending

End Sub

Calculate 事件

对于Worksheet 对象,在对工作表进行重新计算之后产生此事件

每当工作表重新计算时,本示例就调整A 列到F 列的宽度。

Private Sub Worksheet_Calculate()

Columns("A:F").AutoFit

End Sub

BeforeDoubleClick 事件

应用于Worksheet 对象的Activate 方法。

当双击某工作表时产生此事件,此事件先于默认的双击操作。

Private Sub expression_BeforeDoubleClick(ByVal Target As Range, Cancel

As Boolean)

expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。Target 必需。双击发生时最靠近鼠标指针的单元格。

Cancel 可选。当事件发生时为False。如果事件过程将该参数设为True,则该

过程执行完之后将不进行默认的双击操作。

BeforeRightClick 事件

应用于Worksheet 对象的Activate 方法。

当用鼠标右键单击某工作表时产生此事件,此事件先于默认的右键单击操作。Private Sub expression_BeforeRightClick(ByVal T arget As Range, Cancel

As Boolean)

expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。Target 必需。右键单击发生时最靠近鼠标指针的单元格。

Cancel 可选。当事件发生时为False。如果该事件过程将本参数设为True,则

该过程执行结束之后不进行默认的右键单击操作。

Change 事件

当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生此事件。Private Sub Worksheet_Change(ByVal Target As Range)

Target 更改的区域。可以是多个单元格。

说明

重新计算引起的单元格更改不触发本事件。可使用Calculate 事件俘获工作表重新

计算操作。

本示例将更改的单元格的颜色设为蓝色。

Private Sub Worksheet_Change(ByVal Target as Range)

Target.Font.ColorIndex = 5

End Sub

Deactivate 事件

图表、工作表或工作簿从活动状态转为非活动状态时产生此事件。

Private Sub object_Deactivate()

object Chart、Workbook 或者Worksheet。有关对Chart 对象使用事件的详细

信息,请参阅Chart 对象事件的用法。

本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列。

Private Sub Workbook_Deactivate()

Application.Windows.Arrange xlArrange

End Sub

FollowHyperlink 事件

当单击工作表上的任意超链接时,发生此事件。对于应用程序级或工作簿级的事件,

请参阅SheetFollowHyperlink 事件。

Private Sub Worksheet_FollowHyperlink(ByVal T arget As Hyperlink) Target Hyperlink 类型,必需。一个代表超链接目标位置的Hyperlink 对象。本示例对在当前活动工作簿中访问过的所有链接保留一个列表或历史记录。Private Sub Worksheet_FollowHyperlink(ByVal T arget As Hyperlink) With UserForm1

.ListBox1.AddItem Target.Address

.Show

End With

End Sub

PivotTableUpdate 事件

发生在工作簿中的数据透视表更新之后。

Private Sub expression_PivotT ableUpdate(ByVal Target As PivotTable) expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。Target 必需。选定的数据透视表。

本示例显示一则消息,说明数据透视表已经更新。本示例假定您已在类模块中声明了

带有事件的Worksheet 类型的对象。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

MsgBox "The PivotTable connection has been updated."

End Sub

SelectionChange 事件

当工作表上的选定区域发生改变时,将产生本事件。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Target 新选定的区域。

本示例滚动工作簿窗口,直至选定区域位于窗口的左上角。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) With ActiveWindow

.ScrollRow = Target.Row

.ScrollColumn = Target.Column

End With

End Sub

本示例显示活动工作簿中工作表sheet1 上单元格A1 中的值。

MsgBox Worksheets("Sheet1").Range("A1").Value

本示例显示活动工作簿中每个工作表的名称。

For Each ws In Worksheets

MsgBox https://www.doczj.com/doc/e418627917.html,

Next ws

本示例向活动工作簿添加新工作表,并设置该工作表的名称。

Set newSheet = Worksheets.Add

https://www.doczj.com/doc/e418627917.html, = "current Budget"

本示例关闭工作簿Book1.xls,但不提示用户保存所作更改。Book1.xls 中的所有

更改都不会保存。

Application.DisplayAlerts = False

Workbooks("BOOK1.XLS").Close

Application.DisplayAlerts = True

本示例设置保存文件时显示提示,要求用户输入汇总信息。

Application.PromptForSummaryInfo = True

本示例显示Microsoft Excel 的完整路径。

Private Sub aa()

MsgBox "The path is " & Application.Path

End Sub

示例显示每一个可用加载宏的路径及文件名。

For Each a In AddIns

MsgBox a.FullName

Next a

ChDir 语句

改变当前的目录或文件夹。

ChDir path

在Power Macintosh 中,默认驱动器总是改为在path 语句中指定的驱动器。完整

路径指定由卷标名开始,相对路径由冒号(:) 开始. ChDir 可以辨认路径中指定的

别名:

ChDir "MacDrive:Tmp" ' 在Macintosh 中

本示例显示当前路径分隔符。

MsgBox "The path separator character is " & _

Application.PathSeparator

Move 方法

将一个指定的文件或文件夹从一个地方移动到另一个地方。

语法

object.Move destination

Move 方法语法有如下几部分:

部分描述

object 必需的。始终是一个File 或Folder 对象的名字。

destination 必需的。文件或文件夹要移动到的目标。不允许有通配符。CreateFolder 方法

创建一个文件夹。

语法

object.CreateFolder(foldername)

reateFolder 方法有如下几部分:

部分描述

object 必需的。始终是一个FileSystemObject 的名字。

foldername 必需的。字符串表达式,它标识创建的文件夹。

本示例使用MkDir 语句来创建目录或文件夹。如果没有指定驱动器,新目录或文件

夹将会建在当前驱动器中。

MkDir "MYDIR" ' 建立新的目录或文件夹。

Name 语句示例

本示例使用Name 语句来更改文件的名称。示例中假设所有使用到的目录或文件夹都

已存在。在Macintosh 中,默认驱动器名称是―HD‖ 并且路径部分由冒号取代

反斜线隔开。

Dim OldName, NewName

OldName = "OLDFILE": NewName = "NEWFILE" ' 定义文件名。Name OldName As NewName ' 更改文件名。

OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"

Name OldName As NewName ' 更改文件名,并移动文件。

本示例显示当前默认文件路径。

MsgBox "The current default file path is " & _

Application.DefaultFilePath

本示例设置替换启动文件夹。

Application.AltStartupPath = "C:\EXCEL\MACROS"

FolderExists 方法

如果指定的文件夹存在返回True,不存在返回False。

语法

object.FolderExists(folderspec)

本示例在单元格中启用编辑。

Application.EditDirectlyInCell = True

程序说明:

几种用VBA在单元格输入数据的方法:

Public Sub Writes()

1-- 2 方法,最简单在"[ ]" 中输入单元格名称。

1 [A1] = 100 '在A1 单元格输入100。

2 [A2:A4] = 10 '在A2:A4 单元格输入10。

3-- 4 方法,采用Range(" ")," " 中输入单元格名称。

3 Range("B1") = 200 '在B1 单元格输入200。

4 Range("C1:C3") = 300 '在C1:C3 单元格输入300。

5-- 6 方法,采用Cells(Row,Column),Row是单元格行数,Column是单元格栏数。

5 Cells(1, 4) = 400 '在D1 单元格输入400。

6 Range(Cells(1, 5), Cells(5, 5)) = 50 '在E1:E 5单元格输入50。

End Sub

你点选任何单元格,按Selection 按钮,則则所点选的单元格均会被输入文字"Test"。

Public Sub Selection1()

Selection.Value = "Test" '在任何你点选的单元格输入文字"Test"。

End Sub

VBALesson2 程序说明:

几种如何把别的工作表Sheet4 数据,读到这个工作表的方法:在被读取的单元格

前加上工作表名称Sheet4。

Public Sub Writes()

1-- 2 方法,最简单在被读取的"[ ]" 前加上被读取的工作表名称Sheet4。

1 [A1] = Sheet4.[A1] '把Sheet4 A1 单元格的数据,读到A1单元格。

2 [A2:A4] = Sheet4.[B1] ''把Shee4 工作表单元格B1 数据,读到A2:A4

单元格。

3-- 4 方法,在被读取的工作表Range(" ")的Range 前加上被读取的工作表名称

Sheet4。

3 Range("B1") = Sheet4.Range("B1") ''把Shee4工作表单元格B1 数据,读

到B1 单元格。

4 Range("C1:C3") = Sheet4.Range("C1") '把Shee4 工作表单元格C1 数据

,读到C1:C3 单元格。

5-- 6 方法,在被读取的工作表Cells(Row,Column),Cells 前加上被读取工作表

名称Sheet4。

5 Cells(1, 4) = Sheet4.Cells(1, 4) '把Shee4 工作表单元格D1 数据,读

到D1 单元格。

6 Range(Cells(1, 5), Cells(5, 5)) = Sheet4.Cells(1, 5) '把Shee4 工

作表单元格E1 数据,读到E1:E 5单元格。

End Sub

你点选任何单元格,按Selection 按钮,则所点选的单元格均会被输入Shee4 工

作表单元格F1 数据。

Public Sub Selection1()

Selection.Value = Sheet4.[F1] '把Shee4 工作表单元格F1 数据,读到任

何你点选的单元格。

End Sub

VBALesson3 程序说明:

如何利用Worksheet_SelectionChange 输入数据的方法。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target = 100

End Sub

Target 指的是你鼠标所选的单元格,Worksheet_SelectionChange() 事件的参数

可以是一个也可以是好几个单元格。

Range 是Excel 特有的变量形态,叫范围。

Target As Rang 是把Target 这个参数设定为 Range 变量形态。

Target = 100 是把你点选的单元格输入数字100。

VBALesson4 程序说明:

如何利用Worksheet_SelectionChange 在限定的单元格输入数据的方法。Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row >= 2 And T arget.Column = 2 Then

Target = 100

End If

End Sub

If ... Then ... End If 这是我们学的这一个逻辑判断语句。

Target.Row >= 2,指的是鼠标选定的单元格的行大于或等于2。

Target.Column = 2 ,指的是鼠标选定的单元格的栏等于2。

If Target.Row >= 2 And Target.Column = 2 Then 指的是只有在Target.Row >=

2及Target.Column = 2二个条件成立时。

就是(Target.Row >= 2) 为True及(Target.Column = 2)为True时,才执行下面的

程序Target=100,

也就是 B 栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输

入数据。

VBALesson5 程序说明:

比较Worksheet_SelectionChange() 与用按钮CommandButton1_Click() 来执行

程序二者的方法与写法有何不同。

Worksheet_SelectionChange()事件

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row >= 2 And T arget.Column = 2 Then

Target = 100

End If

End Sub

按鈕CommandButton1_Click()

Private Sub CommandButton1_Click()

If ActiveCell.Row >= 2 And ActiveCell.Column >= 3 Then ActiveCell = 100

End If

End Sub

二者执行方法最大的地方,在于Worksheet_SelectionChange() 是自动的,你不用

了解他是怎么完成工作的。

按钮CommandButton1_Click() 是人工的,比SelectionChange()多一道手续,

就是要去按那接钮,程序才会执行。

SelectionChange() 有一个参数Target 可用;CommandButton1_Click ()没有。

所以我们要用ActiveCell 内定函数来取代Target,ActiveCell 与Target最大的

不同点他只能指定一个单元格。

就是你选取多个单元格也只有最上面的单元格会加上数据;用Selection 取代ActiveCell,用法就跟Target 一样了。

VBALesson 6 程序说明:

完整的If...Then ┅End 逻辑判断式。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row >= 2 And T arget.Column = 2 Then

Target = 200

ElseIf Target.Row >= 2 And Target.Column = 3 Then

Target = 300

ElseIf Target.Row >= 2 And Target.Column = 2 Then

Target = 400

Else

Target = 500

End If

End Sub

这是个完整的If 逻辑判断式,意思是说,假如If 後的判断式条件成立的话,就

执行第二条程序,否则假如ElseIf 後的判断式条件成立的话,就执行第四条程序

,否则假如另一个ElseIf 後的判断式条件成立的话,就执行第六条程序。Else 的意思是说,假如以上条件都不成立的话,就执行第八条程序。

他的执行方式是假如IF 的条件成立的话,就不执行其它ElseIf 及Else 的逻辑判

断式,假如If 後的条件不成立的话才会执行ElseIf 或Else 逻辑判断式。第二

个ElseIf後的条件因为与IF 後的条件一样,所以这个判断式後面的Target=400

将是永远无法执行到的程序。

VBALesson 7 程序说明∶我们为什麽要用变数。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i , j As Integer

Dim k As Range

i = T arget.Row

j = T arget.Column

Set k = Target

If i >= 2 And j = 2 Then

k = 200

ElseIf i >= 2 And j = 3 Then

k = 300

ElseIf i >= 2 And j = 4 Then

k = 400

Else

k = 500

End If

End Sub

跟VBALesson 6比较,程序是不是明朗多了,在前课重复的用Target.Row,Target.Column及Target来写程序是不是有一点烦。用变量的第一个好处大家马上感

觉得出来,就是可以简化程序。

使用变量前,你得先宣告变量。宣告变量的方法是在"Dim " 后面写上变量" i " As 后面接上变量的形态"Integer"。

Dim i , j As Integer 就是宣告i 与 j 为整数变量,这是同时宣告二个变量

i 与j 所以要在二个变量间加个" , "号。

Dim k As Range 是宣告k 为范围资料形态,Range这是Excel 特有的资料形态

i = T arget.Row是把当前单元格的行数,指定给变量i。

j = T arget.Column 是把当前单元格的栏数,指定给变量j。

Set k = Target 是把当前的单元格,指定给变量k。

用像i 与j 这样简单的变量,在程序的前面你可能还记得 i 或j 代表着

什厶。程序写长了,你可能忘记i 或j 代表着什厶。所以最好的方法是用比较有

意义的代号,来为变量命名如iRow 或 iCol 来取代 i 及j 。

VBALesson 8 程序说明∶体会一下Worksheet_Change()事件。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim iRow, iCol As Integer

iRow = Target.Row

iCol = Target.Column

If iRow >= 2 And iCol = 2 And Target "" Then

Application.EnableEvents = False

Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2

Application.EnableEvents = True

ElseIf iRow >= 2 And iCol = 2 And T arget = "" Then

Cells(iRow, iCol + 1) = ""

Else

Cells(iRow, iCol + 1) = ""

End If

End Sub

前几个教程都是用Worksheet_SelectionChange 事件来举例子,大家应该能体会他

是怎厶一回事了吧。

这个教程就是要让你来体会什厶是Worksheet_Chang()事件。因为这二个事件在VBA

都是非常有用的,所以一定要了解。

简单的说,前者是你鼠标移动到那个单元格,就触发那个事件的执行。後者是要等到

你点选的单元格,数 有了改变才会触发事件的执行。二者执行的时机一前一後。Target "" 是代表限定当前的单元格要是有数 的,才会执行以下三行的程序。Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2,是你在B 栏输入数 时,C

栏将可得到B 栏二倍的数 。

Target = "" 是限定当前的单元格要是没有数 的,才会执行以下一行的程序。Cells(iRow, iCol + 1) = "",是把C 栏的数 清成空格。

Application.EnableEvents = False与Application.EnableEvents = True,这是

个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序。它的目的在

抑制事件连锁执行。简单的说就是,在B 字段所触发的事件,不愿在其它单元格再

触发另一个Worksheet_Change()事件。

VBALesson 9 程序说明∶体会一下Worksheet_Change()事件连锁反应。Private Sub Worksheet_Change(ByVal Target As Range)

Dim iRow As Integer

iRow = Target.Row

Application.EnableEvents = False

Cells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2)

Application.EnableEvents = True

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim iRow As Integer

iRow = Target.Row

'Application.EnableEvents = False

Cells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2)

'Application.EnableEvents = True

End Sub

这个程序的目的是要在B2 输入新的数 时,C2 会将B2 输入的新数 加上C2 原

有的数 呈现在C2 上。

照上面有加上Application.EnableEvents = False 程序执行当然没问题。现在你在Application.EnableEvents = False 与Application.EnableEvents =

True 前加上「'」看看。

程序前加上「'」的目的是要使「'」之后的文字变成说明文字,程序执行时是会跳

过说明文字,不执行说明文字的内容。

程序前加上「'」符号后,文字会变成绿色。

执行第二个程序时,你将发现C2 不会按你所要求的,呈现结果。

这就是所谓的事件连锁反应。

请问这个宏该如何写!

我想运行一个宏,就能在当前工作表B3上填上一条公式;这条公式的结果是所有工作

表上的B4单元格的和.请问这个宏该如何写.谢谢!

Sub gg()

Dim sh As Worksheet, shname$

For Each sh In Worksheets

shname = https://www.doczj.com/doc/e418627917.html,

ActiveSheet.Range("b3").value = ActiveSheet.Range("b3").value + Worksheets(shname).Range("b4")

Next

End Sub

VBA中怎样创建一个名为―table‖的新工作表

通过VBA编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对于

相关主题
文本预览
相关文档 最新文档