Excel VBA入門(6) - Worksheet對象常用方法事件


1. 激活工作表 Active

Dim ws As Worksheet
Set ws = Application.WorkBooks(1).Worksheets(2)
ws.Activate
激活了第一個工作簿的Sheet2


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)
將當前工作表的內容復制到新工作簿的第2個工作表

 

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")

Worksheet事件:
和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

例子比較簡單, 說明一下Space(5)的意思是五個空格, CStr()是把參數轉換為字符串
核心就是 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"
將"Sheet1"重命名為了"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)
將當前工作簿的Sheet1 移動到新的工作簿的Sheet1后


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

————————————————
版權聲明:本文為CSDN博主「zn_yang」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/znyang/article/details/14120817


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM