VBA中简单实用的语句

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用语句
(1).工作簿
1.On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息
2.On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置
3.Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示
4.Application.ScreenUpdating=False '关闭屏幕刷新
Application.ScreenUpdating=True '打开屏幕刷新
'返回活动工作薄的名称
6.ActiveWorkbook.WindowState=xlMaximized '将当前工作簿最大化
7.Sheets(Sheet1).Name= “Sum” '将Sheet1命名为Sum
8.Worksheets(Array(“sheet1”,”sheet2”)).Select '同时选择工作表1和工作表2
edRange.FormatConditions.Delete '删除当前工作表中所有的条件格式
10.ActiveSheet.PageSetup.Orientation=xlLandscape或ActiveSheet.PageSetup.Orientation=2 '将页面设置更改为横向
11.Cells.Select '选定当前工作表的所有单元格
12.Range(“A1”).ClearContents '清除活动工作表上单元格A1中的内容
Selection.ClearContents '清除选定区域内容
Range(“A1:D4”).Clear '彻底清除A1至D4单元格区域的内容,包括格式
13.ActiveCell.Offset(1,0).Select '活动单元格下移一行,同理,可下移一列
Range(“A1”).Offset(ColumnOffset:=1) 或 Range(“A1”).Offset(,1) '偏移一列
Range(“A1”).Offset(Rowoffset:=-1) 或 Range(“A1”).Offset(-1) '向上偏移一行
14.ActiveWindow.RangeSelection.Value=XX '将值XX输入到所选单元格区域中
15.ActiveWindow.RangeSelection.Count '活动窗口中选择的单元格数
16.Range(“A1”).Interior.ColorIndex 或 Cells(1,1).Interior.ColorIndex '获取单元格A1背景色
s.Add Name:=”MyArray”,RefersTo:=ArrayNum '将数组ArrayNum命名为MyArray
s.Add Name:=”ProduceNum”:,RefersTo:=”=$B$1”,Visible:=False '将名称隐藏
19.Cells(8,8).FormulaArray=”=SUM(R2C[-1]:R[-1]C[-1]*R2C:R[-1]C)” '在单元格中输入数组公式。注意必须使用R1C1样式的表达式
(2).图表
1.ActiveSheet.ChartObjects.Count '获取当前工作表中图表的个数
2.ActiveSheet.ChartObjects(“Chart1”).Select '选中当前工作表中图表Chart1
3.Sheets(“Chart2”).ChartArea.Interior.ColorIndex=2 '更改图表工作表中图表区的颜色
4.Charts.Add '添加新的图表工作表
5.ActiveChart.PlotArea.Interior.ColorIndex=xlNone '将绘图区颜色变为白色
(3).窗体
1.MsgBox “Hello!” '消息框中显示消息Hello
2

.Ans=MsgBox(“Continue?”,vbYesNo) '在消息框中点击“是”按钮,则Ans值为vbYes;点击“否”按钮,则Ans值为vbNo。
If MsgBox(“Continue?”,vbYesNo)<>vbYes Then Exit Sub '返回值不为“是”,则退出
3.MsgBox “This is the first line.” & vbNewLine & “Second line.” '在消息框中强制换行,可用vbCrLf代替vbNewLine。
erform1.Show '显示用户窗体
Userform1.Hide '隐藏用户窗体
Unload Userform1 或 Unload Me '卸载用户窗体
5.Application.EnableEvents=False '禁用所有事件
Application.EnableEvents=True '启用所有事件
6.Application.OnTime Now + TimeValue("00:00:15"), "myProcedure" '等待15秒后运行myProcedure过程
7.Application.OnTime DateSerial(2006,6,6)+TimeValue(“16:16:16”),”BaoPo” '在2006年6月6日的16:16:16开始运行BaoPo过程
8.Application.Calculation = xlCalculationManual '设置工作簿手动计算
Application.Calculation = xlCalculationAutomatic '工作簿自动计算
9.Application.AutoCorrect.AddReplacement "葛洲坝", "三峡" '自动将在工作表中进行输入的"葛洲坝"更正为"三峡"
10.Date = #6/6/2006#
Time = #6:16:16 AM# '将系统时间更改为2006年6月6日上午6时16分16秒
11.ActiveCell.Hyperlinks.Add Anchor:=ActiveCell, _Address:=
"C:\Windows\System32\Calc.exe", ScreenTip:="按下我,就会开启Windows计算器",TextToDisplay:="Windows计算器" '在活动单元格中设置开启Windows计算器链接
ActiveCell.Value = Shell("C:\Windows\System32\Calc.exe", vbNormalFocus) '开启Windows计算器
12.工作表中的窗体按钮禁用后,按钮形状不变,字体不变,从外表上无法看出其已禁用,如何设置属性使其像控件按纽那样明显的禁用?
With ActiveSheet.Buttons(1)
.Enabled = False
ActiveSheet.Shapes(.Caption).DrawingObject.Font.ColorIndex = 15
End With
復原的方法
With ActiveSheet.Buttons(1)
.Enabled = True
ActiveSheet.Shapes(.Caption).DrawingObject.Font.ColorIndex = xlAutomatic
End With
(4).对象
1.Set ExcelSheet = CreateObject("Excel.Sheet") '创建一个Excel工作表对象
ExcelSheet.Application.Visible = True '设置Application对象使Excel可见
ExcelSheet.Application.Cells(1, 1).Value = "Data" '在表格的第一个单元中输入文本
ExcelSheet.SaveAs "C:\TEST.XLS" '将该表格保存到C:\test.xls 目录
ExcelSheet.Application.Quit '关闭 Excel
Set ExcelSheet = Nothing '释放该对象变量
2.声明并创建一个Excel对象引用
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = C

reateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
3.Application.OnKey “^I”,”macro” '设置Ctrl+I键为macro过程的快捷键
Application.Transpose(Array(“Sun”,”Mon”,”Tur”,”Wed”,”Thu”,”Fri”,”Sat”)) '返回一个垂直的数组
Application.WindowState '返回窗口当前的状态
Application.WindowState = xlMinimized '窗口最小化
Application.WindowState = xlMaximized '窗口最大化
Application.WindowState = xlNormal '窗口正常状态
Application.Interactive=False '忽略键盘或鼠标的输入
4.Range(“A65536”).End(xlUp).Row+1 '返回A列最后一行的下一行
cell.Range(“A1”).HasFormula '检查单元格或单元格区域中的第一个单元格是否含有公式
cell.HasFormula '工作表中单元格是否含有公式
Range(“D5:D10”).Cells(1,1) '返回单元格区域D5:D10中左上角单元格
5.rng.Replace “ “,”0” '用0替换单元格区域中的空单元格
(5).工作簿
1.ThisWorkbook.BuiltinDocumentProperties(“Last Save Time”)或
Application.Caller.Parent.Parent.BuiltinDocumentProperties(“Last Save Time”) '返回上次保存工作簿的 日期和时间
2.ThisWorkbook.BuiltinDocumentProperties("Last Print Date")或
Application.Caller.Parent.Parent.BuiltinDocumentProperties(“Last Print Date”) '返回上次打印或预览工作簿的日期和时间
3.ThisWorkbook.Path ActiveWorkbook.Path '返回当前工作簿的路径(注:若工作簿未保存,则为空)
4.Application.Visible = False '隐藏工作簿
Application.Visible = True '显示工作簿
(6).工作表
1.ActiveSheet.Columns("B").Insert '在A列右侧插入列,即插入B列
ActiveSheet.Columns("E").Cut
ActiveSheet.Columns("B").Insert '以上两句将E列数据移至B列,原B列及以后的数据相应后移
ActiveSheet.Columns("B").Cut
ActiveSheet.Columns("E").Insert '以上两句将B列数据移至D列,原C列和D列数据相应左移一列
2.ThisWorkbook.Worksheets(“sheet1”).Visible=xlSheetHidden '正常隐藏工作表,同在Excel菜单中选择“格式——工作表——隐藏”操作一样
ThisWorkbook.Worksheets(“sheet1”).Visible=xlSheetVeryHidden '隐藏工作表,不能通过在Excel菜单中选择“格式——工作表——取消隐藏”来重新显示工作表
ThisWorkbook.Worksheets(“sheet1”).Visible=xlSheetVisible '显示被隐藏的工作表
3.ThisWorkbook.Worksheets("Sheet1").Rows(1).Hidden = True '将工作表Sheet1中的行1隐藏
ActiveCell.EntireRow.Hidden = True

'将当前工作表中活动单元格所在的行隐藏
(7).公式与函数
1.WorksheetFunction.CountA(Cell.EntireColumn) '返回该单元格所在列非空单元格的数量
WorksheetFunction.CountA(Cell.EntireRow) '返回该单元格所在行非空单元格的数量
WorksheetFunction.CountA(Cells) '返回工作表中非空单元格数量
2.ActiveSheet.Range(“A20:D20”).Formula=”=Sum(R[-19]C:R[-1]C” '对A列至D列前19个数值求和
3.Private Sub Worksheet_SelectionChange(ByVal Target As Range '选定A1时要输入密码
If Target.Address = "$A$1" Then
A = InputBox("请输入密码", "officefans")
If A = 1 Then [A1].Select Else [A2].Select
End If
End Sub


方法
1.计算两日期之间相差多少天
DateDiff("d",开始时间,结束时间)'("d"是表示要计算相差天数,如果要计算年则用"y"月用"m")
Weekday(Date) '获取今天的星期,以数值表示,1-7分别对应星期日至星期六
例:
(1).语句示例:DateDiff("d", Range("A1").Value, Range("B1").Value)
(2).函数示例:
Dim TheDate As Date
Dim Msg
TheDate = InpurBox("请输入一个日期")
Msg = "Days from today: " & DateDiff("d", Now, TheDate)
MsgBox Msg
(3).单元格公式:
=DATEDIF(DATE(MID(F42,1,4),MID(F42,5,2),MID(F42,7,2)),DATE(MID(G42,1,4),MID(G42,5,2),MID(G42,7,2)),"d")
*注*先把字符串格式的日期解析成日期类型,用mid方法 : mid(text,start_num,num_chars)
可以从字符串中取出子字符串,这里start_num是开始位置(最小值为1,不是0),num_chars是取出多少个字符串
例如F42单元格内容为20111203,那么解析成日期可以用=DATE(MID(F42,1,4),MID(F42,5,2),MID(F42,7,2))
MID(F42,1,4)就是将F42单元格从第一位开始截取4位这样就得到了2011作为年,MID(F42,5,2),MID(F42,7,2)同理得到月份和日期

2.得到包含指定内容的单元格所在行,列
Dim ThisCloumn, ThisRow
For MaxC = 1 To Cells(1, 256).End(xlUp).column Step 1 '第二列内容为"更新日期"的单元格所在列
If InStr(Cells(2, MaxC), "更新日期:") Then
ThisCloumn = MaxC
Exit For
End If
Next MaxC
For MaxR = 1 To Cells(65536, 1).End(xlUp).row Step 1 '第10行内容为"预定"的单元格所在行
If InStr(Cells(MaxR, 10), "预定") Then
ThisRow = MaxR
Exit For
End If
Next MaxR
得到所要的行和列的序号后用Exit For跳出For循环

3.单元格赋值示例
示例一
Sub test1()
Worksheets("Sheet1").Range("A5").Value = 22
MsgBox "工作表Sheet1内单元格A5中的值为" _& Worksheets("Sheet1").Range("A5").Value
End Sub
示例二
Sub test2()
Worksheets("Sheet1").Range("A1").Value = _Worksheets("Sheet1").Range("A5").Value
MsgBox "现在A1单元格中的值也为" & _Worksheets("Sheet1").Range("A5").Value
End Sub
示例三


Sub test3()
MsgBox "用公式填充单元格,本例为随机数公式"
Range("A1:H8").Formula = "=Rand()"
End Sub
示例四
Sub test4()
Worksheets(1).Cells(1, 1).Value = 24
MsgBox "现在单元格A1的值为24"
End Sub
示例五
Sub test5()
MsgBox "给单元格设置公式,求B2至B5单元格区域之和"
ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"
End Sub
示例六
Sub test6()
MsgBox "设置单元格C5中的公式."
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
End Sub

4.单元格引用示例
Sub Random()
Dim myRange As Range
'设置对单元格区域的引用
Set myRange = Worksheets("Sheet1").Range("A1:D5")
'对Range对象进行操作
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
示例说明:可以设置Range对象变量来引用单元格区域,然后对该变量所代表的单元格区域进行操作。

5.清除单元格示例
示例一
清除单元格中的内容(ClearContents方法)
Sub testClearContents()
MsgBox "清除指定单元格区域中的内容"
Worksheets(1).Range("A1:H8").ClearContents
End Sub
示例二
清除单元格中的格式(ClearFormats方法)
Sub testClearFormats()
MsgBox "清除指定单元格区域中的格式"
Worksheets(1).Range("A1:H8").ClearFormats
End Sub
示例三
清除单元格中的批注(ClearComments方法)
Sub testClearComments()
MsgBox "清除指定单元格区域中的批注"
Worksheets(1).Range("A1:H8").ClearComments
End Sub
示例四
清除单元格中的全部,包括内容、格式和批注(Clear方法)
Sub testClear()
MsgBox "彻底清除指定单元格区域"
Worksheets(1).Range("A1:H8").Clear
End Sub

6.其他示例
Range和Cells的用法
Sub test()
'设置单元格区域A1:J10的边框线条样式
With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
End Sub
示例说明:可用 Range(cell1, cell2) 返回一个 Range 对象,其中cell1和cell2为指定起始和终止位置的Range对象。
选取单元格区域(Select方法)
Sub testSelect()
'选取单元格区域A1:D5
Worksheets("Sheet1").Range("A1:D5").Select
End Sub
基于所选区域偏离至另一区域(Offset属性)
Sub testOffset()
Worksheets("Sheet1").Activate
Selection.Offset(3, 1).Select
End Sub
示例说明:可用Offset(row, column)(其中row和column为行偏移量和列偏移量)返回相对于另一区域在指定偏移量处的区域。如上例选定位于当前选定区域左上角单元格的向下三行且向右一列处单元格区域。
选取距当前单元格指定行数和列数的单元格
Sub ActiveCellOffice()
MsgBox "显示距当前单元格第3列、第2行的单元格中的值"
MsgBox ActiveCell.Offset(3, 2).Value
End Sub
调整区域的大小(Resize属性)
Sub ResizeRange()
Dim numRows As Integer, numcolumns As Integer
Worksheets("Sheet1").Activate
numRows = Selection.Rows.Count
numcolumns = Selection.Columns.Count
Selection.Resize(numRows +

1, numcolumns + 1).Select
End Sub
示例说明:本示例调整所选区域的大小,使之增加一行一列。
选取多个区域(Union方法)
Sub testUnion()
Dim rng1 As Range, rng2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set rng1 = Range("A1:B2")
Set rng2 = Range("C3:D4")
Set myMultiAreaRange = Union(rng1, rng2)
myMultiAreaRange.Select
End Sub
示例说明:可用 Union(range1, range2, ...) 返回多块区域,即该区域由两个或多个连续的单元格区域所组成。如上例创建由单元格区域A1:B2和C3:D4组合定义的对象,然后选定该定义区域。
激活已选区域中的单元格
Sub ActivateRange()
MsgBox "选取单元格区域B2:D6并将C4选中"
ActiveSheet.Range("B3:D6").Select
Range("C5").Activate
End Sub

选取指定条件的单元格(SpecialCells方法)
Sub SelectSpecialCells()
MsgBox "选择当前工作表中所有公式单元格"
ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).Select
End Sub

选取矩形区域(CurrentRegion属性)
'选取包含当前单元格的矩形区域
'该区域周边为空白行和空白列
Sub SelectCurrentRegion()
MsgBox "选取包含当前单元格的矩形区域"
ActiveCell.CurrentRegion.Select
End Sub

选取当前工作表中已用单元格(UsedRange属性)
'选取当前工作表中已使用的单元格区域
Sub SelectUsedRange()
MsgBox "选取当前工作表中已使用的单元格区域" _& vbCrLf & "并显示其地址"
edRange.Select
MsgBox edRange.Address
End Sub

7.动态数组
arr(-19 to 8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8, 如果用语句返回就是:
Sub t1()
Dim arr(-19 To 8)
MsgBox UBound(arr) '返回最大编号,结果为8
MsgBox LBound(arr) '返回最小编号,结果为-19
End Sub

如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例

Sub t2()
Dim arr(-19 To 8, 2 To 5)
MsgBox UBound(arr) '返回第1维(行的)最大编号,结果为8
MsgBox LBound(arr) '返回第1维(行的)小编号,结果为-19
MsgBox UBound(arr, 2) '返回第2维(列的)最大编号,结果为5
MsgBox LBound(arr, 2) '返回第2维(列的)最小编号,结果为2
End Sub

Sub t3()
Dim arr
arr = Sheets(1).UsedRange 'Usedrange的行数和列数是未知的
MsgBox UBound(arr, 1) '可以计算这个区域有多少行
MsgBox UBound(arr, 2) '可以计算出这个区域有多少列
End Sub

相关文档
最新文档