国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Excel中各種VBA寫(xiě)法 - 彷徨......豁然開(kāi)朗 - 博客園

Excel中各種VBA寫(xiě)法

http://www.cnblogs.com/xioxu/archive/2007/09/19/898282.html

先貼一段網(wǎng)上找的excel的各種事件

工作簿對(duì)象事件一覽表
當(dāng)工作簿更改、工作簿中的任何工作表更改、加載宏更改或數(shù)據(jù)透視表更改時(shí),將引發(fā)工作簿事件。工作簿上的事件在默認(rèn)情況下是可用的。若要查看工作簿的事件過(guò)程,請(qǐng)用鼠標(biāo)右鍵單擊處于還原狀態(tài)或最小化狀態(tài)的工作簿窗口標(biāo)題欄,再單擊快捷菜單上的“查看代碼”。在“過(guò)程”下拉列表框內(nèi)選擇事件名稱。
事件說(shuō)明
Activate激活工作薄時(shí)
AddinInstall當(dāng)工作簿作為加載宏安裝時(shí)
AddinUninstall工作簿作為加載宏卸載時(shí)
BeforeClose關(guān)閉工作薄前
BeforePrint打印工作薄(或其中任何內(nèi)容)之前
BeforeSave保存工作薄前
Deactivate工作簿從活動(dòng)狀態(tài)轉(zhuǎn)為非活動(dòng)狀態(tài)時(shí)
NewSheet在工作簿中新建工作表時(shí)
Open打開(kāi)工作簿時(shí)
PivotTableCloseConnection在數(shù)據(jù)透視表關(guān)閉與其數(shù)據(jù)源的連接之后
PivotTableOpenConnection在數(shù)據(jù)透視表打開(kāi)與其數(shù)據(jù)源的連接之后
SheetActivate激活任何一張表時(shí)
SheetBeforeDoubleClick雙擊任何工作表時(shí)
SheetBeforeRightClick鼠標(biāo)右鍵單擊任一工作表時(shí)
SheetCalculate工作表重新計(jì)算時(shí)
SheetChange更改工作表中的單元格時(shí)
SheetDeactivate任一工作表由活動(dòng)狀態(tài)轉(zhuǎn)為非活動(dòng)狀態(tài)時(shí)
SheetFollowHyperlink單擊 Microsoft Excel 中的任意超鏈接時(shí)
SheetPivotTableUpdate數(shù)據(jù)透視表的工作表更新之后
SheetSelectionChange工作簿中的數(shù)據(jù)透視表更新之后
WindowActivate工作簿的窗口激活時(shí)
WindowDeactivate工作簿的窗口變?yōu)榉腔顒?dòng)狀態(tài)時(shí)
WindowResize工作簿窗口調(diào)整大小時(shí)


工作表事件一覽表
工作表上的事件在默認(rèn)情況下是可用的。若要查看工作表的事件過(guò)程,請(qǐng)用鼠標(biāo)右鍵單擊工作表標(biāo)簽,再單擊快捷菜單上的“查看代碼”。在“過(guò)程”下拉列表框內(nèi)選擇事件名稱。
事件說(shuō)明
Activate 激活工作表時(shí)
Deactivate工作表從活動(dòng)狀態(tài)轉(zhuǎn)為非活動(dòng)狀態(tài)時(shí)
BeforeDoubleClick 雙擊工作表前
BeforeRightClick 右鍵單擊工作表時(shí)
Calculate 對(duì)工作表進(jìn)行重新計(jì)算之后
Change 更改工作表中的單元格,或外部鏈接引起單元格時(shí)
FollowHyperlink 單擊工作表上的任意超鏈接時(shí)
PivotTableUpdate 在工作簿中的數(shù)據(jù)透視表更新之后
SelectionChange工作表上的選定區(qū)域發(fā)生改變時(shí)

再貼一堆代碼

例為設(shè)置密碼窗口 (1) 
If Application.InputBox("請(qǐng)輸入密碼:") = 1234 Then 
[A1] = 1 '密碼正確時(shí)執(zhí)行 
Else: MsgBox "密碼錯(cuò)誤,即將退出!" '此行與第2行共同設(shè)置密碼 
End If 

本示例為設(shè)置密碼窗口 (1) 
X = MsgBox("是否真的要結(jié)帳?", vbYesNo) 
If X = vbYes Then 
Close 

本示例為設(shè)置工作表密碼 
ActiveSheet.Protect Password:=641112 ' 保護(hù)工作表并設(shè)置密碼 
ActiveSheet.Unprotect Password:=641112 '撤消工作表保護(hù)并取消密碼 

'本示例關(guān)閉除正在運(yùn)行本示例的工作簿以外的其他所有工作簿,并保存其更改內(nèi)容 

。 
For Each w In Workbooks 
If w.Name ThisWorkbook.Name Then 
w.Close SaveChanges:=True 
End If 
Next w 

'每次打開(kāi)工作簿時(shí),本示例都最大化 Microsoft Excel 窗口。 
Application.WindowState = xlMaximized 

'本示例顯示活動(dòng)工作表的名稱。 
MsgBox "The name of the active sheet is " & ActiveSheet.Name 

'本示例保存當(dāng)前活動(dòng)工作簿的副本。 
ActiveWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS" 

'下述過(guò)程激活工作簿中的第四張工作表。 
Sheets(4).Activate 


'下述過(guò)程激活工作簿中的第1張工作表。 
Worksheets(1).Activate 

'本示例通過(guò)將 Saved 屬性設(shè)為 True 來(lái)關(guān)閉包含本段代碼的工作簿,并放棄對(duì)該 

工作簿的任何更改。 
ThisWorkbook.Saved = True 
ThisWorkbook.Close 

'本示例對(duì)自動(dòng)重新計(jì)算功能進(jìn)行設(shè)置,使 Microsoft Excel 不對(duì)第一張工作表自 

動(dòng)進(jìn)行重新計(jì)算。 
Worksheets(1).EnableCalculation = False 

'下述過(guò)程打開(kāi) C 盤上名為 MyFolder 的文件夾中的 MyBook.xls 工作簿。 
Workbooks.Open ("C:\MyFolder\MyBook.xls") 

'本示例顯示活動(dòng)工作簿中工作表 sheet1 上單元格 A1 中的值。 
MsgBox Worksheets("Sheet1").Range("A1").Value 

本示例顯示活動(dòng)工作簿中每個(gè)工作表的名稱 
For Each ws In Worksheets 
MsgBox ws.Name 
Next ws 

本示例向活動(dòng)工作簿添加新工作表 , 并設(shè)置該工作表的名稱? 
Set NewSheet = Worksheets.Add 
NewSheet.Name = "current Budget" 

本示例將新建的工作表移到工作簿的末尾 
'Private Sub Workbook_NewSheet(ByVal Sh As Object) 
Sh.Move After:=Sheets(Sheets.Count) 
End Sub 

本示例將新建工作表移到工作簿的末尾 
'Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, _ 
ByVal Sh As Object) 
Sh.Move After:=Wb.Sheets(Wb.Sheets.Count) 
End Sub 

本示例新建一張工作表,然后在第一列中列出活動(dòng)工作簿中的所有工作表的名稱。 
Set NewSheet = Sheets.Add(Type:=xlWorksheet) 
For i = 1 To Sheets.Count 
NewSheet.Cells(i, 1).Value = Sheets(i).Name 
Next i 

本示例將第十行移到窗口的最上面? 
Worksheets("Sheet1").Activate 
ActiveWindow.ScrollRow = 10 

當(dāng)計(jì)算工作簿中的任何工作表時(shí),本示例對(duì)第一張工作表的 A1:A100 區(qū)域進(jìn)行排序 

。 
'Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
With Worksheets(1) 
.Range("a1:a100").Sort Key1:=.Range("a1") 
End With 
End Sub 
本示例顯示工作表 Sheet1 的打印預(yù)覽。 
Worksheets("Sheet1").PrintPreview 

本示例保存當(dāng)前活動(dòng)工作簿? 
ActiveWorkbook.Save 

本示例保存所有打開(kāi)的工作簿,然后關(guān)閉 Microsoft Excel。 
For Each w In Application.Workbooks 
w.Save 
Next w 
Application.Quit 

下例在活動(dòng)工作簿的第一張工作表前面添加兩張新的工作表? 
Worksheets.Add Count:=2, Before:=Sheets(1) 

本示例設(shè)置 15 秒后運(yùn)行 my_Procedure 過(guò)程,從現(xiàn)在開(kāi)始計(jì)時(shí)。 
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 


本示例設(shè)置 my_Procedure 在下午 5 點(diǎn)開(kāi)始運(yùn)行。 
Application.OnTime TimeValue("17:00:00"), "my_Procedure" 

本示例撤消前一個(gè)示例對(duì) OnTime 的設(shè)置。 
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ 
Procedure:="my_Procedure", Schedule:=False 

每當(dāng)工作表重新計(jì)算時(shí),本示例就調(diào)整 A 列到 F 列的寬度。 
'Private Sub Worksheet_Calculate() 
Columns("A:F").AutoFit 
End Sub 

本示例使活動(dòng)工作簿中的計(jì)算僅使用顯示的數(shù)字精度。 
ActiveWorkbook.PrecisionAsDisplayed = True 

本示例將工作表 Sheet1 上的 A1:G37 區(qū)域剪下,并放入剪貼板。 
Worksheets("Sheet1").Range("A1:G37").Cut 

Calculate 方法 
計(jì)算所有打開(kāi)的工作簿、工作簿中的一張?zhí)囟ǖ墓ぷ鞅砘蛘吖ぷ鞅碇兄付▍^(qū)域的單元 

格,如下表所示: 
'要計(jì)算 '依照本示例 
所有打開(kāi)的工作簿 ' Application.Calculate (或只是 Calculate 

) 
指定工作表 '計(jì)算指定工作表Sheet1 Worksheets 

("Sheet1").Calculate 
指定區(qū)域 'Worksheets(1).Rows(2).Calculate 

本示例對(duì)自動(dòng)重新計(jì)算功能進(jìn)行設(shè)置,使 Microsoft Excel 不對(duì)第一張工作表自動(dòng) 

進(jìn)行重新計(jì)算。 
Worksheets(1).EnableCalculation = False 

本示例計(jì)算 Sheet1 已用區(qū)域中 A 列、B 列和 C 列的公式。 
Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate 

本示例更新當(dāng)前活動(dòng)工作簿中的所有鏈接? 
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources 

本示例設(shè)置第一張工作表的滾動(dòng)區(qū)域? 
Worksheets(1).ScrollArea = "a1:f10" 

本示例新建一個(gè)工作簿,提示用戶輸入文件名,然后保存該工作簿。 
Set NewBook = Workbooks.Add 
Do 
fName = Application.GetSaveAsFilename 
Loop Until fName False 
NewBook.SaveAs Filename:=fName 

本示例打開(kāi) Analysis.xls 工作簿,然后運(yùn)行 Auto_Open 宏。 
Workbooks.Open "ANALYSIS.XLS" 
ActiveWorkbook.RunAutoMacros xlAutoOpen 

本示例對(duì)活動(dòng)工作簿運(yùn)行 Auto_Close 宏,然后關(guān)閉該工作簿。 
With ActiveWorkbook 
.RunAutoMacros xlAutoClose 
.Close 
End With 

在本示例中,Microsoft Excel 向用戶顯示活動(dòng)工作簿的路徑和文件名稱。 
'Sub UseCanonical() 
Display the full path to user. 
MsgBox ActiveWorkbook.FullNameURLEncoded 
End Sub 

本示例顯示當(dāng)前工作簿的路徑及文件名(假定尚未保存此工作簿)。 
MsgBox ActiveWorkbook.FullName 

本示例關(guān)閉 Book1.xls,并放棄所有對(duì)此工作簿的更改。 
Workbooks("BOOK1.XLS").Close SaveChanges:=False 

本示例關(guān)閉所有打開(kāi)的工作簿。如果某個(gè)打開(kāi)的工作簿有改變,Microsoft Excel 

將顯示詢問(wèn)是否保存更改的對(duì)話框和相應(yīng)提示。 
Workbooks.Close 

本示例在打印之前對(duì)當(dāng)前活動(dòng)工作簿的所有工作表重新計(jì)算? 
'Private Sub Workbook_BeforePrint(Cancel As Boolean) 
For Each wk In Worksheets 
wk.Calculate 
Next 
End Sub 

本示例對(duì)查詢表一中的第一列數(shù)據(jù)進(jìn)行匯總,并在數(shù)據(jù)區(qū)域下方顯示第一列數(shù)據(jù)的總 

和。 
Set c1 = Sheets("sheet1").QueryTables(1).ResultRange.Columns(1) 
c1.Name = "Column1" 
c1.End(xlDown).Offset(2, 0).Formula = "=sum(Column1)" 

本示例取消活動(dòng)工作簿中的所有更改? 
ActiveWorkbook.RejectAllChanges 

本示例在商業(yè)問(wèn)題中使用規(guī)劃求解函數(shù),以使總利潤(rùn)達(dá)到最大值。SolverSave 函數(shù) 

將當(dāng)前問(wèn)題保存到活動(dòng)工作表上的某一區(qū)域。 
Worksheets("Sheet1").Activate 
SolverReset 
SolverOptions Precision:=0.001 
SolverOK SetCell:=Range("TotalProfit"), _ 
MaxMinVal:=1, _ 
ByChange:=Range("C4:E6") 
SolverAdd CellRef:=Range("F4:F6"), _ 
Relation:=1, _ 
FormulaText:=100 
SolverAdd CellRef:=Range("C4:E6"), _ 
Relation:=3, _ 
FormulaText:=0 
SolverAdd CellRef:=Range("C4:E6"), _ 
Relation:=4 
SolverSolve UserFinish:=False 
SolverSave SaveArea:=Range("A33") 

本示例隱藏 Chart1、Chart3 和 Chart5。 
Charts(Array("Chart1", "Chart3", "Chart5")).Visible = False 

當(dāng)激活工作表時(shí),本示例對(duì) A1:A10 區(qū)域進(jìn)行排序。 
'Private Sub Worksheet_Activate() 
Range("a1:a10").Sort Key1:=Range("a1"), order:=xlAscending 
End Sub 

本示例更改 Microsoft Excel 鏈接。 
ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _ 
"c:\excel\book2.xls", xlExcelLinks 

本示例啟用受保護(hù)的工作表上的自動(dòng)篩選箭頭? 
ActiveSheet.EnableAutoFilter = True 
ActiveSheet.Protect contents:=True, userInterfaceOnly:=True 

本示例將活動(dòng)工作簿設(shè)為只讀? 
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly 

本示例使共享工作簿每三分鐘自動(dòng)更新一次? 
ActiveWorkbook.AutoUpdateFrequency = 3 

下述 Sub 過(guò)程清除活動(dòng)工作簿中 Sheet1 上的所有單元格的內(nèi)容。 
'Sub ClearSheet() 
Worksheets("Sheet1").Cells.ClearContents 
End Sub 

本示例對(duì)所有工作簿都關(guān)閉滾動(dòng)條? 
Application.DisplayScrollBars = False 

如果具有密碼保護(hù)的工作簿的文件屬性沒(méi)有加密,則本示例設(shè)置指定工作簿的密碼加 

密選項(xiàng)。 
'Sub SetPasswordOptions() 
With ActiveWorkbook 
If .PasswordEncryptionProvider "Microsoft RSA SChannel 

Cryptographic Provider" Then 
.SetPasswordEncryptionOptions _ 
PasswordEncryptionProvider:="Microsoft RSA SChannel 

Cryptographic Provider", _ 
PasswordEncryptionAlgorithm:="RC4", _ 
PasswordEncryptionKeyLength:=56, _ 
PasswordEncryptionFileProperties:=True 
End If 
End With 
End Sub 

在本示例中,如果活動(dòng)工作簿不能進(jìn)行寫(xiě)保護(hù),那么 Microsoft Excel 設(shè)置字符串 

密碼以作為活動(dòng)工作簿的寫(xiě)密碼。 
'Sub UseWritePassword() 
Dim strPassword As String 
strPassword = "secret" 
' Set password to a string if allowed. 
If ActiveWorkbook.WriteReserved = False Then 
ActiveWorkbook.WritePassword = strPassword 
End If 
End Sub 

在本示例中,Microsoft Excel 打開(kāi)名為 Password.xls 的工作簿,設(shè)置它的密碼 

,然后關(guān)閉該工作簿。本示例假定名為 Password.xls 的文件位于 C:\ 驅(qū)動(dòng)器上。 
'Sub UsePassword() 

Dim wkbOne As Workbook 

Set wkbOne = Application.Workbooks.Open("C:\Password.xls") 

wkbOne.Password = "secret" 
wkbOne.Close 
'注意 Password 屬性可讀并返回 “********”。 
End Sub 

本示例將 Book1.xls 的當(dāng)前窗口更改為顯示公式。 
Workbooks("BOOK1.XLS").Worksheets("Sheet1").Activate 
ActiveWindow.DisplayFormulas = True 

'本示例接受活動(dòng)工作簿中的所有更改? 
ActiveWorkbook.AcceptAllChanges 

本示例顯示活動(dòng)工作簿的路徑和名稱 
Sub UseCanonical() 
MsgBox '消息框 
[b7] = ActiveWorkbook.FullName '當(dāng)前工作簿 
[b8] = ActiveWorkbook.FullNameURLEncoded '活動(dòng)工作簿 
End Sub 

本示例顯示 Microsoft Excel 啟動(dòng)文件夾的完整路徑。 
MsgBox Application.StartupPath 

本示例顯示活動(dòng)工作簿中每個(gè)工作表的名稱。 
For Each ws In Worksheets 
MsgBox ws.Name 
Next ws 

本示例關(guān)閉除正在運(yùn)行本示例的工作簿以外的其他所有工作簿,并保存其更改內(nèi)容。 

For Each w In Workbooks 
If w.Name ThisWorkbook.Name Then 
w.Close savechanges:=True 
End If 
Next w 

Activate 事件 
激活一個(gè)工作簿、工作表、圖表或嵌入圖表時(shí)產(chǎn)生此事件。 
當(dāng)激活工作表時(shí),本示例對(duì) A1:A10 區(qū)域進(jìn)行排序。 
Private Sub Worksheet_Activate() 
Range("a1:a10").Sort Key1:=Range("a1"), order:=xlAscending 
End Sub 

Calculate 事件 
對(duì)于 Worksheet 對(duì)象,在對(duì)工作表進(jìn)行重新計(jì)算之后產(chǎn)生此事件 
每當(dāng)工作表重新計(jì)算時(shí),本示例就調(diào)整 A 列到 F 列的寬度。 
Private Sub Worksheet_Calculate() 
Columns("A:F").AutoFit 
End Sub 

BeforeDoubleClick 事件 
應(yīng)用于 Worksheet 對(duì)象的 Activate 方法。 
當(dāng)雙擊某工作表時(shí)產(chǎn)生此事件,此事件先于默認(rèn)的雙擊操作。 
Private Sub expression_BeforeDoubleClick(ByVal Target As Range, Cancel 

As Boolean) 
expression 引用在類模塊中帶有事件聲明的 Worksheet 類型對(duì)象的變量。 
Target 必需。雙擊發(fā)生時(shí)最靠近鼠標(biāo)指針的單元格。 
Cancel 可選。當(dāng)事件發(fā)生時(shí)為 False。如果事件過(guò)程將該參數(shù)設(shè)為 True,則該 

過(guò)程執(zhí)行完之后將不進(jìn)行默認(rèn)的雙擊操作。 

BeforeRightClick 事件 
應(yīng)用于 Worksheet 對(duì)象的 Activate 方法。 
當(dāng)用鼠標(biāo)右鍵單擊某工作表時(shí)產(chǎn)生此事件,此事件先于默認(rèn)的右鍵單擊操作。 
Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel 

As Boolean) 
expression 引用在類模塊中帶有事件聲明的 Worksheet 類型對(duì)象的變量。 
Target 必需。右鍵單擊發(fā)生時(shí)最靠近鼠標(biāo)指針的單元格。 
Cancel 可選。當(dāng)事件發(fā)生時(shí)為 False。如果該事件過(guò)程將本參數(shù)設(shè)為 True,則 

該過(guò)程執(zhí)行結(jié)束之后不進(jìn)行默認(rèn)的右鍵單擊操作。 

Change 事件 
當(dāng)用戶更改工作表中的單元格,或外部鏈接引起單元格的更改時(shí)產(chǎn)生此事件。 
Private Sub Worksheet_Change(ByVal Target As Range) 
Target 更改的區(qū)域??梢允嵌鄠€(gè)單元格。 
說(shuō)明 
重新計(jì)算引起的單元格更改不觸發(fā)本事件??墒褂?nbsp;Calculate 事件俘獲工作表重新 

計(jì)算操作。 
本示例將更改的單元格的顏色設(shè)為藍(lán)色。 
Private Sub Worksheet_Change(ByVal Target as Range) 
Target.Font.ColorIndex = 5 
End Sub 

Deactivate 事件 
圖表、工作表或工作簿從活動(dòng)狀態(tài)轉(zhuǎn)為非活動(dòng)狀態(tài)時(shí)產(chǎn)生此事件。 
Private Sub object_Deactivate() 
object Chart、Workbook 或者 Worksheet。有關(guān)對(duì) Chart 對(duì)象使用事件的詳細(xì) 

信息,請(qǐng)參閱 Chart 對(duì)象事件的用法。 
本示例當(dāng)工作簿轉(zhuǎn)為非活動(dòng)狀態(tài)時(shí),對(duì)所有打開(kāi)的窗口進(jìn)行排列。 
Private Sub Workbook_Deactivate() 
Application.Windows.Arrange xlArrange 
End Sub 

FollowHyperlink 事件 
當(dāng)單擊工作表上的任意超鏈接時(shí),發(fā)生此事件。對(duì)于應(yīng)用程序級(jí)或工作簿級(jí)的事件, 

請(qǐng)參閱 SheetFollowHyperlink 事件。 
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
Target Hyperlink 類型,必需。一個(gè)代表超鏈接目標(biāo)位置的 Hyperlink 對(duì)象。 
本示例對(duì)在當(dāng)前活動(dòng)工作簿中訪問(wèn)過(guò)的所有鏈接保留一個(gè)列表或歷史記錄。 
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
With UserForm1 
.ListBox1.AddItem Target.Address 
.Show 
End With 
End Sub 

PivotTableUpdate 事件 
發(fā)生在工作簿中的數(shù)據(jù)透視表更新之后。 
Private Sub expression_PivotTableUpdate(ByVal Target As PivotTable) 
expression 引用在類模塊中帶有事件聲明的 Worksheet 類型對(duì)象的變量。 
Target 必需。選定的數(shù)據(jù)透視表。 
本示例顯示一則消息,說(shuō)明數(shù)據(jù)透視表已經(jīng)更新。本示例假定您已在類模塊中聲明了 

帶有事件的 Worksheet 類型的對(duì)象。 
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 
MsgBox "The PivotTable connection has been updated." 
End Sub 

SelectionChange 事件 
當(dāng)工作表上的選定區(qū)域發(fā)生改變時(shí),將產(chǎn)生本事件。 
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
Target 新選定的區(qū)域。 
本示例滾動(dòng)工作簿窗口,直至選定區(qū)域位于窗口的左上角。 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
With ActiveWindow 
.ScrollRow = Target.Row 
.ScrollColumn = Target.Column 
End With 
End Sub 

本示例顯示活動(dòng)工作簿中工作表 sheet1 上單元格 A1 中的值。 
MsgBox Worksheets("Sheet1").Range("A1").Value 

本示例顯示活動(dòng)工作簿中每個(gè)工作表的名稱。 
For Each ws In Worksheets 
MsgBox ws.Name 
Next ws 

本示例向活動(dòng)工作簿添加新工作表,并設(shè)置該工作表的名稱。 
Set newSheet = Worksheets.Add 
newSheet.Name = "current Budget" 

本示例關(guān)閉工作簿 Book1.xls,但不提示用戶保存所作更改。Book1.xls 中的所有 

更改都不會(huì)保存。 
Application.DisplayAlerts = False 
Workbooks("BOOK1.XLS").Close 
Application.DisplayAlerts = True 

本示例設(shè)置保存文件時(shí)顯示提示,要求用戶輸入?yún)R總信息。 
Application.PromptForSummaryInfo = True 

本示例顯示 Microsoft Excel 的完整路徑。 
Private Sub aa() 
MsgBox "The path is " & Application.Path 
End Sub 

示例顯示每一個(gè)可用加載宏的路徑及文件名。 
For Each a In AddIns 
MsgBox a.FullName 
Next a 

ChDir 語(yǔ)句 
改變當(dāng)前的目錄或文件夾。 
ChDir path 
在 Power Macintosh 中,默認(rèn)驅(qū)動(dòng)器總是改為在 path 語(yǔ)句中指定的驅(qū)動(dòng)器。完整 

路徑指定由卷標(biāo)名開(kāi)始,相對(duì)路徑由冒號(hào) ( 開(kāi)始. ChDir 可以辨認(rèn)路徑中指定的 

別名: 
ChDir "MacDrive:Tmp" ' 在 Macintosh 中 

本示例顯示當(dāng)前路徑分隔符。 
MsgBox "The path separator character is " & _ 
Application.PathSeparator 

Move 方法 
將一個(gè)指定的文件或文件夾從一個(gè)地方移動(dòng)到另一個(gè)地方。 
語(yǔ)法 
object.Move destination 
Move 方法語(yǔ)法有如下幾部分: 
部分 描述 
object 必需的。始終是一個(gè) File 或 Folder 對(duì)象的名字。 
destination 必需的。文件或文件夾要移動(dòng)到的目標(biāo)。不允許有通配符。 

CreateFolder 方法 
創(chuàng)建一個(gè)文件夾。 
語(yǔ)法 
object.CreateFolder(foldername) 
reateFolder 方法有如下幾部分: 
部分 描述 
object 必需的。始終是一個(gè) FileSystemObject 的名字。 
foldername 必需的。字符串表達(dá)式,它標(biāo)識(shí)創(chuàng)建的文件夾。 

本示例使用 MkDir 語(yǔ)句來(lái)創(chuàng)建目錄或文件夾。如果沒(méi)有指定驅(qū)動(dòng)器,新目錄或文件 

夾將會(huì)建在當(dāng)前驅(qū)動(dòng)器中。 
MkDir "MYDIR" ' 建立新的目錄或文件夾。 

Name 語(yǔ)句示例 
本示例使用 Name 語(yǔ)句來(lái)更改文件的名稱。示例中假設(shè)所有使用到的目錄或文件夾都 

已存在。 在 Macintosh 中,默認(rèn)驅(qū)動(dòng)器名稱是 “HD” 并且路徑部分由冒號(hào)取代 

反斜線隔開(kāi)。 
Dim OldName, NewName 
OldName = "OLDFILE": NewName = "NEWFILE" ' 定義文件名。 
Name OldName As NewName ' 更改文件名。 
OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE" 
Name OldName As NewName ' 更改文件名,并移動(dòng)文件。 

本示例顯示當(dāng)前默認(rèn)文件路徑。 
MsgBox "The current default file path is " & _ 
Application.DefaultFilePath 

本示例設(shè)置替換啟動(dòng)文件夾。 
Application.AltStartupPath = "C:\EXCEL\MACROS" 

FolderExists 方法 
如果指定的文件夾存在返回 True,不存在返回 False。 
語(yǔ)法 
object.FolderExists(folderspec) 

本示例在單元格中啟用編輯。 
Application.EditDirectlyInCell = True 

程序說(shuō)明: 
幾種用VBA在單元格輸入數(shù)據(jù)的方法: 
Public Sub Writes() 
1-- 2 方法,最簡(jiǎn)單在 "[ ]" 中輸入單元格名稱。 
1 [A1] = 100 '在 A1 單元格輸入100。 
2 [A2:A4] = 10 '在 A2:A4 單元格輸入10。 
3-- 4 方法,采用 Range(" "), " " 中輸入單元格名稱。 
3 Range("B1") = 200 '在 B1 單元格輸入200。 
4 Range("C1:C3") = 300 '在 C1:C3 單元格輸入300。 
5-- 6 方法,采用 Cells(Row,Column),Row是單元格行數(shù),Column是單元格欄數(shù)。 
5 Cells(1, 4) = 400 '在 D1 單元格輸入400。 
6 Range(Cells(1, 5), Cells(5, 5)) = 50 '在 E1:E 5單元格輸入50。 
End Sub 

你點(diǎn)選任何單元格,按 Selection 按鈕,則則所點(diǎn)選的單元格均會(huì)被輸入文字 

"Test"。 
Public Sub Selection1() 
Selection.Value = "Test" '在任何你點(diǎn)選的單元格輸入文字 "Test"。 
End Sub 

VBALesson2 程序說(shuō)明: 
幾種如何把別的工作表 Sheet4 數(shù)據(jù),讀到這個(gè)工作表的方法:在被讀取的單元格 

前加上工作表名稱 Sheet4。 
Public Sub Writes() 
1-- 2 方法,最簡(jiǎn)單在被讀取的 "[ ]" 前加上被讀取的工作表名稱 Sheet4。 
1 [A1] = Sheet4.[A1] '把Sheet4 A1 單元格的數(shù)據(jù),讀到 A1單元格。 
2 [A2:A4] = Sheet4.[B1] ''把 Shee4 工作表單元格 B1 數(shù)據(jù),讀到 A2:A4 

單元格。 
3-- 4 方法,在被讀取的工作表 Range(" ")的 Range 前加上被讀取的工作表名稱 

Sheet4。 
3 Range("B1") = Sheet4.Range("B1") ''把 Shee4工作表單元格 B1 數(shù)據(jù),讀 

到 B1 單元格。 
4 Range("C1:C3") = Sheet4.Range("C1") '把 Shee4 工作表單元格 C1 數(shù)據(jù) 

,讀到 C1:C3 單元格。 
5-- 6 方法,在被讀取的工作表 Cells(Row,Column),Cells 前加上被讀取工作表 

名稱 Sheet4。 
5 Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表單元格 D1 數(shù)據(jù),讀 

到 D1 單元格。 
6 Range(Cells(1, 5), Cells(5, 5)) = Sheet4.Cells(1, 5) '把 Shee4 工 

作表單元格 E1 數(shù)據(jù),讀到 E1:E 5單元格。 
End Sub 

你點(diǎn)選任何單元格,按 Selection 按鈕,則所點(diǎn)選的單元格均會(huì)被輸入 Shee4 工 

作表單元格 F1 數(shù)據(jù)。 
Public Sub Selection1() 
Selection.Value = Sheet4.[F1] '把 Shee4 工作表單元格 F1 數(shù)據(jù),讀到任 

何你點(diǎn)選的單元格。 
End Sub 

VBALesson3 程序說(shuō)明: 
如何利用 Worksheet_SelectionChange 輸入數(shù)據(jù)的方法。 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Target = 100 
End Sub 

Target 指的是你鼠標(biāo)所選的單元格,Worksheet_SelectionChange() 事件的參數(shù) 

。 
可以是一個(gè)也可以是好幾個(gè)單元格。 
Range 是 Excel 特有的變量形態(tài),叫范圍。 
Target As Rang 是把 Target 這個(gè)參數(shù)設(shè)定為 Range 變量形態(tài)。 
Target = 100 是把你點(diǎn)選的單元格輸入數(shù)字100。 

VBALesson4 程序說(shuō)明: 
如何利用 Worksheet_SelectionChange 在限定的單元格輸入數(shù)據(jù)的方法。 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Row >= 2 And Target.Column = 2 Then 
Target = 100 
End If 
End Sub 

If ... Then ... End If 這是我們學(xué)的這一個(gè)邏輯判斷語(yǔ)句。 
Target.Row >= 2,指的是鼠標(biāo)選定的單元格的行大于或等于 2。 
Target.Column = 2 ,指的是鼠標(biāo)選定的單元格的欄等于 2。 
If Target.Row >= 2 And Target.Column = 2 Then 指的是只有在Target.Row >= 

2及Target.Column = 2二個(gè)條件成立時(shí)。 
就是 (Target.Row >= 2) 為True及(Target.Column = 2)為True時(shí),才執(zhí)行下面的 
程序 Target=100, 
也就是 B 欄第二行及以下行用鼠標(biāo)被點(diǎn)選時(shí),才會(huì)被輸入100,其它單元格則不被輸 

入數(shù)據(jù)。 

VBALesson5 程序說(shuō)明: 
比較 Worksheet_SelectionChange() 與用按鈕 CommandButton1_Click() 來(lái)執(zhí)行 

程序二者的方法與寫(xiě)法有何不同。 
Worksheet_SelectionChange()事件 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Row >= 2 And Target.Column = 2 Then 
Target = 100 
End If 
End Sub 

按鈕 CommandButton1_Click() 
Private Sub CommandButton1_Click() 
If ActiveCell.Row >= 2 And ActiveCell.Column >= 3 Then 
ActiveCell = 100 
End If 
End Sub 

二者執(zhí)行方法最大的地方,在于 Worksheet_SelectionChange() 是自動(dòng)的,你不用 

了解他是怎么完成工作的。 
按鈕 CommandButton1_Click() 是人工的,比 SelectionChange()多一道手續(xù), 

就是要去按那接鈕,程序才會(huì)執(zhí)行。 
SelectionChange() 有一個(gè)參數(shù) Target 可用;CommandButton1_Click ()沒(méi)有。 
所以我們要用 ActiveCell 內(nèi)定函數(shù)來(lái)取代Target,ActiveCell 與 Target最大的 

不同點(diǎn)他只能指定一個(gè)單元格。 
就是你選取多個(gè)單元格也只有最上面的單元格會(huì)加上數(shù)據(jù);用 Selection 取代 

ActiveCell, 用法就跟 Target 一樣了。 

VBALesson 6 程序說(shuō)明: 
完整的 If...Then ┅ End 邏輯判斷式。 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Row >= 2 And Target.Column = 2 Then 
Target = 200 
ElseIf Target.Row >= 2 And Target.Column = 3 Then 
Target = 300 
ElseIf Target.Row >= 2 And Target.Column = 2 Then 
Target = 400 
Else 
Target = 500 
End If 
End Sub 

這是個(gè)完整的 If 邏輯判斷式,意思是說(shuō),假如 If 後的判斷式條件成立的話,就 

執(zhí)行第二條程序,否則假如 ElseIf 後的判斷式條件成立的話,就執(zhí)行第四條程序 

,否則假如另一個(gè) ElseIf 後的判斷式條件成立的話,就執(zhí)行第六條程序。 
Else 的意思是說(shuō),假如以上條件都不成立的話,就執(zhí)行第八條程序。 
他的執(zhí)行方式是假如 IF 的條件成立的話,就不執(zhí)行其它ElseIf 及Else 的邏輯判 

斷式,假如 If 後的條件不成立的話才會(huì)執(zhí)行 ElseIf 或 Else 邏輯判斷式。第二 

個(gè) ElseIf後的條件因?yàn)榕c IF 後的條件一樣,所以這個(gè)判斷式後面的 Target=400 

將是永遠(yuǎn)無(wú)法執(zhí)行到的程序。 

VBALesson 7 程序說(shuō)明∶我們?yōu)槭颤N要用變數(shù)。 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim i , j As Integer 
Dim k As Range 
i = Target.Row 
j = Target.Column 
Set k = Target 
If i >= 2 And j = 2 Then 
k = 200 
ElseIf i >= 2 And j = 3 Then 
k = 300 
ElseIf i >= 2 And j = 4 Then 
k = 400 
Else 
k = 500 
End If 
End Sub 

跟VBALesson 6比較,程序是不是明朗多了,在前課重復(fù)的用 Target.Row, 

Target.Column及Target來(lái)寫(xiě)程序是不是有一點(diǎn)煩。用變量的第一個(gè)好處大家馬上感 

覺(jué)得出來(lái),就是可以簡(jiǎn)化程序。 
使用變量前,你得先宣告變量。宣告變量的方法是在 "Dim " 后面寫(xiě)上變量 " i 

" As 后面接上變量的形態(tài) "Integer"。 
Dim i , j As Integer 就是宣告 i 與 j 為整數(shù)變量,這是同時(shí)宣告二個(gè)變量 

i 與 j 所以要在二個(gè)變量間加個(gè) " , "號(hào)。 
Dim k As Range 是宣告 k 為范圍資料形態(tài),Range這是 Excel 特有的資料形態(tài) 

。 
i = Target.Row是把當(dāng)前單元格的行數(shù),指定給變量 i。 
j = Target.Column 是把當(dāng)前單元格的欄數(shù),指定給變量 j。 
Set k = Target 是把當(dāng)前的單元格,指定給變量 k。 
用像 i 與 j 這樣簡(jiǎn)單的變量,在程序的前面你可能還記得 i 或 j 代表著 

什厶。程序?qū)戦L(zhǎng)了,你可能忘記 i 或 j 代表著什厶。所以最好的方法是用比較有 

意義的代號(hào),來(lái)為變量命名如 iRow 或 iCol 來(lái)取代 i 及 j 。 

VBALesson 8 程序說(shuō)明∶體會(huì)一下Worksheet_Change()事件。 

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim iRow, iCol As Integer 
iRow = Target.Row 
iCol = Target.Column 
If iRow >= 2 And iCol = 2 And Target "" Then 
Application.EnableEvents = False 
Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2 
Application.EnableEvents = True 
ElseIf iRow >= 2 And iCol = 2 And Target = "" Then 
Cells(iRow, iCol + 1) = "" 
Else 
Cells(iRow, iCol + 1) = "" 
End If 
End Sub 

前幾個(gè)教程都是用Worksheet_SelectionChange 事件來(lái)舉例子,大家應(yīng)該能體會(huì)他 

是怎厶一回事了吧。 
這個(gè)教程就是要讓你來(lái)體會(huì)什厶是Worksheet_Chang()事件。因?yàn)檫@二個(gè)事件在VBA 

都是非常有用的,所以一定要了解。 
簡(jiǎn)單的說(shuō),前者是你鼠標(biāo)移動(dòng)到那個(gè)單元格,就觸發(fā)那個(gè)事件的執(zhí)行。後者是要等到 

你點(diǎn)選的單元格,數(shù) 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
科學(xué)網(wǎng)—電子表格VBA編程計(jì)算速成(2)
Excel 2010 中的 VBA 入門
Excel 工作簿、工作表事件例子
Excel-VBA:13、Excel事件程序
跟煙花入門VBA之56:工作表對(duì)象Worksheet(十一)
搜集各種Excel VBA的命令供參考!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服