工作表(Worksheet)基本操作应用示例
在编写代码时,经常要引用工作表的名字、知道工作表在工作簿中的位置、增加工作表、删除工作表、复制工作表、移动工作表、重命名工作表,等等。下面介绍与此有关及相关的一些属性和方法示例。
[示例04-01]增加工作表(Add方法) Sub AddWorksheet()
MsgBox "在当前工作簿中添加一个工作表"
Worksheets.Add
MsgBox "在当前工作簿中的工作表sheet2之前添加一个工作表"
Worksheets.Add before:=Worksheets("sheet2")
MsgBox "在当前工作簿中的工作表sheet2之后添加一个工作表"
Worksheets.Add after:=Worksheets("sheet2")
MsgBox "在当前工作簿中添加3个工作表"
Worksheets.Add Count:=3
End Sub
示例说明:Add方法带有4个可选的参数,其中参数Before和参数After指定所增加的工作表的位置,但两个参数只能选一;参数Count用来指定增加的工作表数目。
[示例04-02]复制工作表(Copy方法) Sub CopyWorksheet()
MsgBox "在当前工作簿中复制工作表sheet1并将所复制的工作表放在工作表sheet2之前"
Worksheets("sheet1").Copy Before:=Worksheets("sheet2")
MsgBox "在当前工作簿中复制工作表sheet2并将所复制的工作表放在工作表sheet3之后"
Worksheets("sheet2").Copy After:=Worksheets("sheet3")
End Sub
示例说明:Copy方法带有2个可选的参数,即参数Before和参数After,在使用时两个参数只参选一。
[示例04-03]移动工作表(Move方法) Sub MoveWorksheet()
MsgBox "在当前工作簿中将工作表sheet3移至工作表sheet2之前"
Worksheets("sheet3").Move Before:=Worksheets("sheet2")
MsgBox "在当前工作簿中将工作表sheet1移至最后"
Worksheets("sheet1").Move After:=Worksheets(Worksheets.Count)
End Sub
示例说明:Move方法与Copy方法的参数相同,作用也一样。
[示例04-04]隐藏和显示工作表(Visible属性) [示例04-04-01]
Sub testHide()
MsgBox "第一次隐藏工作表sheet1"
Worksheets("sheet1").Visible = False
MsgBox "显示工作表sheet1"
Worksheets("sheet1").Visible = True
MsgBox "第二次隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetHidden
MsgBox "显示工作表sheet1"
Worksheets("sheet1").Visible = True
MsgBox "第三次隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetHidden
MsgBox "显示工作表sheet1"
Worksheets("sheet1").Visible = xlSheetVisible
MsgBox "第四隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetVeryHidden
MsgBox "显示工作表sheet1"
Worksheets("sheet1").Visible = True
MsgBox "第五隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetVeryHidden
MsgBox "显示工作表sheet1"
Worksheets("sheet1").Visible = xlSheetVisible
End Sub
示例说明:本示例演示了隐藏和显示工作表的各种情形。其中,使用xlSheetVeryHidden常量来隐藏工作表,将不能通过选择工作表菜单栏中的“格式”——“工作表”——“取消隐藏”命令来取消隐藏。
[示例04-04-02]
Sub ShowAllSheets()
MsgBox "使当前工作簿中的所有工作表都显示(即将隐藏的工作表也显示)"
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = True
Next ws
End Sub
[示例04-05]获取工作表数(Count属性) [示例04-05-01]
Sub WorksheetNum()
Dim i As Long
i = Worksheets.Count
MsgBox "当前工作簿的工作表数为:" & Chr(10) & i
End Sub
[示例04-05-02]
Sub WorksheetNum()
Dim i As Long
i = Sheets.Count
MsgBox "当前工作簿的工作表数为:" & Chr(10) & i
End Sub
示例说明:在一个包含图表工作表的工作簿中运行上述两段代码,将会得出不同的结果,原因是对于Sheets集合来讲,工作表包含图表工作表。应注意Worksheets集合与Sheets集合的区别,下同。
[示例04-06]获取或设置工作表名称(Name属性) [示例04-06-01]
Sub NameWorksheet()
Dim sName As String, sChangeName As String
sName = Worksheets(2).Name
MsgBox "当前工作簿中第2个工作表的名字为:" & sName
sChangeName = "我的工作表"
MsgBox "将当前工作簿中的第3个工作表名改为:" & sChangeName
Worksheets(3).Name = sChangeName
End Sub
示例说明:使用Name属性可以获取指定工作表的名称,也可以设置工作表的名称。
[示例04-06-02]重命名工作表 Sub ReNameSheet()
Dim xStr As String
Retry:
Err.Clear
xStr = InputBox("请输入工作表的新名称:" _
, "重命名工作表", ActiveSheet.Name)
If xStr = "" Then Exit Sub
On Error Resume Next
ActiveSheet.Name = xStr
If Err.Number <> 0 Then
MsgBox Err.Number & " " & Err.Description
Err.Clear
GoTo Retry
End If
On Error GoTo 0
'.........
End Sub
[NextPage][示例04-07]激活/选择工作表(Activate方法和Select方法) [示例04-07-01]
Sub SelectWorksheet()
MsgBox "激活当前工作簿中的工作表sheet2"
Worksheets("sheet2").Activate
MsgBox "激活当前工作簿中的工作表sheet3"
Worksheets("sheet3").Select
MsgBox "同时选择工作簿中的工作表sheet2和sheet3"
Worksheets(Array("sheet2", "sheet3")).Select
End Sub
示例说明:Activate方法只能激活一个工作表,而Select方法可以同时选择多个工作表。
[示例04-07-02]
Sub SelectManySheet()
MsgBox "选取第一个和第三个工作表."
Worksheets(1).Select
Worksheets(3).Select False
End Sub
[示例04-08]获取当前工作表的索引号(Index属性) Sub GetSheetIndex()
Dim i As Long
i = ActiveSheet.Index
MsgBox "您正使用的工作表索引号为" & i
End Sub
[示例04-09]选取前一个工作表(Previous属性) Sub PreviousSheet()
If ActiveSheet.Index <> 1 Then
MsgBox "选取当前工作簿中当前工作表的前一个工作表"
ActiveSheet.Previous.Activate
Else
MsgBox "已到第一个工作表"
End If
End Sub
示例说明:如果当前工作表是第一个工作表,则使用Previous属性会出错。
[示例04-10]选取下一个工作表(Next属性) Sub NextSheet()
If ActiveSheet.Index <> Worksheets.Count Then
MsgBox "选取当前工作簿中当前工作表的下一个工作表"
ActiveSheet.Next.Activate
Else
MsgBox “已到最后一个工作表”
End If
End Sub
示例说明:如果当前工作表是最后一个工作表,则使用Next属性会出错。
[示例04-11]工作表行和列的操作 [示例04-11-01]隐藏行
Sub HideRow()
Dim iRow As Long
MsgBox "隐藏当前单元格所在的行"
iRow = ActiveCell.Row
ActiveSheet.Rows(iRow).Hidden = True
MsgBox "取消隐藏"
ActiveSheet.Rows(iRow).Hidden = False
End Sub
[示例04-11-02]隐藏列
Sub HideColumn()
Dim iColumn As Long
MsgBox "隐藏当前单元格所在列"
iColumn = ActiveCell.Column
ActiveSheet.Columns(iColumn).Hidden = True
MsgBox "取消隐藏"
ActiveSheet.Columns(iColumn).Hidden = False
End Sub
[示例04-11-03]插入行
Sub InsertRow()
Dim rRow As Long
MsgBox "在当前单元格上方插入一行"
rRow = Selection.Row
ActiveSheet.Rows(rRow).Insert
End Sub
[示例04-11-04]插入列
Sub InsertColumn()
Dim cColumn As Long
MsgBox "在当前单元格所在行的左边插入一行"
cColumn = Selection.Column
ActiveSheet.Columns(cColumn).Insert
End Sub
[示例04-11-05]插入多行
Sub InsertManyRow()
MsgBox "在当前单元格所在行上方插入三行"
Dim rRow As Long, i As Long
For i = 1 To 3
rRow = Selection.Row
ActiveSheet.Rows(rRow).Insert
Next i
End Sub
[示例04-11-06]设置行高
Sub SetRowHeight()
MsgBox "将当前单元格所在的行高设置为25"
Dim rRow As Long, iRow As Long
rRow = ActiveCell.Row
iRow = ActiveSheet.Rows(rRow).RowHeight
ActiveSheet.Rows(rRow).RowHeight = 25
MsgBox "恢复到原来的行高"
ActiveSheet.Rows(rRow).RowHeight = iRow
End Sub
[示例04-11-07]设置列宽
Sub SetColumnWidth()
MsgBox "将当前单元格所在列的列宽设置为20"
Dim cColumn As Long, iColumn As Long
cColumn = ActiveCell.Column
iColumn = ActiveSheet.Columns(cColumn).ColumnWidth
ActiveSheet.Columns(cColumn).ColumnWidth = 20
MsgBox "恢复至原来的列宽"
ActiveSheet.Columns(cColumn).ColumnWidth = iColumn
End Sub
[示例04-11-08]恢复行高列宽至标准值
Sub ReSetRowHeightAndColumnWidth()
MsgBox "将当前单元格所在的行高和列宽恢复为标准值"
Selection.UseStandardHeight = True
Selection.UseStandardWidth = True
End Sub
[示例04-12]工作表标签 [示例04-12-01] 设置工作表标签的颜色
Sub SetSheetTabColor()
MsgBox "设置当前工作表标签的颜色"
ActiveSheet.Tab.ColorIndex = 7
End Sub
[示例04-12-01]恢复工作表标签颜色
Sub SetSheetTabColorDefault()
MsgBox "将当前工作表标签颜色设置为默认值"
ActiveSheet.Tab.ColorIndex = -4142
End Sub
[示例04-12-03]交替隐藏或显示工作表标签
Sub HideOrShowSheetTab()
MsgBox "隐藏/显示工作表标签"
ActiveWindow.DisplayWorkbookTabs = Not ActiveWindow.DisplayWorkbookTabs
End Sub
[NextPage][示例04-13]确定打印的页数(HPageBreaks属性与VPageBreaks属性) Sub PageCount()
Dim i As Long
i = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1)
MsgBox "当前工作表共" & i & "页."
End Sub
[示例04-14]保护/撤销保护工作表 [示例04-14-01]
Sub ProtectSheet()
MsgBox "保护当前工作表并设定密码"
ActiveSheet.Protect Password:="fanjy"
End Sub
示例说明:运行代码后,当前工作表中将不允许编辑,除非撤销工作表保护。
[示例04-14-02]
Sub UnprotectSheet()
MsgBox "撤销当前工作表保护"
ActiveSheet.Unprotect
End Sub
示例说明:运行代码后,如果原保护的工作表设置有密码,则要求输入密码。
[示例04-14-03]保护当前工作簿中的所有工作表
Sub ProtectAllWorkSheets()
On Error Resume Next
Dim ws As Worksheet
Dim myPassword As String
myPassword = InputBox("请输入您的密码" & vbCrLf & _
"(不输入表明无密码)" & vbCrLf & vbCrLf & _
"确保您没有忘记密码!", "输入密码")
For Each ws In ThisWorkbook.Worksheets
ws.Protect (myPassword)
Next ws
End Sub
[示例04-14-04]撤销对当前工作簿中所有工作表的保护
Sub UnprotectAllWorkSheets()
On Error Resume Next
Dim ws As Worksheet
Dim myPassword As String
myPassword = InputBox("请输入您的密码" & vbCrLf & _
"(不输入表示无密码)", "输入密码")
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect (myPassword)
Next ws
End Sub
[示例04-14-05]仅能编辑未锁定的单元格
Sub OnlyEditUnlockedCells()
Sheets("Sheet1").EnableSelection = xlUnlockedCells
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
示例说明:运行本代码后,在当前工作表中将只能对未锁定的单元格进行编辑,而其它单元格将不能编辑。未锁定的单元格是指在选择菜单“格式——单元格”命令后所弹出的对话框中的“保护”选项卡中,未选中“锁定”复选框的单元格或单元格区域。
[示例04-15]删除工作表(Delete方法) Sub DeleteWorksheet()
MsgBox "删除当前工作簿中的工作表sheet2"
Application.DisplayAlerts = False
Worksheets("sheet2").Delete
Application.DisplayAlerts = True
End Sub
示例说明:本示例代码使用Application.DisplayAlerts = False来屏蔽弹出的警告框。
<一些编程方法和技巧>
[示例04-16] 判断一个工作表(名)是否存在 [示例04-16-01]
Sub testWorksheetExists1()
Dim ws As Worksheet
If Not WorksheetExists(ThisWorkbook, "sheet1") Then
MsgBox "不能够找到该工作表", vbOKOnly
Exit Sub
End If
MsgBox "已经找到工作表"
Set ws = ThisWorkbook.Worksheets("sheet1")
End Sub
'- - - - - - - - - - - - - - - - - - -
Function WorksheetExists(wb As Workbook, sName As String) As Boolean
Dim s As String
On Error GoTo ErrHandle
s = wb.Worksheets(sName).Name
WorksheetExists = True
Exit Function
ErrHandle:
WorksheetExists = False
End Function
示例说明:在测试代码中,用相应的工作簿名和工作表名分别代替“ThisWorkbook”和“Sheet1”,来判断指定工作表是否在工作簿中存在。
[示例04-16-02]
Sub testWorksheetExists2()
If Not SheetExists("<工作表名>") Then
MsgBox "<工作表名> 不存在!"
Else
Sheets("<工作表名>").Activate
End If
End Sub
'- - - - - - - - - - - - - - - - - - - Function SheetExists(SheetName As String) As Boolean
SheetExists = False
On Error GoTo NoSuchSheet
If Len(Sheets(SheetName).Name) > 0 Then
SheetExists = True
Exit Function
End If
NoSuchSheet:
End Function
示例说明:在代码中,用实际工作表名代替<>。
[示例04-16-03]
Sub TestingFunction()
'如果工作表存在则返回True,否则为False '测试DoesWksExist1函数 Debug.Print DoesWksExist1("Sheet1")
Debug.Print DoesWksExist1("Sheet100")
Debug.Print "-----"
'测试DoesWksExist2函数 Debug.Print DoesWksExist2("Sheet1")
Debug.Print DoesWksExist2("Sheet100")
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Function DoesWksExist1(sWksName As String) As Boolean
Dim i As Long
For i = Worksheets.Count To 1 Step -1
If Sheets(i).Name = sWksName Then
Exit For
End If
Next
If i = 0 Then
DoesWksExist1 = False
Else
DoesWksExist1 = True
End If
End Function
‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Function DoesWksExist2(sWksName As String) As Boolean
Dim wkb As Worksheet
On Error Resume Next
Set wkb = Sheets(sWksName)
On Error GoTo 0
DoesWksExist2 = IIf(Not wkb Is Nothing, True, False)
End Function
[示例04-17]排序工作表 [示例04-17-01]
Sub SortWorksheets1()
Dim bSorted As Boolean
Dim nSortedSheets As Long
Dim nSheets As Long
Dim n As Long
nSheets = Worksheets.Count
nSortedSheets = 0
Do While (nSortedSheets < nSheets) And Not bSorted
bSorted = True
nSortedSheets = nSortedSheets + 1
For n = 1 To nSheets - nSortedSheets
If StrComp(Worksheets(n).Name, Worksheets(n + 1).Name, vbTextCompare) > 0 Then
Worksheets(n + 1).Move Before:=Worksheets(n)
bSorted = False
End If
Next n
Loop
End Sub
示例说明:本示例代码采用了冒泡法排序。
[示例04-17-02]
Sub SortWorksheets2()
'根据字母对工作表排序 Dim i As Long, j As Long
For i = 1 To Sheets.Count
For j = 1 To Sheets.Count - 1
If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
Sheets(j).Move After:=Sheets(j + 1)
End If
Next j
Next i
End Sub
[示例04-17-03]
Sub SortWorksheets3()
'以升序排列工作表 Dim sCount As Integer, i As Integer, j As Integer
Application.ScreenUpdating = False
sCount = Worksheets.Count
If sCount = 1 Then Exit Sub
For i = 1 To sCount - 1
For j = i + 1 To sCount
If Worksheets(j).Name < Worksheets(i).Name Then
Worksheets(j).Move Before:=Worksheets(i)
End If
Next j
Next i
End Sub
示例说明:若想排序所有工作表,将代码中的Worksheets替换为Sheets。
[示例04-18]删除当前工作簿中的空工作表 Sub Delete_EmptySheets()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
If Application.WorksheetFunction.CountA(sh.Cells) = 0 Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next
End Sub
工作表(Worksheet)基本操作应用示例的更多相关文章
- Excel开发学习笔记:根据工作表worksheet内容控制按钮的状态
开发环境基于VSTO,具体配置:visual studio 2010,VB .Net,excel 2007,文档级别的定制程序. 在Ribbon工具栏中有2个功能按钮,它们是否可用取决于workshe ...
- RDLC 微软报表 导出Excel时产生多个工作表 (worksheet)
. I have added two obejcts data source to Report Viewer. 2. in RDLC i have created two tables and in ...
- Excel2007VBA数组和工作表及单元格的引用
动态数组使用: https://zhidao.baidu.com/question/1432222709706721499.html 使用Redim动态数组即可. 1 2 3 4 5 6 7 8 Su ...
- C#将一个excel工作表根据指定范围拆分为多个excel文件
C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...
- Java 复制Excel工作表
本文归纳了关于Java如何复制Excel工作表的方法,按不同复制需求,可分为: 1. 复制工作表 1.1 在同一个工作簿内复制工作表 1.2 在不同工作簿间复制工作表 2. 复制指定单元格数据 对于复 ...
- C# 原样复制excel工作表
在excel中,工作表是工作薄的组成部分,一个工作薄可以由一个或多个工作表组成,一个工作薄也可以说是一个excel文档,正因为如此,excel工作表的复制也就分为两种类型:在同一文档之内复制和在不同文 ...
- C# 如何合并Excel工作表
文档合并.拆分是实现文档管理的一种有效方式.在工作中,我们可能会遇到需要将多个文档合并的情况,那如何来实现呢,本文将进一步介绍.关于拆分Excel工作表,可参见这篇文章--C#如何拆分EXCEL工作表 ...
- C# 合并Excel工作表
文档合并.拆分是实现文档管理的一种有效方式.在工作中,我们可能会遇到需要将多个文档合并的情况,那如何来实现呢,本文将进一步介绍.关于拆分Excel工作表,可参见这篇文章——C#如何拆分EXCEL工作表 ...
- C# 如何隐藏或显示工作表中的网格线
我们知道Excel中有许多虚线形式的网格线,它们用于区分Excel工作表中的单元格.有了网格线,读者可以轻松地查看和核对工作表中的数据.Excel工作表中,网格线是默认存在的,但我们可以根据自身的需求 ...
随机推荐
- MySQL查看和修改wait_timeout
1.全局查看wait_timeout值 mysql> show global variables like 'wait_timeout'; 2.修改全局wait_timeout值 set glo ...
- C++:CursorType光标类型 和 LockType锁定类型
简要: CursorType光标类型: 1. AdOpenForwardOnly (默认值)一次只能向前移动一行. 2. AdOpenKeyset 打开键集类型游标. 3. AdO ...
- HDU 1823 Luck and Love 二维线段树(树套树)
点击打开链接 Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- for循环和增强版的for循环
增强的for循环. 缺点: 对于数组.不能方便的訪问下标值. 对于集合,与使用Interator相比.不能方便的删除集合中的内容(在内部也是调用Interator). 除了简单遍历并读取当中的 ...
- script标签的crossorigin属性
通常我们使用window.onerror来捕获js脚本的错误信息. 但是对于跨域调用的js脚本,onerror事件只会给出很少的报错信息:error: Script error. 这个简单的信息很明显 ...
- Ubuntu安装deb软件包错误(依赖关系问题)解决
执行命令 sudo dpkg -i XXX.deb 返回依赖关系错误提示 执行 sudo apt-get -f install 这条命令将自动安装需要的依赖包. 再次执行命令 sudo dpkg -i ...
- FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言
FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言 2014年08月08日 14:08 看门狗 关键词: FPGA 作者:friends 从大学时代第一次接触FPGA至今已有10多 ...
- ZOJ Problem Set - 2297 Survival 【状压dp】
题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和能够添加的血,然后有一个boss,必须把小怪全部都打死之后才干打boss,血量小于0会死 ...
- shell脚本之函数的使用
把代码封装成函数,相当于造了一个“轮子”,之后就直接重复使用即可. 函数的创建 shell中函数的创建有2种方式 1.使用function关键字 语法 function test { ... } 2. ...
- :-1: error: [debug/moc_gotocelldialog.cpp] Error 2
环境:Qt5.3 问题描述: 我将一个已经做好可以运行的小程序拷贝了一下,放在另一个目录下打开,却无法运行,提示上面的错误,而且原程序也无法运行了.不知道为什么,还没有答案...