2012年8月13日 星期一

Excel VBA 使用函數範例參考之二

在本示例中,如果活動工作簿不能進行寫保護,那麽 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 使用函數範例參考之六

沒有留言:

張貼留言