工作表(Worksheet)基本操作应用示例
分类:ExcelVBA>>ExcelVBA编程入门范例
在编写代码时,经常要引用工作表的名字、知道工作表在工作簿中的位置、增加工作表、删除工作表、复制工作表、移动工作表、重命名工作表,等等。下面介绍与此有关及相关的一些属性和方法示例。


[示例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


[示例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


[示例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)基本操作应用示例相关推荐

  1. 工作簿(Workbook)基本操作应用示例(一)

      工作簿(Workbook)基本操作应用示例(一) Workbook对象代表工作簿,而Workbooks集合则包含了当前所有的工作簿.下面对Workbook对象的重要的方法和属性以及其它一些可能涉及 ...

  2. 工作簿(Workbook)基本操作应用示例

    Workbook对象代表工作簿,而Workbooks集合则包含了当前所有的工作簿.下面对Workbook对象的重要的方法和属性以及其它一些可能涉及到的方法和属性进行示例介绍,同时,后面的示例也深入介绍 ...

  3. 自动化办公之excel教程(1):工作薄,工作表,单元格基本操作

    一.工作薄的基本操作 1.工作薄表的保护 在审阅里有保护工作表,保护工作薄等.点击输入密码. 其他人没有密码则无法对表格进行修改.表格只能看,不能修改. 2.工作薄的加密 第一步点击文件 另存为. 会 ...

  4. C#将一个excel工作表根据指定范围拆分为多个excel文件

    C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...

  5. java 复制excel_Java 复制Excel工作表

    本文归纳了关于Java如何复制Excel工作表的方法,按不同复制需求,可分为: 1. 复制工作表 1.1 在同一个工作簿内复制工作表 1.2 在不同工作簿间复制工作表 2. 复制指定单元格数据 对于复 ...

  6. C#如何设置Excel文档保护——工作簿、工作表、单元格

    简介 Excel在工作和学习中应用广泛,是必不可少的数据统计与处理工具.对于一些重要的Excel文件,只供特殊人员查看.编辑或者防止重要数据对外泄露时,就需要设置文档保护,包括设置访问密码.设置文件只 ...

  7. java copysheet_Java 复制Excel工作表

    在日常操作Excel文档时,经常会遇到需要复制工作表的情况,以此来节省时间,提高工作效率.根据复制需求不同,一般我们可将其分为以下两类: 1.复制工作表(保留原有工作表格式) ① 在同一个文档内复制工 ...

  8. Excel 2010 VBA 入门 067 导入多个工作簿中的工作表

    目录 示例 实现代码 导入多个工作簿中的工作表 Application. ScreenUpdating属性 示例 如图所示,在同一个目录下有多个工作表名称相同的工资汇总月报.现希望通过VBA建立该多个 ...

  9. Excel 2010 VBA 入门 072 工作表事件之activate

    目录 示例 实现代码1 工作表(Worksheet)对象的Select方法 实现代码2 附件:显示所有工作表 目录工作表中加入事件 其它工作表中加入事件 实现代码3 工作簿事件 类模块和Me变量 示例 ...

最新文章

  1. Confluence 6 计划任务
  2. VTK:PolyData之CombineImportedActors
  3. Java黑皮书课后题第2章:2.15(几何:两点间距离)编写程序,提示用户输入两个点(x1,y1)和(x2,y2),显示两点距离
  4. Cassandra1.2文档学习(7)—— 规划集群部署
  5. php移动端url,什么是PC和移动端URL路径规范化
  6. oracle数据库imp导入,imp 导入 没有数据库
  7. 酷6暴力裁员,是清洗也是重塑
  8. 为什么不建议你使用实数作为 HashMap 的key?
  9. 【OpenCV CUDA】OpenCV和Cuda结合编程
  10. 微信小程序 图标的角标实现
  11. python测试开发django-155.bootbox使用(alert/confirm/prompt/dialog)
  12. 阿米巴经营之软件经营-写得不错留作记念
  13. 计算思维的本质是什么
  14. 从链家网上爬取租房数据并进行数据分析
  15. 被打脸!谁说区块链无落地?这50大落地场景拿走不谢
  16. 潘金莲写给比尔盖茨的情书
  17. 普通人想做自媒体赚钱,应该做什么呢?
  18. 经超计算机求职电视剧,经超电影,电视剧全集_经超影视作品大全推荐 - 剧知晓...
  19. AUTOIT做的小软件
  20. 硬件工程师--医疗器械

热门文章

  1. Three.js——向量操作函数
  2. 支付宝要融资上市,马云大赚,不过他承诺捐了
  3. 生鲜商城小程序项目总结
  4. 深入浅出分布式服务器架构
  5. Spyder连接远程服务器
  6. UDP(user datagram protocol)
  7. 什么是稳定的排序方法
  8. 新产品软文推广如何做?
  9. iOS逆向入门实践 — 逆向微信,伪装定位(一)
  10. 中正平和的机器人学笔记——5. 机械臂动力学