資料來源: Excel VBA 調用集合









定制模塊行為
(1) Option Explicit '強制對模塊內所有變量進行聲明
    Option Private Module '標記模塊為私有,僅對同一工程中
其它模塊有用,在宏對話框中不顯示
    Option Compare Text '字符串不區分大小寫
    Option Base 1 '指定數組的第一個下標為1
(2) On Error Resume Next '忽略錯誤繼續執行VBA代碼,避免出現錯誤消息
(3) On Error GoTo ErrorHandler '當錯誤發生時跳轉到過程中的某個位置
(4) On Error GoTo 0 '恢復正常的錯誤提示
(5) Application.DisplayAlerts=False '在程序執行過程中使出現的警告框不顯示
(6) Application.ScreenUpdating=False '關閉屏幕刷新
     Application.ScreenUpdating=True '打開屏幕刷新
(7) Application.Enable.CancelKey=xlDisabled '禁用Ctrl+Break中止宏運行的功能


工作簿
(8) Workbooks.Add() '創建一個新的工作簿
(9) Workbooks(「book1.xls」).Activate '激活名為book1的工作簿
(10) ThisWorkbook.Save '保存工作簿
(11) ThisWorkbook.close '關閉當前工作簿
(12) ActiveWorkbook.Sheets._count '獲取活動工作薄中工作表數
(13) ActiveWorkbook.name '返回活動工作薄的名稱
(14) ThisWorkbook.Name 『返回當前工作簿名稱
       ThisWorkbook.FullName 『返回當前工作簿路徑和名稱
(15) ActiveWindow.EnableResize=False 『禁止調整活動工作簿的大小
(16) Application.Window.Arrange xlArrangeStyleTiled 『將工作簿以平鋪方式排列
(17) ActiveWorkbook.WindowState=xlMaximized 『將當前工作簿最大化


工作表
(18) ActiveSheet.UsedRange.Rows._count 『當前工作表中已使用的行數
(19) Rows._count 『獲取工作表的行數(註:考慮向前兼容性)
(20) Sheets(Sheet1).Name= 「Sum」 '將Sheet1命名為Sum
(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一個新工作表在第一工作表前
(22) ActiveSheet.Move After:=ActiveWorkbook. _
      Sheets(ActiveWorkbook.Sheets.Count) '將當前工作表移至工作表的最後
(23) Worksheets(Array(「sheet1」,」sheet2」))._select '同時選擇工作表1和工作表2
(24) Sheets(「sheet1」).Delete或 Sheets(1)._delete '刪除工作表1
(25) ActiveWorkbook.Sheets(i).Name '獲取工作表i的名稱
(26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines '切換工作表中的網格線顯示,這種方法也可以用在其它方面進行相互切換,即相當於開關按鈕
(27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings 『切換工作表中的行列邊框顯示
(28) ActiveSheet.UsedRange.FormatConditions._delete 『刪除當前工作表中所有的條件格式
(29) Cells.Hyperlinks._delete 『取消當前工作表所有超鏈接
(30) ActiveSheet.PageSetup.Orientation=xlLandscape
或ActiveSheet.PageSetup.Orientation=2 '將頁面設置更改為橫向
(31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName 『在頁面設置的表尾中輸入文件路徑
ActiveSheet.PageSetup.LeftFooter=Application.UserName 『將用戶名放置在活動工作表的頁腳

單元格/單元格區域
(32) ActiveCell.CurrentRegion._select
或Range(ActiveCell.End(xlUp),ActiveCell.End(xlDown))._select
'選擇當前活動單元格所包含的範圍,上下左右無空行
(33) Cells._select 『選定當前工作表的所有單元格
(34) Range(「A1」).ClearContents '清除活動工作表上單元格A1中的內容
Selection.ClearContents '清除選定區域內容
Range(「A1:D4」).Clear '徹底清除A1至D4單元格區域的內容,包括格式
(35) Cells.Clear '清除工作表中所有單元格的內容
(36) ActiveCell.Offset(1,0)._select '活動單元格下移一行,同理,可下移一列
(37) Range(「A1」).Offset(ColumnOffset:=1)或Range(「A1」).Offset(,1) 『偏移一列
Range(「A1」).Offset(Rowoffset:=-1)或Range(「A1」).Offset(-1) 『向上偏移一行
(38) Range(「A1」).Copy Range(「B1」) '複製單元格A1,粘貼到單元格B1中
Range(「A1:D8」).Copy Range(「F1」) '將單元格區域複製到單元格F1開始的區域中
Range(「A1:D8」).Cut Range(「F1」) '剪切單元格區域A1至D8,複製到單元格F1開始的區域中
Range(「A1」).CurrentRegion.Copy Sheets(「Sheet2」).Range(「A1」) '複製包含A1的單元格區域到工作表2中以A1起始的單元格區域中
註:CurrentRegion屬性等價於定位命令,由一個矩形單元格塊組成,周圍是一個或多個空行或列
(39) ActiveWindow.RangeSelection.Value=XX '將值XX輸入到所選單元格區域中
(40) ActiveWindow.RangeSelection._count '活動窗口中選擇的單元格數
(41) Selection._count '當前選中區域的單元格數
(42) GetAddress=Replace(Hyperlinkcell.Hyperlinks(1).Address,mailto:,」」) 『返回單元格中超級鏈接的地址並賦值
(43) TextColor=Range(「A1」).Font.ColorIndex 『檢查單元格A1的文本顏色並返回顏色索引
Range(「A1」).Interior.ColorIndex 『獲取單元格A1背景色
(44) cells._count 『返回當前工作表的單元格數
(45) Selection.Range(「E4」)._select 『激活當前活動單元格下方3行,向右4列的單元格
(46) Cells.Item(5,」C」) 『引單元格C5
Cells.Item(5,3) 『引單元格C5
(47) Range(「A1」).Offset(RowOffset:=4,ColumnOffset:=5)
或 Range(「A1」).Offset(4,5) 『指定單元格F5
(48) Range(「B3」).Resize(RowSize:=11,ColumnSize:=3)
Rnage(「B3」).Resize(11,3) 『創建B3:D13區域
(49) Range(「Data」).Resize(,2) 『將Data區域擴充2列
(50) Union(Range(「Data1」),Range(「Data2」)) 『將Data1和Data2區域連接
(51) Intersect(Range(「Data1」),Range(「Data2」)) 『返回Data1和Data2區域的交叉區域
(52) Range(「Data」)._count 『單元格區域Data中的單元格數
Range(「Data」). Columns._count 『單元格區域Data中的列數
Range(「Data」). Rows._count 『單元格區域Data中的行數
(53) Selection.Columns._count 『當前選中的單元格區域中的列數
Selection.Rows._count 『當前選中的單元格區域中的行數
(54) Selection.Areas._count 『選中的單元格區域所包含的區域數
(55) ActiveSheet.UsedRange.Row 『獲取單元格區域中使用的第一行的行號
(56) Rng.Column 『獲取單元格區域Rng左上角單元格所在列編號
(57) ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions) 『在活動工作表中返回所有符合條件格式設置的區域
(58) Range(「A1」).AutoFilter Field:=3,VisibleDropDown:=False 『關閉由於執行自動篩選命令產生的第3個字段的下拉列表



名稱
(59) Range(「A1:C3」).Name=「computer」 『命名A1:C3區域為computer
或Range(「D1:E6」).Name=「Sheet1!book」 『命名局部變量,即Sheet1上區域D1:E6為book
或 Names(「computer」).Name=「robot」 『將區域computer重命名為robot
(60) Names(「book」)._delete 『刪除名稱
(61) Names.Add Name:=「ContentList」,_
RefersTo:=「=OFFSET(Sheet1!A2,0,0,COUNTA(Sheet2!$A:$A))」 『動態命名列
(62) Names.Add Name:=「Company」,RefersTo:=「CompanyCar」 『命名字符串CompanyCar
(63) Names.Add Name:=「Total」,RefersTo:=123456 『將數字123456命名為Total。注意數字不能加引號,否則就是命名字符串了。
(64) Names.Add Name:=「MyArray」,RefersTo:=ArrayNum 『將數組ArrayNum命名為MyArray。
(65) Names.Add Name:=「ProduceNum」,RefersTo:=「=$B$1」,Visible:=False 『將名稱隱藏
(66) ActiveWorkbook.Names(「Com」).Name 『返回名稱字符串

公式與函數
(67) Application.WorksheetFunction.IsNumber(「A1」) '使用工作表函數檢查A1單元格中的數據是否為數字
(68) Range(「A:A」).Find(Application.WorksheetFunction.Max(Range(「A:A」))).Activate
'激活單元格區域A列中最大值的單元格
(69) Cells(8,8).FormulaArray=「=SUM(R2C[-1]:R[-1]C[-1]*R2C:R[-1]C)」 『在單元格中輸入數組公式。注意必須使用R1C1樣式的表達式


圖表
(70) ActiveSheet.ChartObjects._count '獲取當前工作表中圖表的個數
(71) ActiveSheet.ChartObjects(「Chart1」)._select 『選中當前工作表中圖表Chart1
(72) ActiveSheet.ChartObjects(「Chart1」).Activate
ActiveChart.ChartArea._select 『選中當前圖表區域
(73) WorkSheets(「Sheet1」).ChartObjects(「Chart2」).Chart. _
ChartArea.Interior.ColorIndex=2 『更改工作表中圖表的圖表區的顏色
(74) Sheets(「Chart2」).ChartArea.Interior.ColorIndex=2 『更改圖表工作表中圖表區的顏色
(75)_ charts.Add 『添加新的圖表工作表
(76) ActiveChart.SetSourceData Source:=Sheets(「Sheet1」).Range(「A1:D5」), _
PlotBy:=xlColumns 『指定圖表數據源並按列排列
(77) ActiveChart.Location Where:=xlLocationAsNewSheet 『新圖表作為新圖表工作表
(78) ActiveChart.PlotArea.Interior.ColorIndex=xlNone 『將繪圖區顏色變為白色
(79) WorkSheets(「Sheet1」).ChartObjects(1).Chart. _
Export FileName:=「C:MyChart.gif」,FilterName:=「GIF」 『將圖表1導出到C盤上並命名為MyChart.gif


窗體
(80) MsgBox 「Hello!」 '消息框中顯示消息Hello
(81) Ans=MsgBox(「Continue?」,vbYesNo) '在消息框中點擊「是」按鈕,則Ans值為vbYes;點擊「否」按鈕,則Ans值為vbNo。
If MsgBox(「Continue?」,vbYesNo)<>vbYes Then Exit Sub '返回值不為「是」,則退出
(82) Config=vbYesNo+vbQuestion+vbDefaultButton2 '使用常量的組合,賦值組Config變量,並設置第二個按鈕為缺省按鈕
(83) MsgBox 「This is the first line.」 & vbNewLine & 「Second line.」 '在消息框中強制換行,可用vbCrLf代替vbNewLine。
(84) MsgBox "the average is :"&Format(Application.WorksheetFunction.Average(Selection),"#,##0.00"),vbInformation, "selection _count average" &_ chr(13) '應用工作表函數返回所選區域的平均值並按指定格式顯示
(85) Userform1.Show 『顯示用戶窗體
(86) Load Userform1 『加載一個用戶窗體,但該窗體處於隱藏狀態
(87) Userform1.Hide 『隱藏用戶窗體
(88) Unload Userform1 或 Unload Me 『卸載用戶窗體
(89) (圖像控件).Picture=LoadPicture(「圖像路徑」) 『在用戶窗體中顯示圖形
(90) UserForm1.Show 0 或 UserForm1.Show vbModeless 『將窗體設置為無模式狀態
(91) Me.Height=Int(0.88*ActiveWindow.Height) 『窗體高度為當前活動窗口高度的0.88
Me.Width=Int(0.88*ActiveWindow.Width) 『窗體寬度為當前活動窗口高度的0.88


事件
(92) Application.EnableEvents=False '禁用所有事件
    Application.EnableEvents=True '啟用所有事件
註:不適用於用戶窗體控件觸發的事件對像
(93) Set ExcelSheet = CreateObject("Excel.Sheet") 『創建一個Excel工作表對像
ExcelSheet.Application.Visible = True '設置 Application 對像使 Excel 可見
ExcelSheet.Application.Cells(1, 1).Value = "Data" '在表格的第一個單元中輸入文本
ExcelSheet.SaveAs "C:\TEST.XLS" '將該表格保存到C:\test.xls 目錄
ExcelSheet.Application.Quit '關閉 Excel
Set ExcelSheet = Nothing '釋放該對像變量
(94) 『聲明並創建一個Excel對像引用
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
(95) 『創建並傳遞一個 Excel.Application 對象的引用
Call MySub (CreateObject("Excel.Application"))
(96) Set d = CreateObject(Scripting.Dictionary) 『創建一個 Dictionary 對像變量
(97) d.Add "a", "Athens" '為對像變量添加關鍵字和條目


其他
(98) Application.OnKey 「^I」,」macro」 '設置Ctrl+I鍵為macro過程的快捷鍵
(99) Application.CutCopyMode=False 『退出剪切/複製模式
(100) Application.Volatile True '無論何時工作表中任意單元格重新計算,都會強制計算該函數
Application.Volatile False '只有在該函數的一個或多個參數發生改變時,才會重新計算該函數

定制模塊行為
(101) Err.Clear 『清除程序運行過程中所有的錯誤
*******************************************************
工作簿
(102) ThisWorkbook.BuiltinDocumentProperties(「Last Save Time」)
或Application.Caller.Parent.Parent.BuiltinDocumentProperties(「Last Save Time」) 『返回上次保存工作簿的日期和時間
(103) ThisWorkbook.BuiltinDocumentProperties("Last Print Date")
或Application.Caller.Parent.Parent.BuiltinDocumentProperties(「Last Print Date」) 『返回上次打印或預覽工作簿的日期和時間
(104) Workbooks.Close 『關閉所有打開的工作簿
(105) ActiveWorkbook.LinkSources(xlExcelLinks)(1) 『返回當前工作簿中的第一條鏈接
(106) ActiveWorkbook.CodeName
ThisWorkbook.CodeName 『返回工作簿代碼的名稱
(107) ActiveWorkbook.FileFormat
ThisWorkbook.FileFormat 『返回當前工作簿文件格式代碼
(108) ThisWorkbook.Path
ActiveWorkbook.Path 『返回當前工作簿的路徑(注:若工作簿未保存,則為空)
(109) ThisWorkbook.ReadOnly
ActiveWorkbook.ReadOnly 『返回當前工作簿的讀/寫值(為False)
(110) ThisWorkbook.Saved
ActiveWorkbook.Saved 『返回工作簿的存儲值(若已保存則為False)
(111) Application.Visible = False 『隱藏工作簿
Application.Visible = True 『顯示工作簿
注:可與用戶窗體配合使用,即在打開工作簿時將工作簿隱藏,只顯示用戶窗體.可設置控制按鈕控制工作簿可見
*******************************************************

工作表
(112) ActiveSheet.Columns("B")._insert 『在A列右側插入列,即插入B列
ActiveSheet.Columns("E").Cut
ActiveSheet.Columns("B")._insert 『以上兩句將E列數據移至B列,原B列及以後的數據相應後移
ActiveSheet.Columns("B").Cut
ActiveSheet.Columns("E")._insert 『以上兩句將B列數據移至D列,原C列和D列數據相應左移一列
(113) ActiveSheet.Calculate 『計算當前工作表
(114) ThisWorkbook.Worksheets(「sheet1」).Visible=xlSheetHidden 『正常隱藏工作表,同在Excel菜單中選擇「格式——工作表——隱藏」操作一樣
ThisWorkbook.Worksheets(「sheet1」).Visible=xlSheetVeryHidden 『隱藏工作表,不能通過在Excel菜單中選擇「格式——工作表——取消隱藏」來重新顯示工作表
ThisWorkbook.Worksheets(「sheet1」).Visible=xlSheetVisible 『顯示被隱藏的工作表
(115) ThisWorkbook.Sheets(1).ProtectContents 『檢查工作表是否受到保護
(116) ThisWorkbook.Worksheets.Add Count:=2, _
Before:=ThisWorkbook.Worksheets(2)
或 ThisWorkbook.Workshees.Add ThisWorkbook.Worksheets(2), , 2 『在第二個工作表之前添加兩個新的工作表
(117) ThisWorkbook.Worksheets(3).Copy 『複製一個工作表到新的工作簿
(118) ThisWorkbook.Worksheets(3).Copy ThisWorkbook.Worksheets(2) 『複製第三個工作表到第二個工作表之前
(119) ThisWorkbook.ActiveSheet.Columns.ColumnWidth = 20 『改變工作表的列寬為20
ThisWorkbook.ActiveSheet.Columns.ColumnWidth = _
ThisWorkbook.ActiveSheet.StandardWidth 『將工作表的列寬恢復為標準值
ThisWorkbook.ActiveSheet.Columns(1).ColumnWidth = 20 『改變工作表列1的寬度為20
(120) ThisWorkbook.ActiveSheet.Rows.RowHeight = 10 『改變工作表的行高為10
ThisWorkbook.ActiveSheet.Rows.RowHeight = _
ThisWorkbook.ActiveSheet.StandardHeight 『將工作表的行高恢復為標準值
ThisWorkbook.ActiveSheet.Rows(1).RowHeight = 10 『改變工作表的行1的高度值設置為10
(121) ThisWorkbook.Worksheets(1).Activate 『當前工作簿中的第一個工作表被激活
(122) ThisWorkbook.Worksheets("Sheet1").Rows(1).Font.Bold = True 『設置工作表Sheet1中的行1數據為粗體
(123) ThisWorkbook.Worksheets("Sheet1").Rows(1).Hidden = True 『將工作表Sheet1中的行1隱藏
ActiveCell.EntireRow.Hidden = True 『將當前工作表中活動單元格所在的行隱藏
註:同樣可用於列。
(124) ActiveSheet.Range(「A:A」).EntireColumn.AutoFit 『自動調整當前工作表A列列寬
(125) ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues) 『選中當前工作表中常量和文本單元格
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors+xlTextValues) 『選中當前工作表中常量和文本及錯誤值單元格
*******************************************************

公式與函數
(126) Application.MacroOptions Macro:=」SumPro」,Category:=4 『將自定義的SumPro函數指定給Excel中的「統計函數」類別
(127) Application.MacroOptions Macro:=」SumPro」, _
Description:=」First Sum,then Product」 『為自定義函數SumPro進行了功能說明
(128) Application.WorksheetFunction.CountA(Range(「A:A」))+1 『獲取A列的下一個空單元格
(129) WorksheetFunction.CountA(Cell.EntireColumn) 『返回該單元格所在列非空單元格的數量
WorksheetFunction.CountA(Cell.EntireRow) 『返回該單元格所在行非空單元格的數量
(130) WorksheetFunction.CountA(Cells) 『返回工作表中非空單元格數量
(131) ActiveSheet.Range(「A20:D20」).Formula=「=Sum(R[-19]C:R[-1]C」』對A列至D列前19個數值求和
*******************************************************
圖表
(132) ActiveWindow.Visible=False
或 ActiveChart.De_select 『使圖表處於非活動狀態
(133) TypeName(Selection)=」Chart」 『若選中的為圖表,則該語句為真,否則為假
(134) ActiveSheet.ChartObjects._delete 『刪除工作表上所有的ChartObject對像
ActiveWorkbook.Charts._delete 『刪除當前工作簿中所有的圖表工作表
*******************************************************
窗體和控件
(135) UserForms.Add(MyForm).Show 『添加用戶窗體MyForm並顯示
(136)TextName.SetFocus 『設置文本框獲取輸入焦點
(137) SpinButton1.Value=0 『將數值調節鈕控件的值改為0
(138) TextBox1.Text=SpinButton1.Value 『將數值調節鈕控件的值賦值給文本框控件
SpinButton1.Value=Val(TextBox1.Text) 『將文本框控件值賦給數值調節鈕控件
CStr(SpinButton1.Value)=TextBox1.Text 『數值調節鈕控件和文本框控件相比較
(139) UserForm1.Controls._count 『顯示窗體UserForm1上的控件數目
(140) ListBox1.AddItem 「Command1」 『在列表框中添加Command1
(141) ListBox1.ListIndex 『返回列表框中條目的值,若為-1,則表明未選中任何列表框中的條目
(142) RefEdit1.Text 『返回代表單元格區域地址的文本字符串
RefEdit1.Text=ActiveWindow.RangeSelection.Address 『初始化RefEdit控件顯示當前所選單元格區域
Set FirstCell=Range(RefEdit1.Text).Range(「A1」) 『設置某單元格區域左上角單元格
(143) Application.OnTime Now + TimeValue("00:00:15"), "myProcedure" 『等待15秒後運行myProcedure過程
(144) ActiveWindow.ScrollColumn=ScrollBarColumns.Value 『將滾動條控件的值賦值給ActiveWindow對象的ScrollColumn屬性
ActiveWindow.ScrollRow=ScrollBarRows.Value 『將滾動條控件的值賦值給ActiveWindow對象的ScrollRow屬性
(145) UserForm1.ListBox1.AddItem Sheets(「Sheet1」).Cells(1,1) 『將單元格A1中的數據添加到列表框中
ListBox1.List=Product 『將一個名為Product數組的值添加到ListBox1中
ListBox1.RowSource=」Sheet2!SumP」 『使用工作表Sheet2中的SumP區域的值填充列表框
(146) ListBox1.Selected(0) 『選中列表框中的第一個條目(註:當列表框允許一次選中多個條目時,必須使用Selected屬性)
(147) ListBox1.RemoveItem ListBox1.ListIndex 『移除列表框中選中的條目


CreateObject("  ")  調用對像列表,應該有很多
1,firstjvm:Simple




Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)Dim simple As ObjectSet simple = GetObject("firstjvm:Simple")Taget = simple ' Uses 'toString()" on Simple' If the Java Simple class had a property xyz:' Target = simple.xyzEnd Sub

2,vbScript.RegExp
    Function ReplaceStr(sourStr, patrn, replStr)

Dim regEx As Object ' 建立變量


Set regEx = CreateObject("vbScript.RegExp") ' 建立正則表達式


regEx.Pattern = patrn ' 要找的字符串


regEx.Global = True '全程查找(若非全程查找則只進行一次匹配)


regEx.IgnoreCase = True ' 設置是否區分大小寫


ReplaceStr = regEx.Replace(sourStr, replStr) ' 替換 End Function


' 替換的示例代碼


Sub Example()


Dim sourceText As String '刪除重複的字(連續出現)


sourceText = "我我們學習,他們們工作"


MsgBox ReplaceStr(sourceText, "(.)\1", "$1"), Title:=sourceText '刪除2個字以上的重複詞 sourceText = "文壇文壇新人認真認真學習,勤勤懇懇勤勤懇懇努力工作"


MsgBox ReplaceStr(sourceText, "(.{2,})\1", "$1"), Title:=sourceText


End Sub



3,msscriptcontrol.scriptcontrol


Set x = CreateObject("msscriptcontrol.scriptcontrol")


x.Language = "javascript"


arr = Array("aa", "cc", "bb", "1a")


kk = Join(arr, ",")


x.addcode "function aa(bb){x=bb.split(',');x.sort();return x;}"


cc = x.eval("aa('" & kk & "')")


MsgBox cc



4,adodb.connection
Set cnn = CreateObject("adodb.connection") '創建並返回一個對 ActiveX 對象的引用,創建ado鏈接.
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName  '打開當前工作簿鏈接
    [a2:d65536].ClearContents  '清除a2:d65536內容
    sql = "SELECT * FROM [庫$] WHERE 日期 LIKE " & "'" & ri & "%'"  'sql語句,從"庫"工作表中模糊查找含年月的(半匹配,用%和~,DAO中用*和?)的所有記錄
    [a2].CopyFromRecordset cnn.Execute(sql)  '將符合sql的所有記錄複製到當前打開的工作表
    cnn.Close '關閉鏈接
    Set cnn = Nothing  '然後釋放該引用,退出內存

5,ADODB.Recordset
Public Function MysqlConnection()
MysqlConnection ="Provider=SQLOLEDB.1;Password=密碼;Persist Security Info=True;User ID=sa;Initial Catalog=hrlink ;Data Source=IP地址"
End Function

Private Sub CommandButton2_Click()
Dim cn As New ADODB.Connection '定義數據鏈接對像 ,保存連接數據庫信息;請先添加ADO引用
Dim rs As New ADODB.Recordset '定義記錄集對象,保存數據表
Dim strCn As String, strSQL As String '字符串變量

strCn = MysqlConnection()
cn.Open strCn


createobject大全
Server.CreateObject("Scripting.FileSystemObject")
Server.CreateObject("Scripting.Dictionary")    HashTable
Server.CreateXObject("Word.Application")     //Server
ActiveXObject("Word.Application")     //Client
Server.CreateObject("Excel.Application")    //Server
ActiveXObject("Excel.Application")     //Client
CreateObject("PowerPoint.Application")
Server.CreateObject("Microsoft.XMLHTTP")
Server.CreateObject("Microsoft.XMLDOM")
Server.CreateObject("MSXML2.XMLHTTP.4.0")
Server.CreateObject("WScript.Shell")
Server.CreateObject("whtm>ref=100.htm>script.network")
Server.CreateObject("MSWC.AdRotator")
CreateObject("Excel.Sheet")
MS FrontPage: oFP = CreateObject("FrontPage.Application")
MS Access: oAccess = CreateObject("Access.Application")
MS Graph: oGraph = CreateObject("MSGraph.Application")
CreateObject("PhotoShop.Application")
CreateObject("SQLDMO.SQLServer")
CreateObject("SQLDMO.Login")
CreateObject("SQLDMO.Backup")
CreateObject("SQLDMO.User")
Server.CreateObject("SQLDMO.BackupDevice")
Server.CreateObject("SQLDMO.Database")
Server.CreateObject("SQLDMO.Restore")
Server.CreateObject("MSMQ.MSMQQueueInfo")
CreateObject("MSMQ.MSMQQuery")
Server.CreateObject("ixsso.Query")
Server.CreateObject("ixsso.Util")
AccPac Advantage Corporate:
oAccPac=CreateObject("ACCPAC.xapiSession")
AccPac Report Master for Windows:
oImpApp=CreateObject("Impromptu.Application.30")
BarTender:
oBarTender = CreateObject("BarTender.Application")
CrystalReports:
oCRApplication = createobject ("CrystalRuntime.Application")
This doesn』t invoke an IDE actually.
EUDORA:
oEud = CreateObject("Eudora.EuApplication.1")
FaxMaker:
oFax = CREATEOBJECT("fmfaxapi.application")
GroupWise:
oGroupWise = CreateObject("NovellGroupWareSession")
LotusNotes:
oNotes = CreateObject("Notes.NotesSession")
oNotes = CreateObject("Notes.NotesUIWorkspace")
oNotes = CreateObject("Lotus.Notessession") (Domino 5.0.3)
MS Common Dialog:
oCommmonDialog = CreateObject("MSComDlg.CommonDialog") && !!! You can』t directly create this object without a development licence, so for dynamically doing it on another machine, see below. -- PeterCrabtree
MS Internet Explorer:
oIE = CreateObject("InternetExplorer.Application")
IEAutomationExample
MS MapPoint:
oMapPoint = CreateObject("MapPoint.Application")
MSN Messenger:
oMessenger = CREATEOBJECT("MSNMessenger.MessengerApp")
MS NetMeeting:
oNetMeeting=CREATEOBJECT("netmeeting.app.1")
MS Outlook:
oOutlook = CreateObject("Outlook.Application")
MS Outlook Express: None - It is not a COM server!
MS PowerPoint:
oPP = CreateObject("PowerPoint.Application")
MS Project:
oProj = CreateObject("msProject.Application")
MS SourceSafe:
oVSS = CreateObject("SourceSafe.0")
MS Word:
oWord = CreateObject("Word.Application")
MS Visio:
oVisio = CreateObject("Visio.Application")

MS VisualCPlusPlus: (VC++)
oCpp = CreateObject("MSDev.Application")
MS VisualFoxpro:
oVFP = CreateObject("VisualFoxPro.Application")
MS WindowsScriptingHost:
oWSH = CreateObject("WScript.Shell")
Novell GroupWise:
oGroupWise = CreateObject("NovellGroupWareSession")
PCAnywhere (host):
oPCAHost = CreateObject("WinAWSvr.BeHostDataManager")
PCAnywhere (remote):
oPCARem = CreateObject("WinAWSvr.RemoteDataManager")
QuickBooks:
QBSessionManager = CreateObject("QBFC2.QBSessionManager")
RationalRose:
oRose = CreateObject("Rose.Application")
TAPIFax:
oTAPIFax = CreateObject(』FaxServer.FaxServer』)
WindowsShell:
oWSH = CreateObject("Shell.Application")
Windows Media Player:
oWMP = CREATEOBJECT("WMPlayer.OCX")
oPlayList = oWmp.PlaylistCollection.GetAll()
oWmp.currentPlaylist = oPlayList.Item(0) && Zero based array
*!* Music starts!
Windows Messenger:
oMessenger = CREATEOBJECT("Messenger.MessengerApp")
WinFax:
oWinFax = CreateObject("WinFax.SDKSend")
WinPrint :
oWinPrint = CreateObject("WinPrint.WinPrintX")
SQL-DMO object:
loSQL = CREATEOBJECT("SQLDMO.Application")
Others:
Scripting Shell:
oShell = CreateObject("WScript.Shell")
Scripting Network Object:
oNet = CreateObject("WScript.Network")
Scripting Regular Expression Parser:
oReg = CreateObject("VBScript.RegExp")
SQL DMO SQL Server:
CreateObject("SQLDMO.SQLServer")




資料來源: EXCEL 巨集與VBA介紹



 





巨集:一連串的執行指令所構成,可以利用Visual Basic程式指令、也可以利用錄製巨集的方式來錄寫指令。



  • 如何錄製巨集:

    1. 如果要執行巨集,則需要更改「EXCEL選項」\「信任中心」\「信任中心設定」\「巨集設定」
    2. 在「檢視」、「巨集」/「錄製巨集」
    3. 設定「巨集名稱」、快速鍵(Ctrl+英文鍵),將巨集儲存位置
    4. 開始錄製相關動作(錄製是以絕對位址方式來錄製,如果要以相對位址來錄製則要選「以相對位置錄製」)
    5. 停止錄製
    6. 查看巨集程式碼,並作必要的修正
    7. 執行巨集(可以利用「執行巨集」或快速鍵、或利用表單按鈕來執行)
      如果要編修表單時,可以按下Ctrl+該物件,進行修改。






  • 範例:下載(錄製巨集)

    1. C6至C12的數值格式設定「"進貨" #,##0;"出貨" #,##0」
    2. 「檢視」、「巨集」、「開始錄製」,並開始執行下列指令
    3. 選取範圍C6至C12,並執行「複製」
    4. 選取範圍B6至B12,並按下「選擇性貼上」,選擇貼上「值」與運算「加」
    5. 選取範圍C6至C12,並按下「Del」,清除儲存格內容
    6. 在儲存格C6按一下
    7. 停止錄製巨集
    8. 在工作表中,產生一個按鈕,並指定該按鈕執行該巨集,並將其按鈕文字改為異動
    9. 每次輸入異動資料(正的表示進貨,負的表示出貨),按下按鈕即可執行巨集






  • VBA簡介:Visual Basic for Applications,利用VB來延申Office的能力。開啟EXCEL 顯示開發人員(在「EXCEL選項」/「常用」中勾選),再撰寫或修改VBA程式。
    VBA主要的組成要件:物件,其中包括

    1. 屬性:對物件狀態的描述,可以定義物件的特性(大小、顏色、狀態等)。
    2. 方法:物件的某些特定動作,可以指定動作的細別內容。其主要結構如下:
      物件.方法 指定引數1:=xl常數1, 指定引數2:=xl常數2,....

        指定引數設定為某些內建常數,每個內建常數前會有關鍵字連接。

      • EXCEL物件的常數會以xl開始。
      • VB的陳述式及函數的常數會以vb開始。
      • Office物件模式的常數會以mso開始。

    3. 事件:物件的觸發反應。






  • EXCEL常用的物件

    1. Workbook 活頁簿
    2. Workbooks 活頁簿集合
    3. Workbooks("filename") 檔名為filename的活頁簿
    4. ActiveWorkbook 正在作用中的活頁簿
    5. Sheets 活頁簿中所有工作表
    6. Sheets(n) 活頁簿中第n張工作表
    7. Worksheet 工作表
    8. Worksheets 所有工作表(包括圖表)
    9. Worksheets("sheet") 指表名為sheet工作表
    10. ActiveSheet 正在作用中的工作表
    11. Columns("c1:c2") c1至c2欄(其中c1,c2為A~Z或AA~XFD等欄名)
    12. Rows("r1:r2") r1至r2列(其中r1,r2為1~1048576等列名
    13. Range("x1:x2") x1至x2間的儲存格(其中x1,x2為儲存格位址名稱)
    14. cells(i,j) 儲存格(第i列、第j行)
    15. ActiveCell 目前的儲存格
    16. Selection 目前所選取的物件
    範例:

    • Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold = True
    • Worksheets("Sheet1").Cells.ClearContents
    • Worksheets("Sheet1").Rows(1).Font.Bold = True
    • Range("1:1,3:3,8:8")
    • Worksheets("Sheet1").Cells(6, 1).Value = 10
    • Worksheets("Sheet1").[A1:B5].ClearContents
    • ActiveCell.Offset(1, 3).Font.Underline = xlDouble






  • 活頁簿常用屬性:

    • ActiveWorkBook.Name 目前活頁簿的名稱
    • ActiveWorkBook.Save 儲存目前的活頁簿
    • ActiveWorkBook.SaveAs Filename := "filename" 另儲新檔
    • WorkBooks.Add 新增活頁簿
    • WorkBooks(i).Close [SaveChange, Filename, RouteWorkbook] 關閉指定的第i個活頁簿

      • SaveChange := True 改變儲存
      • SaveChange := False 不會改變儲存
      • SaveChange省略時,會出現對話方塊
      • filename := "檔名"

    • WorkBooks.Open "filename" 開啟一個活頁簿
    • Application.Windows 所有活頁簿視窗
    • WorkBooks.Count 活頁簿的數量
    • WorkBooks.Item(Index) 傳回單一活頁簿,由索引值指定






  • 工作表常用屬性:

    • Worksheets.Add [Before, After, Count, Type] 新增工作表

      • Before := Worksheets(n) 出現於某工作表之前
      • After := Worksheets(n) 出現於某工作表之後
      • Count := n 新增工作表數量
      • Type := xlWorksheet (工作表) 或 xlChart (圖表)

    • WorkSheets.Name 工作表名稱
    • WorkSheets("Sheet1").Activate 設定工作表為目前作用的功作表






  • 儲存格常用屬性:

    • Rows.RowHeight 指定範圍內的所有列高
    • Columns.ColumnsWidth:指定範圍內的所欄寬
    • expression.NumberFormatLocal 以本地的數字格式
    • Range.CurrentRegion 目前區域是指以任意空白列及空白欄的組合為邊界的範圍
      範例:
      Worksheets("Sheet1").Activate
      ActiveCell.CurrentRegion.Select

    • expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo) 以參照的方式

      • RowAbsolute 為True,則用列的絕對位址
      • ColumnAbsolute 為True,則用欄的絕對位址
      • ReferenceStyle 預設值為xlA1,如為xlR1C1則為R1C1的表達方式

    • expression.count 傳回範圍的數量(可以是欄數、列數或儲存格數量)
    • expression.Item(RowIndex, ColumnIndex) 代表相對於指定之範圍某個位移距離的範圍。
    • expression.value 傳回或設定物件的值
    • expression.Formula 傳回或設定物件的公式,代表 A1 樣式註解以及巨集語言中的物件公式。
      範例:Worksheets("Sheet1").Range("A1").Formula = "=$A$4+$A$10"
    • expression.FormulaR1C1 傳回或設定物件的公式,並以巨集語言中的 R1C1 樣式標記法表示
      範例:Worksheets("Sheet1").Range("B1").FormulaR1C1 = "=SQRT(R1C1)"
    • expression.Text 傳回或設定物件的文字
      範例:
      Set c = Worksheets("Sheet1").Range("B14")
      c.Value = 1198.3
      c.NumberFormat = "$#,##0_);($#,##0)"
      MsgBox c.Value
      MsgBox c.Text






  • 常用方法:

    • Range.Select方法/Selection屬性 設定目前選取的範圍/使用目前所選取的範圍
      範例:
      Sub Macro1()
      Sheets("Sheet1").Select
      Range("A1").Select
      ActiveCell.FormulaR1C1 = "Name"
      Range("B1").Select
      ActiveCell.FormulaR1C1 = "Address"
      Range("A1:B1").Select
      Selection.Font.Bold = True
      End Sub

    • expression.Copy 將目前所選取的物件復製至剪貼簿
    • expression.Cut 將目前所選取的物件剪下
    • expression.Delete 將目前所選取的物件刪除
    • expression.Paste 將剪貼簿的內容貼上
      範例:
      Sub CopyRow()
      Worksheets("Sheet1").Rows(1).Copy
      Worksheets("Sheet2").Select
      Worksheets("Sheet2").Rows(1).Select
      Worksheets("Sheet2").Paste
      End Sub

    • expression.RasteSpecial(Paste,Operation, SkipBlanks, Transpose)
      範例:
      With Worksheets("Sheet1")
      .Range("C1:C5").Copy
      .Range("D1:D5").PasteSpecial _
      Operation:=xlPasteSpecialOperationAdd
      End With

    • Range.Activate 目前的儲存格
    • Range.Clear 清除資料
    • Range.ClearContents 清除資料內容
    • Range.ClearFormats 清除資料格式
    • Range.ClearComments 清除註解
    • expression.AutoFit:自動調整列高和欄寬
    • Range.FillDown、Range.FillUp、Range.FillLeft、Range.FillRight 填滿
    • Range.Offset (RowOffset, ColumnOffset) 指定區域的位移列與行
      範例:
      Sub MoveActive()
      Worksheets("Sheet1").Activate
      Range("A1:D10").Select
      ActiveCell.Value = "Monthly Totals"
      ActiveCell.Offset(0, 1).Activate
      End Sub






  • 程式語法:



    • Dim 陳述式(變數)
      Dim varname [ As [New] type]
      type 包括 Byte、Boolean、Integer、Long、Single、Double、Date、String、Object等








    • Set 陳述式(物件)
      Set objectvar = {[New] objectexpression | Nothing}
      例:Set RangeA = Range("A1:B2")
      範例:
      Sub Random()
      Dim myRange As Range
      Set myRange = Worksheets("Sheet1").Range("A1:D5")
      myRange.Formula = "=RAND()"
      myRange.Font.Bold = True
      End Sub








    • With 多種屬性設定
      With 物件
      .屬性1 = 設定值
      .屬性2 = 設定值
      .... End With
      範例:
      Sub AddNew()
      Set NewBook = Workbooks.Add
      With NewBook
      .Title = "All Sales"
      .Subject = "Sales"
      .SaveAs Filename:="Allsales.xls"
      End With
      End Sub








    • Array 陣列
      Array(Range1, Range2, ....)
      範例:
      Sub Several()
      Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select
      End Sub








    • InputBox 函數
      InputBox("文字說明",[,title][,default][,xpos][,ypos][,helpfile, context])








    • MsgBox 函數
      MsgBox "文字說明"








    • Union 將多個範圍合併成單一Range物件
      Union(Range1, Range2, ...)
      範例:
      Sub MultipleRange()
      Dim r1, r2, myMultipleRange As Range
      Set r1 = Sheets("Sheet1").Range("A1:B2")
      Set r2 = Sheets("Sheet1").Range("C3:D4")
      Set myMultipleRange = Union(r1, r2)
      myMultipleRange.Font.Bold = True
      End Sub








    • For... Next 陳述式
      For counter = start to end [ step stepvalue]
      [statements]
      [Exit For]
      [statements]
      Next [counter]
      範例:
      Sub CycleThrough()
      Dim Counter As Integer
      For Counter = 1 To 20
      Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
      Next Counter
      End Sub








    • For Each... Next 陳述式
      For Each element In group
      [statements]
      [Exit For]
      [statements]
      Next [element]
      範例:
      Sub ApplyColor()
      Const Limit As Integer = 25
      For Each c In Range("MyRange")
      If c.Value > Limit Then
      c.Interior.ColorIndex = 27
      End If
      Next c
      End Sub








    • Do ... Loop 陳述式
      Do [{While | Until} condition]
      [statements]
      [Exit Do]
      [statements]
      Loop


      Do
      [statements]
      [Exit Do]
      [statements]
      Loop [{While | Until} condition]








    • If ... Then ... Else ... 陳述式
      If condition Then [statements][Else elsestatements]

      If condition Then
      [statements]
      [ElseIf condition-n Then
      [elseifstatements]...
      [Else
      [elsestatements]]
      End If






    • 範例:下載(VBA程式範例)






      Sub pmt_title()

      Dim rate As Single
      Dim nper, i As Integer
      Dim pv, totali, totalp As Double
      Dim start As Date
      Dim color1 As Variant

      start = Range("C2").Value
      pv = Range("C3").Value
      rate = Range("C4").Value
      nper = Range("C6").Value

      '清除所有有明細表
      Range("A11:E65536").Clear

      With Cells(11, 1)
      .Value = 0
      .HorizontalAlignment = xlCenter
      .Interior.Color = RGB(255, 255, 255)
      End With

      With Cells(11, 2)
      .Value = start
      .HorizontalAlignment = xlCenter
      .NumberFormat = "ge年mm月dd日"
      End With

      Cells(11, 5) = pv
      pv1 = pv

      For i = 1 To nper
      If i Mod 2 = 1 Then
      color1 = RGB(255, 255, 150)
      Else
      color1 = RGB(255, 255, 255)
      End If

      With Cells(11 + i, 1)
      .Value = i
      .HorizontalAlignment = xlCenter
      .Interior.Color = color1
      End With

      With Cells(11 + i, 2)
      .Value = DateAdd("m", i, start)
      .HorizontalAlignment = xlCenter
      .Interior.Color = color1
      .NumberFormatLocal = "ge年mm月dd日"
      End With

      With Cells(11 + i, 3)
      .Value = -IPmt(rate / 12, i, nper, pv)
      .Interior.Color = color1
      .NumberFormat = "_-$* #,##0.00_-"
      End With
      totali = totali + Cells(11 + i, 3)

      With Cells(11 + i, 4)
      .Value = -PPmt(rate / 12, i, nper, pv)
      .Interior.Color = color1
      .NumberFormat = "_-$* #,##0.00_-"
      End With
      totalp = totalp + Cells(11 + i, 4)

      With Cells(11 + i, 5)
      .Value = pv - totalp
      .Interior.Color = color1
      .NumberFormat = "_-$* #,##0.00_-"
      End With
      Next

      With Range(Cells(10, 1), Cells(11 + nper, 5)).Borders
      .LineStyle = xlContinuous
      .Weight = xlThin
      .Color = RGB(0, 0, 0)
      End With

      Cells(12 + nper, 1) = "合計"

      With Range(Cells(12 + nper, 1), Cells(12 + nper, 2))
      .MergeCells = True
      .HorizontalAlignment = xlCenter
      .Interior.Color = RGB(255, 200, 255)
      End With

      With Cells(12 + nper, 3)
      .Value = totali
      .Interior.Color = RGB(255, 200, 255)
      .NumberFormat = "_-$* #,##0.00_-"
      End With

      With Cells(12 + nper, 4)
      .Value = totalp
      .Interior.Color = RGB(255, 200, 255)
      .NumberFormat = "_-$* #,##0.00_-"
      End With

      With Range(Cells(12 + nper, 1), Cells(12 + nper, 4)).Borders
      .LineStyle = xlContinuous
      .Weight = xlThin
      .Color = RGB(0, 0, 0)
      End With

      End Sub

      '===================================================================
      Sub clearall()
      Range("A11:E65536").Clear

      End Sub

arrow
arrow
    全站熱搜

    YOUNG21975 發表在 痞客邦 留言(0) 人氣()