本示例为设置密码窗口(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编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对于