Excel——宏教程(2)
一)、处理单元格
1、直接赋值与引用
将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量,这是在excel中最简单的单元格赋值及引用方法。
如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I,并将I+1的值赋给当前工作表中的B1单元格:
Dim I As Integer
I=Worksheets("Sheet1").Cells(1,1)
Cells(1,2).Select '选定B1单元格,使其成为当前单元格 ActiveCell=I+1 '以I+1为当前单元格赋值
2、用公式赋值
在宏的使用中,可能会更多地用公式来给单元格赋值。
如下例将相对于活动单元格左侧第4列、向上第6行至向上第2行的单元格数值之和赋给活动单元格(以本行、本列为第0行、0列):
ActiveCell.Formula="=AVERAGE(R[-6]C[-4]:R[-2]C[-4])"
3、引用其它工作表中的单元格
当赋值公式中需要引用其它工作表中的单元格时,在被引用的单元格前加上"工作表名!"即可。
如以下即在赋值中引用了"Sheet1"工作表中的A1至A4单元格:
Range("E10").Formula="=SUM(Sheet1!R1C1:R4C1)"
但需注意的是:当被引用的工作表名中含有某些可能引起公式歧义的字符时,需要用单引号’将工作表名括起来。如:
Worksheets("Sheet1").ActiveCell.Formula="=Max('1-1剖面'!D3:D5)"
4、引用其它工作簿中的单元格
在被引用单元格所在工作表名前加上"[工作簿名]",即可引用其它工作簿中的单元格。如:
ActiveCell.Formula="=MAX([Book1.xls]Sheet3!R1C:RC[4])"
同样需注意的是:当被引用的工作簿名中含有某些可能引起公式歧义的字符时,需要用中括号"[“、”]"及单引号’将工作簿名括起来。如:
Cells(1,2).Formula="=MIN('[1995-2000总结.xls]1995-1996年'! $A$1:$A$6)"
5、避免循环引用
在上述公式赋值过程中,应避免在公式中引用被赋值的单元格,防止循环引用错误。
6、添加批注
可按如下方法格给单元格添加批注:
Dim 批注文本 As String
批注文本=“批注示例” '准备批注文本
ActiveCell.AddComment '添加批注
ActiveCell.Comment.Text Text:=临时 '写入批注文本
ActiveCell.Comment.Visible=False '隐藏批注[dvnews_page]
7、添加、删除、复制、剪切、粘贴单元格
Range("D10").Insert Shift:=xlToRight '在D10单元格处添加一新单元格,原D10格右移
Range("C2").Insert Shift:=xlDown '在C2单元格处添加一新单元格,原C2格下移
Rows(2).EntireRow.Insert '在第2行前添加一空白行,原第2行下移
Columns(3).EntireColumn.Insert '在C列前添加一空白列,原C列右移
Columns("A:D").Delete Shift:=xlToLeft '删除A列至D列,其右侧列左移
Rows("3:5").Delete Shift:=xlUp '删除第3行至第5行,其下方行上移
Range("B2").EntireRow.Delete '删除第2行
Range("C4").EntireColumn.Delete '删除C列
Range("B10:C13").Copy '复制B10至C13单元格区域
Cells(1,2).Cut '剪切B1单元格
Range("D10").Select
ActiveSheet.Paste '自D10单元格起粘贴剪贴板中的内容
二)、图表
1、工作表图表
以下为一添加工作表图表的实例。
Charts.Add after:=Worksheets("Sheet1") '在"Sheet1"工作表之后添加新图表工作表
ActiveChart.ChartType=xlXYScatterSmooth '图表类型为XY平滑线散点图
ActiveChart.SetSourceData Source:=Sheets("结点坐标").Range("A1:B69"), PlotBy:= _
xlColumns '图表数据来源于"结点坐标"工作表的A1至B69单元格,且按列绘图。
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "节点坐标" '图表标题"节点坐标"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x" 'x轴标题"x"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y" 'y轴标题"y"
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True '显示x轴主网格线,默认情况下为显示
.HasMinorGridlines = True '显示x轴次网格线,默认情况下为不显示
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True '标出x轴主网格值,默认情况下为标注
.HasMinorGridlines = False '取消x轴次网格值标注,默认情况下为不标注
End With
ActiveChart.Legend.Position = xlRight '图例显示在图表右侧
2、嵌入式图表
嵌入式图表仅在添加方式及引用格式上与工作表图表有所不同,而对图表的设置基本类似。详见下例。
Set嵌入表=ActiveSheet.ChartObjects.Add(0,0,200,300) '在当前工作表(0,0)坐标处添加宽200,高300的嵌入式图表
嵌入表.Chart.ChartType = xlColumnClustered '图表类型为簇状柱形图
嵌入表.Chart.SetSourceData Source:=Sheets(1).Range("A2:B2"), PlotBy:=xlRows
'设置图表数据来源
With 嵌入表.Chart
.HasTitle = False '无图表标题
.Axes(xlCategory, xlPrimary).HasTitle = False '无x轴标题
.Axes(xlValue, xlPrimary).HasTitle = False '无y轴标题
End With[dvnews_page]
三)、工作表
1、添加
Sheets.Add before:=Sheets(1) '在第1工作表前添加新工作表
Sheets.Add after:=Sheets(Sheets.Count) '在最后工作表后添加新工作表
2、移动
ActiveSheet.Move before:=Sheets(2) '将当前工作表移动至第2工作表之前
3、命名
ActiveSheet.Name="工作表名" '将当前工作表命名为"工作表名"
4、删除
可以用以下语句删除当前工作表。
ActiveSheet.Delete
但在删除前excel会自动弹出提示框,需在用户确认后方可执行删除。为避免这一干扰,可以先用以下语句关闭excel的警告提示。
Application.DisplayAlerts = False
在删除完成后,再重新打开excel的警告提示
Application.DisplayAlerts = True
四)、工作簿
excel的宏对工作簿的操作主要为保存。
Dim 存盘文件名 As String
ActiveWorkbook.Save '保存当前工作簿
存盘文件名="工作表名"
ActiveWorkbook.SaveAs Filename:= 存盘文件名 '当前工作簿另存为"工作表名.xls"
在另存时,若指定的存盘文件名不包含路径,则保存在该工作簿的打开目录下。而若此存盘文件已存在,也可用关闭excel警告提示的方法以免其自动弹出提示框。