在本示例中,如果活動工作簿不能進行寫保護,那麽 Microsoft Excel 設置字串
密碼以作爲活動工作簿的寫密碼。
'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 打開名爲 Password.xls 的工作簿,設置它的密碼
,然後關閉該工作簿。本示例假定名爲 Password.xls 的文件位於 C:\ 驅動器上。
'Sub UsePassword()
Dim wkbOne As Workbook
Set wkbOne = Application.Workbooks.Open("C:\Password.xls")
wkbOne.Password = "secret"
wkbOne.Close
'注意 Password 屬性可讀並返回 “********”。
End Sub
本示例將 Book1.xls 的當前窗口更改爲顯示公式。
Workbooks("BOOK1.XLS").Worksheets("Sheet1").Activate
ActiveWindow.DisplayFormulas = True
'本示例接受活動工作簿中的所有更改?
ActiveWorkbook.AcceptAllChanges
本示例顯示活動工作簿的路徑和名稱
Sub UseCanonical()
MsgBox '訊息方塊
[b7] = ActiveWorkbook.FullName '當前工作簿
[b8] = ActiveWorkbook.FullNameURLEncoded '活動工作簿
End Sub
本示例顯示 Microsoft Excel 啓動檔夾的完整路徑。
MsgBox Application.StartupPath
Activate 事件
啟動一個工作簿、工作表、圖表或嵌入圖表時産生此事件。
當啟動工作表時,本示例對 A1:A10 區域進行排序。
Private Sub Worksheet_Activate()
Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending
End Sub
Calculate 事件
對於 Worksheet 對象,在對工作表進行重新計算之後産生此事件
每當工作表重新計算時,本示例就調整 A 列到 F 列的寬度。
Private Sub Worksheet_Calculate()
Columns("A:F").AutoFit
End Sub
本示例向活動工作簿添加新工作表,並設置該工作表的名稱。
Set newSheet = Worksheets.Add
newSheet.Name = "current Budget"
本示例關閉工作簿 Book1.xls,但不提示用戶保存所作更改。Book1.xls 中的所有
更改都不會保存。
Application.DisplayAlerts = False
Workbooks("BOOK1.XLS").Close
Application.DisplayAlerts = True
示例顯示每一個可用加載宏的路徑及檔案名。
For Each a In AddIns
MsgBox a.FullName
Next a
ChDir 語句
改變當前的目錄或文件夾。
ChDir path
在 Power Macintosh 中,默認驅動器總是改爲在 path 語句中指定的驅動器。完整
路徑指定由卷標名開始,相對路徑由冒號 (:) 開始. ChDir 可以辨認路徑中指定的
別名:
ChDir "MacDrive:Tmp" ' 在 Macintosh 中
本示例顯示當前路徑分隔符號。
MsgBox "The path separator character is " & _
Application.PathSeparator
Move 方法
將一個指定的檔或檔夾從一個地方移動到另一個地方。
語法
object.Move destination
Move 方法語法有如下幾部分:
部分 描述
object 必需的。始終是一個 File 或 Folder 對象的名字。
destination 必需的。文件或文件夾要移動到的目標。不允許有萬用字元。
CreateFolder 方法
創建一個文件夾。
語法
object.CreateFolder(foldername)
reateFolder 方法有如下幾部分:
部分 描述
object 必需的。始終是一個 FileSystemObject 的名字。
foldername 必需的。字串表達式,它標識創建的文件夾。
本示例使用 MkDir 語句來創建目錄或檔夾。如果沒有指定驅動器,新目錄或檔
夾將會建在當前驅動器中。
MkDir "MYDIR" ' 建立新的目錄或檔夾。
Name 語句示例
本示例使用 Name 語句來更改檔的名稱。示例中假設所有使用到的目錄或檔夾都
已存在。 在 Macintosh 中,默認驅動器名稱是 “HD” 並且路徑部分由冒號取代
反斜線隔開。
Dim OldName, NewName
OldName = "OLDFILE": NewName = "NEWFILE" ' 定義檔案名。
Name OldName As NewName ' 更改檔案名。
OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"
Name OldName As NewName ' 更改檔案名,並移動檔。
本示例設置替換啓動文件夾。
Application.AltStartupPath = "C:\EXCEL\MACROS"
FolderExists 方法
如果指定的檔夾存在返回 True,不存在返回 False。
語法
object.FolderExists(folderspec)
本示例在單元格中啓用編輯。
Application.EditDirectlyInCell = True
程式說明:
幾種用VBA在單元格輸入數據的方法:
Public Sub Writes()
1-- 2 方法,最簡單在 "[ ]" 中輸入單元格名稱。
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是單元格行數,Column是單元格欄數。
5 Cells(1, 4) = 400 '在 D1 單元格輸入400。
6 Range(Cells(1, 5), Cells(5, 5)) = 50 '在 E1:E 5單元格輸入50。
End Sub
VBALesson3 程式說明:
如何利用 Worksheet_SelectionChange 輸入數據的方法。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target = 100
End Sub
VBALesson4 程式說明:
如何利用 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
VBALesson5 程式說明:
比較 Worksheet_SelectionChange() 與用按鈕 CommandButton1_Click() 來執行
程式二者的方法與寫法有何不同。
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
二者執行方法最大的地方,在於 Worksheet_SelectionChange() 是自動的,你不用
瞭解他是怎麽完成工作的。
按鈕 CommandButton1_Click() 是人工的,比 SelectionChange()多一道手續,
就是要去按那接鈕,程式才會執行。
SelectionChange() 有一個參數 Target 可用;CommandButton1_Click ()沒有。
所以我們要用 ActiveCell 內定函數來取代Target,ActiveCell 與 Target最大的
不同點他只能指定一個單元格。
就是你選取多個單元格也只有最上面的單元格會加上數據;用 Selection 取代
ActiveCell, 用法就跟 Target 一樣了。
VBALesson 6 程式說明:
完整的 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
這是個完整的 If 邏輯判斷式,意思是說,假如 If 後的判斷式條件成立的話,就
執行第二條程式,否則假如 ElseIf 後的判斷式條件成立的話,就執行第四條程式
,否則假如另一個 ElseIf 後的判斷式條件成立的話,就執行第六條程式。
Else 的意思是說,假如以上條件都不成立的話,就執行第八條程式。
他的執行方式是假如 IF 的條件成立的話,就不執行其它ElseIf 及Else 的邏輯判
斷式,假如 If 後的條件不成立的話才會執行 ElseIf 或 Else 邏輯判斷式。第二
個 ElseIf後的條件因爲與 IF 後的條件一樣,所以這個判斷式後面的 Target=400
將是永遠無法執行到的程式。
VBALesson 7 程式說明∶我們爲什麽要用變數。
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
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
前幾個教程都是用Worksheet_SelectionChange 事件來舉例子,大家應該能體會他
是怎厶一回事了吧。
這個教程就是要讓你來體會什厶是Worksheet_Chang()事件。因爲這二個事件在VBA
都是非常有用的,所以一定要瞭解。
簡單的說,前者是你鼠標移動到那個單元格,就觸發那個事件的執行。後者是要等到
你點選的單元格,數?有了改變才會觸發事件的執行。二者執行的時機一前一後。
Target "" 是代表限定當前的單元格要是有數?的,才會執行以下三行的程式。
Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2,是你在 B 欄輸入數?時,C
欄將可得到 B 欄二倍的數?。
Target = "" 是限定當前的單元格要是沒有數?的,才會執行以下一行的程式。
Cells(iRow, iCol + 1) = "",是把 C 欄的數?清成空格。
Application.EnableEvents = False與Application.EnableEvents = True,這是
個成雙的程式,當你用了前者記得在執行其他程式後要寫上後面的程式。它的目的在
抑制事件連鎖執行。簡單的說就是,在 B 欄位所觸發的事件,不願在其它單元格再
觸發另一個Worksheet_Change()事件。
相關閱讀...
Excel VBA 使用函數範例參考之一
Excel VBA 使用函數範例參考之三
Excel VBA 使用函數範例參考之四
Excel VBA 使用函數範例參考之五
Excel VBA 使用函數範例參考之六
沒有留言:
張貼留言