最近學習VBA寞秃,發(fā)現(xiàn)之前的我太過于追求技術上的成功而忘記了學習的本質(zhì),是真正解決實際問題踱葛。學習了如何錄制宏,了解到工程光坝、對象等尸诽,接下來研究VBA工作簿、工作表及單元格:
工作簿盯另、工作表圖示
VBA工作簿:
- 第N個工作簿 Workbooks(N)
- 指定名稱的工作簿 Workbooks("工作簿名")
- 當前所在的工作簿 thisWorkbook
- 當前激活的工作簿 ActiveWorkbook
新建工作簿
'1:新增工作簿'
Sub AddNewWorkbooks()
Workbooks.add
End Sub
'2:創(chuàng)建工作簿的一種更好方式是將其分配給一個對象變量'
Option Explicit
Sub AddNewWorkbooks()
Set NewBook = Workbooks.Add
With NewBook
.Title = "標題"
.Subject = "未知屬性"
.SaveAs Filename:="我是新建的工作簿名"
End With
MsgBox(ActiveWorkbook.Path) '返回當前激活工作簿路徑'
End Sub
Option Explicit的作用為:聲明所有變量都需要先定義才能使用性含,否則程序在使用了未經(jīng)定義的變量時就會報錯'。 因VB中并不要求顯示定義變量鸳惯,即變量可以不經(jīng)定義直接使用.
打開工作簿
Sub OpenWorkbooks()
Workbooks.Open("C:\users\Documents\我是新建的工作簿名.xlsx") '可以使用Open方法打開指定的工作簿商蕴,注意路徑要填寫完整'
End Sub '運行完成后將打開該工作簿'
返回當前工作簿的路徑
Sub GetWorkbooksPath()
Application.ActiveWorkbook.Path '返回當前激活工作簿路徑'
Application.ActiveWorkbook.FullName '返回當前激活工作簿路徑及名稱'
pplication.ActiveWorkbook.Name '返回當前激活工作簿文件名'
End Sub
VBA工作表:
- 第N個工作表 Worksheets(N)
- 指定名稱的工作表 Sheets("工作表名")
- 第N個工作表 SheetN
- 活動工作表 Activesheets
- Worksheets與Sheets的區(qū)別:Sheets集合代表當前工作簿中的所有工作表,包括圖表工作表芝发、對話框工作表和宏表绪商。Worksheets集合僅代表當前工作簿中的所有工作表。
Sheets和Worksheets區(qū)別
判斷工作表是否存在
Sub TestSheetYesNo()
Dim mySheetName As String, mySheetNameTest As String
mySheetName = "Sheet4" '輸入需測試的工作表名稱'
On Error Resume Next
mySheetNameTest = Worksheets(mySheetName).Name
If Err.Number = 0 Then
MsgBox "The sheet named ''" & mySheetName & "'' does exist in this workbook."
Else
Err.Clear
MsgBox "The sheet named ''" & mySheetName & "'' does NOT exist in this workbook."
End If
End Sub
On Error Resume Next的作用為:隨后的程序即便出現(xiàn)"運行時錯誤"時,也不
會顯示"出錯信息",并且會繼續(xù)運行下去辅鲸。
VB提供兩個語句和一個對象來處理"運行時錯誤"格郁,即:
- On Error Resume Next 語句 該語句后面程序出現(xiàn)"運行時錯誤"時,會繼續(xù)運行程序,僅只對當前函數(shù)有用例书。如果出錯,那么Err對象中將放置最近一次出錯的信息锣尉。
- On Error Goto 0 語句 該語句后面程序出現(xiàn)"運行時錯誤"時,會顯示"出錯信息"并停止程序的執(zhí)行决采。
- Err對象 使用Err對象來得到錯誤信息自沧。有重要的屬性有三個:Number(錯誤號-設置或返回指定一個錯誤的值;Err.Number=0指的是還沒有出現(xiàn)錯誤), Source(錯誤來源-設置或返回產(chǎn)生錯誤的對象的名稱), Description(錯誤描述-設置或返回一個描述錯誤的字符串)树瞭。分別是錯誤號拇厢,錯誤來源,錯誤描述移迫。
創(chuàng)建工作表
Sub TestSheetCreate()
Dim mySheetName As String, mySheetNameTest As String
mySheetName = "Sheet4"
'[可增加判斷語句旺嬉,判斷Sheet4是否存在]'
Worksheets.Add.Name = mySheetName '該句創(chuàng)建工作表并命名為sheet4'
MsgBox "The sheet named ''" & mySheetName & "'' did not exist in this workbook but it has been created now."
End Sub
引用工作表
' 1 - 引用1個以上工作表'
Sub Several()
Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select '選中表1、2厨埋、3'
End Sub
'2 - 按索引號引用工作表
如果移動邪媳、添加或刪除工作表, 則索引順序可能會更改'
Sub FirstOne()
Worksheets(1).Activate '引用第一個工作表'
Sheets(4).Activate '所有類型的工作表 (工作表、圖表荡陷、模塊和對話框工作表)第四張'
End Sub
'3 - 通過名稱引用工作表'
Sub ActivateChart()
Worksheets("Sheet1").Activate '激活名稱為“Sheet1”工作表'
Charts("Chart1").Activate '激活名稱為“Sheet1”圖表'
DialogSheets("Dialog1").Activate '激活名稱為“Dialog1”對話框工作表'
Sheets("Chart1").Activate
End Sub
VBA單元格:
- Range 引用單元格和單元格區(qū)域
Range('A1')=Cells(1,'A') =[A1] 單元格A1三種表示方法
Range('A1:B5') 從單元格A1到B5區(qū)域
Range('A1:B5雨效,B1:B7') 多塊的選定區(qū)域 - Cells (行號,列號)
Range(cell(1,1),cells(30,1))=Range('A1:A30') 從單元格A1到A30區(qū)域 - Seletion 當前被選取的區(qū)域
引用單元格
'1 - 引用工作表上的所有單元格'
Sub ClearSheet()
Worksheets("Sheet1").Cells.ClearContents '清除Sheet1所有單元格'
End Sub
'2 - 使用 A1 表示法引用單元格和區(qū)域'
Sub FormatRange()
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _
.Font.Bold = True
End Sub
'3 - 使用 Range 對象引用單元格'
Sub Random()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:D5")
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
'4 - 使用索引編號來引用單元格'
Sub EnterValue()
Worksheets("Sheet1").Cells(6, 1).Value = 10
End Sub
VBA整行废赞、整列:
- Rows('1:1')=Range('1:1')=Row(1) 第一行
Rows('2:10')=Range('2:10') 第2-10行 - Columns('A:A')=Range('A:A')=Columns(1) 第一列徽龟,A列
- Range('A:F')=Columns('A:F') A:F列
'將活動工作簿中第一張工作表上的第一行、第三行和第五行的字體設置為加粗'
Sub SeveralRows()
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
End Sub
思考:
1.怎樣將多個工作簿合并成一個工作簿唉地?
2据悔、怎樣實現(xiàn)跨表鏈接數(shù)據(jù)?