1. 激活工作表 Active
- Dim ws As Worksheet
- Set ws = Application.WorkBooks(1).Worksheets(2)
- ws.Activate
2. 復制工作表 Copy([before], [after])
將當前工作表復制一份, 名字為'當前工作表名字(2)'
- Dim ws As Worksheet
- Set ws = Application.ActiveWorkbook.Worksheets(1)
- ws.Copy after:=Worksheets(1)
該代碼將Sheet1的內容拷貝到新表Sheet1(2)如果不指定before或after, 同樣會生成一個新表, 注意, before和after不能同時使用
另外, 工作表的復制可以跨工作簿之間進行
- Dim wbSrc As Workbook
- Dim wbDes As Workbook
- Dim ws As Worksheet
- Set wbSrc = Application.WorkBooks(1)
- Set wbDes = Application.WorkBooks.Add
- Set ws = wbSrc.Worksheets(1)
- ws.Copy after:=wbDes.Worksheets(1)
3. 將剪貼板的內容粘貼到工作表Paste([destination], [link])
- Dim ws As Worksheet
- Set ws = Application.ActiveWorkbook.ActiveSheet
- ws.range('A1:A3').Copy
- ws.Paste destination:=ws.range('F1:F3')
先將A1:A3的內容復制到剪貼板, 然后利用Paste方法, 粘貼到F1:F3區域, 亦或者直接:
- ws.range('A1:A3').Copy
- ws.Paste destination:=ws.range('F1')
和Workbook的事件類似, 在'工程資源管理器'中, 雙擊一個工作表, 在右邊代碼區上面選擇Worksheet, 然后再選擇相應的事件
選擇一個事件會自動列出事件代碼
常用的操作工作表的方法
1. 訪問工作表
兩種方式: a. 根據索引號(從1開始) b.根據工作表名稱
- Dim wb As Workbook
- Dim ws As Worksheet
- Dim wsCount As Integer
- Dim i As Integer
- Dim sheetnames() As String
- Set wb = Application.WorkBooks(1)
- wb.Activate
- wsCount = wb.Worksheets.Count
- ReDim sheetnames(1 To wsCount)
- PrintInfo '當前工作簿共包含' & CStr(wsCount) & '個工作表'
- For i = 1 To wsCount
- Set ws = wb.Worksheets(i)
- Debug.Print Space(5) & ws.name
- sheetnames(i) = ws.name
- Next
- Debug.Print
- Debug.Print '使用Sheets集合按名稱訪問工作表'
- For i = 1 To wsCount
- Set ws = wb.Worksheets(sheetnames(i))
- Debug.Print Space(5) & ws.name
- Next
- Set ws = Nothing
- Set wb = Nothing
核心就是 Worksheets(1) 和Worksheets('Sheet1') 是等效的 (默認沒有改工作表名字而且沒有移動工作表順序的情況下)
另外在遍歷工作表的時候使用的是Worksheets屬性, 如果使用Sheets屬性則需要判斷工作表的類型是普通工作表還是圖表工作表
根據Type屬性判斷: If ws.Type = xlWorksheet Then
2. 判斷工作表是否存在
判斷工作表是否存在就是用指定的名稱遍歷所有工作表, 沒什么難點
- Dim wb As Workbook
- Dim ws As Worksheet
- Dim i As Integer
- Dim count As Integer
- Dim flag As Boolean
- Dim findName As String
- findName = 'Sheet7'
- Set wb = Application.ActiveWorkbook
- count = wb.Worksheets.count
- flag = False
- For i = 1 To count
- If wb.Worksheets(i).name = findName Then
- flag = True
- Exit For
- End If
- Next
- If flag Then
- MsgBox '存在' & findName
- Else
- MsgBox '不存在' & findName
- End If
- Set ws = Nothing
- Set wb = Nothing
3.新建工作表 Application.ActiveWorkbook.Worksheets.Add([Before], [After], [Count], [Type]) As Object
新建工作表和之前的新建工作簿類似
- Dim ws As Worksheet
- Set ws = Worksheets.Add
- Debug.Print ws.name
完整寫法Set ws = Application.ActiveWorkbook.Worksheets.Add(before:=Worksheets(8), count:=2, Type:=xlWorksheet)意思是在第8個表前加入兩個工作表
同樣的Before和After不能同時使用
4. 重命名工作表
直接設置工作表的name屬性即可, 但是要先判斷該名稱是否已經存在, 否則會報錯
為了簡單說明, 這里就不作判斷了
- Dim ws As Worksheet
- Set ws = Application.WorkBooks(1).Worksheets(1)
- ws.name = 'SheeT1'
5. 移動工作表
- Dim wb As Workbook
- Dim ws As Worksheet
- Set wb = Application.WorkBooks(1)
- wb.Activate
- Set ws = wb.Worksheets(1)
- ws.Move after:=ws.Next
- Set wb = Nothing
- Set ws = Nothing
道理和復制一樣, ws.Move after:=ws.Next 將第一個工作表向后移動一次同理, 移動也可以跨工作簿進行
- Dim wbSrc As Workbook
- Dim wbDes As Workbook
- Dim ws As Worksheet
- Set wbSrc = Application.WorkBooks(1)
- Set wbDes = Application.WorkBooks.Add
- Set ws = wbSrc.Worksheets(1)
- ws.Move after:=wbDes.Worksheets(1)
6. 刪除工作表
注意: 刪除前請保存重要數據
- Dim wb As Workbook
- Dim ws As Worksheet
- Dim sheetName As String
- Dim count As Integer
- Set wb = Application.WorkBooks(1)
- Set ws = wb.Worksheets(1)
- sheetName = ws.name
- count = wb.Worksheets.count
- If count > 1 Then
- Application.DisplayAlerts = False
- ws.Delete
- MsgBox '成功刪除' & sheetName, vbOKOnly, '刪除工作表'
- Application.DisplayAlerts = True
- Else
- MsgBox '工作表' & sheetName & '是工作簿的最后一張表, 無法刪除', vbCritical, '刪除工作表'
- End If
- Set wb = Nothing
- Set ws = Nothing