- 1. 檢查活動單元格是否存在
Sub activeCell()
If ActiveCell Is Nothing Then End If
End Sub
- 2. 通過指定偏移量設(shè)置活動單元格
Sub offset()
ActiveCell.Offset(RowOffset:=-2, ColumnOffset:=4).Activate
End Sub
Offset函數(shù)的第一個(gè)參數(shù)為Row的偏移量,第二個(gè)參數(shù)為Column的偏移量(可以不指定),使用時(shí)可以直接給定值,如Offset(2, 4)。值小于0向相反方向偏移。Offset().Activate與Offset().Select在效果上等同。 - 3. 設(shè)置活動單元格的當(dāng)前值
Sub SetValue
ActiveCell.Value = "Hello World!"
End Sub
- 4. 為當(dāng)前活動單元格設(shè)置公式
Sub fomula()
ActiveCell.Formula = "=SUM($G$12:$G$22)"
End Sub
將公式的表達(dá)式直接賦值給Formula屬性,公式表達(dá)式可以參考Excel中的公式菜單,如求和、計(jì)數(shù)、求平均值等。 - 5. 獲取當(dāng)前活動單元格的地址
Sub selectRange()
MsgBox ActiveCell.Address
End Sub
地址的格式如:$A$11。 - 6. 獲取從當(dāng)前活動單元格開始到邊界單元格的區(qū)域
' 從當(dāng)前單元格到最頂端
Sub SelectUp()
Range(ActiveCell, ActiveCell.End(xlUp)).Select
End Sub
'從當(dāng)前單元格到最底端
Sub SelectDown()
Range(ActiveCell, ActiveCell.End(xlDown)).Select
End Sub
'從當(dāng)前單元格到最右端(等同于xlEnd)
Sub SelectToRight()
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
End Sub
'從當(dāng)前單元格到最左端
Sub SelectToLeft()
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
End Sub
- 7. 當(dāng)前活動單元格所在區(qū)域選擇
Sub SelectCurrentRegion()
ActiveCell.CurrentRegion.Select
End Sub
對CurrentRegion屬性所代表的區(qū)域的說明:
CurrentRegion返回活動單元格所在的周圍由空行和空列組成的單元格區(qū)域(這個(gè)似乎有點(diǎn)不太好理解) ,可以看下圖的示例:
可以這樣理解CurrentRegion屬性所代表的區(qū)域,即以活動單元格為中心,它所包含的矩形區(qū)域的每一行和每一列中至少包含有一個(gè)數(shù)據(jù),上圖中的藍(lán)色陰影區(qū)域中,無論活動單元格是哪一個(gè),其所在的當(dāng)前區(qū)域均為同一區(qū)域,如B5:D7區(qū)域中的B5和C6單元格。A4的當(dāng)前區(qū)域表示為A1:D7,A8的當(dāng)前區(qū)域表示為A5:D11,A12的當(dāng)前區(qū)域只有它本身。
使用CurrentRegion屬性相當(dāng)于在Excel工作表中選擇菜單“編輯-定位”命令,在彈出的“定位”對話框中單擊“定位條件”按鈕,然后在“定位條件”對話框中選中“當(dāng)前區(qū)域”選項(xiàng)按鈕,或者相當(dāng)于使用Ctrl+Shift+*組合鍵。在Excel2007中,該命令在以下地方可以找到:
在下拉菜單中選擇“Go To Special…” ,在對話框中選擇“Current region”。
有關(guān)使用CurrentRegion的一些例子:
在下圖中,要使用空白單元格上方的有數(shù)據(jù)的單元格中的數(shù)據(jù)來填充空白單元格。
代碼如下, Sub FillBlankCells()
Worksheets("sheet1").Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Worksheets("sheet1").Range("A1").CurrentRegion.Value = Worksheets("sheet1").Range("A1").CurrentRegion.Value
End Sub 執(zhí)行之后,工作表中單元格A1所在當(dāng)前區(qū)域中的空白單元格被相應(yīng)數(shù)據(jù)填充,如下圖。
如下圖,對第三列進(jìn)行降序排序。
代碼如下: Sub testSort()
Dim rng As Range
Set rng = Worksheets("sheet1").Cells(1, 1).CurrentRegion
rng.Sort Key1:=rng.Cells(1, 3), Order1:=xlDescending, Header:=xlYes
End Sub
執(zhí)行之后,工作表中的數(shù)據(jù)將按照第三列的數(shù)據(jù)降序排序,如下圖。
- 8. 使用SpecialCells方法
該方法用于返回與指定形態(tài)和值相符合的所有單元格,其中第一個(gè)參數(shù)為xlCellType類型所代表的常數(shù)。 xlCellTypeAllFormatConditions | 任何格式的單元格。 |
xlCellTypeAllValidation | 帶數(shù)據(jù)校驗(yàn)的單元格。 |
xlCellTypeBlanks | 空單元格。 |
xlCellTypeComments | 包含注釋的單元格。 |
xlCellTypeConstants | 包含常數(shù)的單元格。 |
xlCellTypeFormulas | 包含公式的單元格。 |
xlCellTypeLastCell | 已用范圍的最后一個(gè)單元格。 |
xlCellTypeSameFormatConditions | 有相同格式的單元格。 |
xlCellTypeSameValidation | 有相同數(shù)據(jù)校驗(yàn)準(zhǔn)則的單元格。 |
xlCellTypeVisible | 所有可見單元格。 |
第二個(gè)參數(shù)為可選參數(shù)。如果xlCellType為xlCellTypeConstants或xlCellTypeFormulas 之一,該參數(shù)用于確定結(jié)果中應(yīng)包含哪些類型的單元格。將某幾個(gè)值相加可使此方法返回多種形態(tài)的單元格。默認(rèn)情況下將指定所有常數(shù)或公式,對其形態(tài)則不加類型。它可以是下列常數(shù)之一。
xlErrors
xlLogical
xlNumbers
xlTextValues
Sub SelectActiveArea()
Range(Range("A1"), ActiveCell.SpecialCells(xlTypeLastCell)).Select
End Sub
有關(guān)使用SpecialCells的一個(gè)例子:
將下圖所示的數(shù)據(jù)按順序存放到一個(gè)新建的工作表中,
Sub toAcol()
Dim newSht As Worksheet
Dim Rng As Range
Dim allDat As Range
Dim pt As Range
Dim i As Long
'選擇工作表中所有有內(nèi)容的單元格
Set allDat = ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
'新增工作表
Set newSht = Worksheets.Add
'設(shè)置新工作表中的起始位置
Set pt = newSht.Range("a1")
For Each Rng In allDat.Areas
For i = 1 To Rng.Cells.Count
pt = Rng.Cells(i)
Set pt = pt.Offset(1, 0)
Next
Next
'重命名新工作表
newSht.Name = "newSht" & Worksheets.Count
End Sub 執(zhí)行后,在名稱為“newSht4”的工作表中會出現(xiàn)如下圖所示的數(shù)據(jù)。
- 9. 通過Application.WorksheetFunction調(diào)用Proper方法
Sub FixText()
ActiveCell.Value = Application.WorksheetFunction.Proper("asdf")
End Sub
該方法將給定的表達(dá)式中的第一個(gè)字母大寫,而其余字母小寫,示例中的代碼將活動單元格的值設(shè)置為“Asdf”。 - 10. EntireRow和EntireColumn
Sub SelectColumn()
ActiveCell.EntireColumn.Select
End Sub
Sub SelectRow()
ActiveCell.EntireRow.Select
End Sub
EntireColumn用于選擇當(dāng)前活動單元格所在的整列,EntireRow用于選擇當(dāng)前活動單元格所在的整行。 - 11. 找出當(dāng)前所選區(qū)域中包含最大值的單元格
Sub GoToMax()
Dim WorkRange As Range
If TypeName(Selection) <> "Range" Then Exit Sub
If Selection.Count = 1 Then
Set WorkRange = Cells
Else
Set WorkRange = Selection
End If
MaxVal = Application.Max(WorkRange)
On Error Resume Next
WorkRange.Find(What:=MaxVal, _
After:=WorkRange.Range("A1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).Select
If Err <> 0 Then MsgBox "Max value was not found: " & MaxVal
End Sub - 12. WarpText屬性
Sub ToggleWrapText()
If TypeName(Selection) = "Range" Then
Selection.WrapText = Not ActiveCell.WrapText
End If
End Sub
WarpText屬性用于指示當(dāng)前活動單元格是否被設(shè)置為允許換行。
- 1. 獲取當(dāng)前活動工作簿的名稱
Sub test()
MsgBox ActiveWorkbook.FullName
End Sub
- 2. 打開工作表
Sub filePath()
Dim filePath As String
filePath = ActiveWorkbook.Path
Workbooks.Open (filePath & "\" & "MyWorkbook.xls")
End Sub
- 3. 保存工作表
Sub webPage()
ActiveWorkbook.SaveAs _
Filename:=ActiveWorkbook.Path & "\myXclfile.htm", _
FileFormat:=xlHtml
End Sub
- 4. 預(yù)覽工作表
Sub pre()
ActiveWorkbook.WebPagePreview
End Sub
- 5. 發(fā)布Excel文件到指定的目錄
Public Sub SaveRangeWeb()
ActiveWorkbook.PublishObjects.Add _
SourceType:=xlSourceRange, _
Filename:=ActiveWorkbook.Path & "\Sample1.htm", _
Sheet:=ActiveSheet.name, _
Source:="$A$1:$B$11", _
HtmlType:=xlHtmlStatic
ActiveWorkbook.PublishObjects(1).Publish (True)
ActiveWorkbook.PublishObjects(1).AutoRepublish (False)
End Sub 上述代碼可以將當(dāng)前工作簿中所選擇的區(qū)域以htm文件的格式發(fā)布到一個(gè)指定的目錄中,該目錄可以是本地目錄,也可以是遠(yuǎn)程服務(wù)器上的目錄,或者是Sharepoint中的一個(gè)特定的Folder。Publish方法的參數(shù)為True表示如果目標(biāo)地址的文件存在則替換,為False表示如果目標(biāo)地址的文件存在則追加。AutoRepublish方法的參數(shù)用于指示當(dāng)Excel文件保存的時(shí)候是否自動重新發(fā)布。
在Excel2007中,相當(dāng)于點(diǎn)擊窗體左上角的Office按鈕,選擇“發(fā)布”,點(diǎn)擊“Document Management Server”,在彈出的對話框中選擇相應(yīng)的格式對文檔進(jìn)行發(fā)布操作。 - 6. 遍歷ActiveWorkbook中的表單集合
Sub Test()
For Each Item In ActiveWorkbook.Sheets
Debug.Print Item.name
Next Item
End Sub
- 7. 關(guān)閉當(dāng)前工作簿
Sub close()
ActiveWorkbook.Close SaveChanges:=False
End Sub
將當(dāng)前工作簿關(guān)閉,SaveChanges為False表示不保存當(dāng)前更改。 - 8. 保護(hù)工作簿的結(jié)構(gòu)和窗體
Sub protect()
ActiveWorkbook.Protect Password:="pass", Structure:=True, Windows:=True
End Sub
該操作相當(dāng)于在Excel2007中,選擇“Review”菜單,選擇“Protect Workbook”,點(diǎn)擊“Protect Structure and Windows”操作,該代碼示例中給該操作設(shè)置了一個(gè)用于還原的密碼。 - 9. 打印工作表
Sub print()
ActiveWorkbook.Sheets(1).Printout Copies:=2, Collate:=True
End Sub
- 10. 移除工作簿中的個(gè)人信息
Sub remove()
ActiveWorkbook.RemovePersonalInformation = True
End Sub
- 11. 為工作簿設(shè)置打開密碼
Sub pass()
ActiveWorkbook.Password = "pass"
End Sub
該操作相當(dāng)于在Excel2007中,點(diǎn)擊“另存為”,在彈出的對話框中選擇“工具”,點(diǎn)擊“General Options...”,在彈出的對話框中設(shè)置用于打開工作簿的密碼。 - 12. 為工作簿設(shè)置可寫密碼
Sub passWrite()
ActiveWorkbook.WritePassword = "pass"
End Sub
該操作相當(dāng)于在Excel2007中,點(diǎn)擊“另存為”,在彈出的對話框中選擇“工具”,點(diǎn)擊“General Options...”,在彈出的對話框中設(shè)置可修改工作簿的密碼。 - 13. 在當(dāng)前工作簿中打開新窗口
Sub new()
ActiveWorkbook.Windows(1).NewWindow
End Sub
- 14. 通過編程方式查找遍歷工作簿當(dāng)中的所有鏈接
Sub PrintSimpleLinkInfo()
Dim avLinks As Variant
Dim nIndex As Integer
Dim wb As Workbook
Set wb = ActiveWorkbook
avLinks = wb.LinkSources(xlExcelLinks)
If Not IsEmpty(avLinks) Then
For nIndex = 1 To UBound(avLinks)
Debug.Print "Link found to '" & avLinks(nIndex) & "'"
Next nIndex
Else
Debug.Print "The workbook '" & wb.name & "' doesn't have any links."
End If
End Sub xlLink為一組常量,代表了Excel工作簿中各種不同類型的鏈接。
xlExcelLinks | 指向Excel工作表。 |
xlOLELinks | 指向OLE數(shù)據(jù)源。 |
xlPublishers | Macintosh使用。 |
xlSubscribers | Macintosh使用。 |
- 15. 工作簿常用屬性使用
Sub TestPrintGeneralWBInfo()
Dim wb As Workbook
Set wb = ActiveWorkbook
Debug.Print "Name: " & wb.name
Debug.Print "Full Name: " & wb.FullName
Debug.Print "Code Name: " & wb.CodeName
Debug.Print "Path: " & wb.Path
If wb.ReadOnly Then
Debug.Print "The workbook has been opened as read-only."
Else
Debug.Print "The workbook is read-write."
End If
If wb.Saved Then
Debug.Print "The workbook does not need to be saved."
Else
Debug.Print "The workbook should be saved."
End If
End Sub