資料來源: Excel VBA 調用集合
定制模塊行為 工作表 |
名稱
(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:SimplePrivate 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程式指令、也可以利用錄製巨集的方式來錄寫指令。
- 如何錄製巨集:
- 如果要執行巨集,則需要更改「EXCEL選項」\「信任中心」\「信任中心設定」\「巨集設定」
- 在「檢視」、「巨集」/「錄製巨集」
- 設定「巨集名稱」、快速鍵(Ctrl+英文鍵),將巨集儲存位置
- 開始錄製相關動作(錄製是以絕對位址方式來錄製,如果要以相對位址來錄製則要選「以相對位置錄製」)
- 停止錄製
- 查看巨集程式碼,並作必要的修正
- 執行巨集(可以利用「執行巨集」或快速鍵、或利用表單按鈕來執行)
如果要編修表單時,可以按下Ctrl+該物件,進行修改。
- 如果要執行巨集,則需要更改「EXCEL選項」\「信任中心」\「信任中心設定」\「巨集設定」
- 範例:下載(錄製巨集)
- C6至C12的數值格式設定「"進貨" #,##0;"出貨" #,##0」
- 「檢視」、「巨集」、「開始錄製」,並開始執行下列指令
- 選取範圍C6至C12,並執行「複製」
- 選取範圍B6至B12,並按下「選擇性貼上」,選擇貼上「值」與運算「加」
- 選取範圍C6至C12,並按下「Del」,清除儲存格內容
- 在儲存格C6按一下
- 停止錄製巨集
- 在工作表中,產生一個按鈕,並指定該按鈕執行該巨集,並將其按鈕文字改為異動
- 每次輸入異動資料(正的表示進貨,負的表示出貨),按下按鈕即可執行巨集
- C6至C12的數值格式設定「"進貨" #,##0;"出貨" #,##0」
- VBA簡介:Visual Basic for Applications,利用VB來延申Office的能力。開啟EXCEL 顯示開發人員(在「EXCEL選項」/「常用」中勾選),再撰寫或修改VBA程式。
VBA主要的組成要件:物件,其中包括- 屬性:對物件狀態的描述,可以定義物件的特性(大小、顏色、狀態等)。
- 方法:物件的某些特定動作,可以指定動作的細別內容。其主要結構如下:
物件.方法 指定引數1:=xl常數1, 指定引數2:=xl常數2,....- 指定引數設定為某些內建常數,每個內建常數前會有關鍵字連接。
- EXCEL物件的常數會以xl開始。
- VB的陳述式及函數的常數會以vb開始。
- Office物件模式的常數會以mso開始。
- EXCEL物件的常數會以xl開始。
- 事件:物件的觸發反應。
- 屬性:對物件狀態的描述,可以定義物件的特性(大小、顏色、狀態等)。
- EXCEL常用的物件
- Workbook 活頁簿
- Workbooks 活頁簿集合
- Workbooks("filename") 檔名為filename的活頁簿
- ActiveWorkbook 正在作用中的活頁簿
- Sheets 活頁簿中所有工作表
- Sheets(n) 活頁簿中第n張工作表
- Worksheet 工作表
- Worksheets 所有工作表(包括圖表)
- Worksheets("sheet") 指表名為sheet工作表
- ActiveSheet 正在作用中的工作表
- Columns("c1:c2") c1至c2欄(其中c1,c2為A~Z或AA~XFD等欄名)
- Rows("r1:r2") r1至r2列(其中r1,r2為1~1048576等列名
- Range("x1:x2") x1至x2間的儲存格(其中x1,x2為儲存格位址名稱)
- cells(i,j) 儲存格(第i列、第j行)
- ActiveCell 目前的儲存格
- 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
- Workbook 活頁簿
- 活頁簿常用屬性:
- ActiveWorkBook.Name 目前活頁簿的名稱
- ActiveWorkBook.Save 儲存目前的活頁簿
- ActiveWorkBook.SaveAs Filename := "filename" 另儲新檔
- WorkBooks.Add 新增活頁簿
- WorkBooks(i).Close [SaveChange, Filename, RouteWorkbook] 關閉指定的第i個活頁簿
- SaveChange := True 改變儲存
- SaveChange := False 不會改變儲存
- SaveChange省略時,會出現對話方塊
- filename := "檔名"
- SaveChange := True 改變儲存
- WorkBooks.Open "filename" 開啟一個活頁簿
- Application.Windows 所有活頁簿視窗
- WorkBooks.Count 活頁簿的數量
- WorkBooks.Item(Index) 傳回單一活頁簿,由索引值指定
- ActiveWorkBook.Name 目前活頁簿的名稱
- 工作表常用屬性:
- Worksheets.Add [Before, After, Count, Type] 新增工作表
- Before := Worksheets(n) 出現於某工作表之前
- After := Worksheets(n) 出現於某工作表之後
- Count := n 新增工作表數量
- Type := xlWorksheet (工作表) 或 xlChart (圖表)
- Before := Worksheets(n) 出現於某工作表之前
- WorkSheets.Name 工作表名稱
- WorkSheets("Sheet1").Activate 設定工作表為目前作用的功作表
- Worksheets.Add [Before, After, Count, Type] 新增工作表
- 儲存格常用屬性:
- 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的表達方式
- RowAbsolute 為True,則用列的絕對位址
- 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
- Rows.RowHeight 指定範圍內的所有列高
- 常用方法:
- 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
- Range.Select方法/Selection屬性 設定目前選取的範圍/使用目前所選取的範圍
- 程式語法:
- Dim 陳述式(變數)
- Dim varname [ As [New] type]
- type 包括 Byte、Boolean、Integer、Long、Single、Double、Date、String、Object等
- Dim 陳述式(變數)
- 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 - 例:Set RangeA = Range("A1:B2")
- Set 陳述式(物件)
- 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
- With 多種屬性設定
- Array 陣列
- Array(Range1, Range2, ....)
範例:
Sub Several()
Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select
End Sub
- Array 陣列
- InputBox 函數
- InputBox("文字說明",[,title][,default][,xpos][,ypos][,helpfile, context])
- InputBox 函數
- MsgBox 函數
- 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
- Union 將多個範圍合併成單一Range物件
- 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... Next 陳述式
- 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
- For Each... Next 陳述式
- Do ... Loop 陳述式
- Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
或
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
- Do ... Loop 陳述式
- 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- If ... Then ... Else ... 陳述式