VBA常用技巧-excel.doc_第1頁
VBA常用技巧-excel.doc_第2頁
VBA常用技巧-excel.doc_第3頁
VBA常用技巧-excel.doc_第4頁
VBA常用技巧-excel.doc_第5頁
已閱讀5頁,還剩602頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VBA常用技巧目錄VBA常用技巧1第1章Range(單元格)對象10技巧1單元格的引用方法101-1使用Range屬性101-2使用Cells屬性111-3使用快捷記號111-4使用Offset屬性121-5使用Resize屬性131-6使用Union方法141-7使用UsedRange屬性141-8使用CurrentRegion屬性15技巧2選定單元格區(qū)域的方法152-1使用Select方法152-2使用Activate方法162-3使用Goto方法17技巧3獲得指定行、列中的最后一個非空單元格17技巧4定位單元格20技巧5查找單元格215-1使用Find方法215-2使用Like運算符25技巧6替換單元格內字符串26技巧7復制單元格區(qū)域27技巧8僅復制數值到另一區(qū)域308-1使用選擇性粘貼308-2直接賦值的方法31技巧9單元格自動進入編輯狀態(tài)32技巧10禁用單元格拖放功能32技巧11單元格格式操作3311-1單元格字體格式設置3311-2設置單元格內部格式3511-3為單元格區(qū)域添加邊框3611-4靈活設置單元格的行高列寬38技巧12單元格中的數據有效性3912-1在單元格中建立數據有效性3912-2判斷單元格是否存在數據有效性4112-3動態(tài)的數據有效性4112-4自動展開數據有效性下拉列表43技巧13單元格中的公式4413-1在單元格中寫入公式4413-2檢查單元格是否含有公式4513-3判斷單元格公式是否存在錯誤4613-4取得單元格中公式的引用單元格4713-5將單元格中的公式轉換為數值48技巧14單元格中的批注4914-1判斷單元格是否存在批注4914-2為單元格添加批注5014-3刪除單元格中的批注51技巧15合并單元格操作5215-1判斷單元格區(qū)域是否存在合并單元格5215-2合并單元格時連接每個單元格的文本5315-3合并內容相同的連續(xù)單元格5415-4取消合并單元格時在每個單元格中保留內容56技巧16高亮顯示單元格區(qū)域57技巧17雙擊被保護單元格時不顯示提示消息框58技巧18重新計算工作表指定區(qū)域60技巧19錄入數據后單元格自動保護60技巧20工作表事件Target參數的使用方法6220-1使用單元格的Address 屬性6220-2使用Column屬性和Row屬性6320-3使用Intersect方法63第2章Worksheet(工作表)對象65技巧21引用工作表的方式6521-1使用工作表的名稱6521-2使用工作表的索引號6521-3使用工作表的代碼名稱6621-4使用ActiveSheet屬性引用活動工作表66技巧22選擇工作表的方法67技巧23遍歷工作表的方法6823-1使用For.Next 語句6823-2使用For Each.Next 語句70技巧24在工作表中上下翻頁71技巧25工作表的添加與刪除72技巧26禁止刪除指定工作表76技巧27自動建立工作表目錄78技巧28工作表的深度隱藏80技巧29防止更改工作表的名稱82技巧30工作表中一次插入多行83技巧31刪除工作表中的空行84技巧32刪除工作表的重復行86技巧33定位刪除特定內容所在的行88技巧34判斷是否選中整行89技巧35限制工作表的滾動區(qū)域90技巧36復制自動篩選后的數據區(qū)域91技巧37使用高級篩選獲得不重復記錄93技巧38工作表的保護與解除保護94技巧39奇偶頁打印97第3章Wordbook(工作簿)對象99技巧40工作簿的引用方法9940-1使用工作簿的名稱9940-2使用工作簿的索引號9940-3使用ThisWorkbook10040-4使用ActiveWorkbook101技巧41新建工作簿文件101技巧42打開指定的工作簿103技巧43判斷指定工作簿是否打開10643-1遍歷Workbooks集合方法10643-2錯誤處理方法106技巧44禁用宏則關閉工作簿107技巧45關閉工作簿不顯示保存對話框11145-1使用Close方法關閉工作簿11145-2單擊工作簿關閉按鈕關閉工作簿113技巧46禁用工作簿的關閉按鈕113技巧47保存工作簿的方法11547-1使用Save方法11547-2直接保存為另一文件名11547-3保存工作簿副本115技巧48保存指定工作表為工作簿文件116技巧49打印預覽時不觸發(fā)事件118技巧50設置工作簿文檔屬性信息120技巧51不打開工作簿取得其他工作簿數據12151-1使用公式12151-2使用GetObject函數12251-3隱藏Application對象12351-4使用ExecuteExcel4Macro方法12451-5使用SQL連接125技巧52返回窗口的可視區(qū)域地址126第4章Shape(圖形)、Chart(圖表)對象128技巧53在工作表中添加圖形128技巧54導出工作表中的圖片133技巧55在工作表中添加藝術字135技巧56遍歷工作表中的圖形137技巧57移動、旋轉圖片139技巧58工作表中自動插入圖片140技巧59固定工作表中圖形的位置143技巧60使用VBA自動生成圖表145技巧61使用獨立窗口顯示圖表149技巧62導出工作表中的圖表150技巧63多圖表制作151第5章Application對象155技巧64取得Excel版本信息155技巧65取得當前用戶名稱156技巧66Excel中的“定時器”156技巧67設置活動打印機的名稱158技巧68屏蔽、改變組合鍵的功能159技巧69設置Excel窗口標題欄160技巧70自定義Excel狀態(tài)欄161技巧71靈活退出Excel162技巧72隱藏Excel主窗口16372-1設置Application對象的Visible屬性16372-2將窗口移出屏幕16472-3設置工作簿作為加載宏運行165第6章使用對話框167技巧73使用Msgbox函數16773-1顯示簡單的提示信息16773-2定制個性化的消息框16873-3獲得消息框的返回值16973-4在消息框中排版17173-5對齊消息框中顯示的信息172技巧74自動關閉的消息框17474-1使用WshShell.Popup方法顯示消息框17474-2使用API函數顯示消息框175技巧75使用InputBox函數17675-1簡單的數據輸入17675-2使用對話框輸入密碼178技巧76使用InputBox方法18076-1輸入指定類型的數據18076-2獲得單元格區(qū)域地址182技巧77內置對話框18377-1調用內置的對話框18377-2獲取選定文件的文件名18677-3使用“另存為”對話框188技巧78調用操作系統(tǒng)“關于”對話框190第7章菜單和工具欄192技巧79在菜單中添加菜單項192技巧80在菜單欄指定位置添加菜單195技巧81屏蔽和刪除工作表菜單197技巧82改變系統(tǒng)菜單的操作198技巧83定制自己的系統(tǒng)菜單199技巧84改變菜單按鈕圖標205技巧85右鍵快捷菜單增加菜單項206技巧86自定義右鍵快捷菜單207技巧87使用右鍵菜單制作數據有效性210技巧88禁用工作表右鍵菜單212技巧89創(chuàng)建自定義工具欄213技巧90自定義工具欄按鈕圖標216技巧91自定義工作簿圖標217技巧92移除工作表的最小最大化和關閉按鈕218技巧93在工具欄上添加下拉列表框219技巧94屏蔽工作表的復制功能221技巧95禁用工具欄的自定義222技巧96屏蔽所有的命令欄225技巧97恢復Excel的命令欄226第8章控件與用戶窗體228技巧98限制文本框的輸入228技巧99文本框添加右鍵快捷菜單230技巧100文本框回車自動輸入234技巧101自動選擇文本框內容235技巧102設置文本框數據格式236技巧103限制文本框的輸入長度238技巧104將光標返回文本框中239技巧105文本框的自動換行241技巧106多個文本框數據相加243技巧107控件跟隨活動單元格244技巧108高亮顯示按鈕245技巧109組合框和列表框添加列表項的方法247109-1使用RowSource屬性添加列表項247109-2使用List屬性添加列表項248109-3使用AddItem方法添加列表項249技巧110去除列表框數據源的重復值和空格251技巧111移動列表框條目253技巧112允許多項選擇的列表框256技巧113多列組合框和列表框的設置259113-1多列組合框和列表框添加列表項259113-2多列列表框寫入工作表261技巧114輸入時逐步提示信息263技巧115二級組合框270技巧116使用DTP控件輸入日期272技巧117使用RefEdit控件選擇區(qū)域275技巧118如何注冊控件276技巧119遍歷控件的方法279119-1使用名稱中的變量遍歷控件279119-2使用對象類型遍歷控件281119-3使用程序標識符遍歷控件282119-4使用名稱中的變量遍歷圖形283119-5使用FormControlType屬性遍歷圖形284技巧120使微調框最小變動量小于1285技巧121不打印工作表中的控件287121-1設置控件格式287121-2設置控件的printobjcet屬性289技巧122在框架中使用滾動條289技巧123使用多頁控件291技巧124標簽文字垂直居中對齊293技巧125使用TabStrip控件295技巧126顯示GIF動畫圖片297技巧127播放Flash文件300技巧128在工作表中添加窗體控件302128-1使用AddFormControl方法303128-2使用Add方法305技巧129在工作表中添加ActiveX控件307129-1使用Add方法308129-2使用AddOLEObject方法310技巧130使用spreadsheet控件311技巧131使用Listview控件314131-1使用Listview控件顯示數據列表314131-2在Listview控件中使用復選框317131-3調整Listview控件的行距319131-4在Listview控件中排序322131-5Listview控件的圖標設置323技巧132調用非模式窗體326技巧133進度條的制作328133-1使用進度條控件328133-2使用標簽控件330技巧134使用TreeView控件顯示層次333技巧135用戶窗體添加圖標337技巧136用戶窗體添加最大最小化按紐339技巧137禁用窗體標題欄的關閉按鈕340技巧138屏蔽窗體標題欄的關閉按鈕341技巧139無標題欄和邊框的窗體343技巧140制作年月選擇窗體344技巧141自定義窗體中的鼠標指針類型347技巧142調整窗體的顯示位置348技巧143由鼠標確定窗體顯示位置350技巧144用戶窗體的打印351技巧145使用自定義顏色設置窗體顏色353技巧146在窗體中顯示圖表354146-1使用Export方法354146-2使用API函數356技巧147窗體運行時調整控件大小357技巧148在用戶窗體上添加菜單360技巧149在用戶窗體上添加工具欄364技巧150使用代碼添加窗體及控件369技巧151用戶窗體的全屏顯示375151-1設置用戶窗體為應用程序的大小375151-2根據屏幕分辨率進行設置376技巧152在用戶窗體上添加狀態(tài)欄377第9章函數的使用381技巧153調用工作表函數求和381技巧154查找最大、最小值381技巧155不重復值的錄入383技巧156獲得當月的最后一天385技巧157四舍五入運算386157-1極小值修正法386157-2調用工作表函數法387技巧158使用字符串函數387技巧159使用日期函數389技巧160判斷是否為數值393技巧161格式化數值、日期和時間394技巧162個人所得稅自定義函數396技巧163人民幣大寫函數398技巧164列號轉換為列標400技巧165判斷工作表是否為空表401技巧166查找指定工作表402技巧167查找指定工作簿是否打開404技巧168取得應用程序的安裝路徑404技巧169數組的使用406169-1代碼運行時創(chuàng)建數組406169-2文本轉換為數組407169-3使用動態(tài)數組去除重復值409第10章文件操作412技巧170導入文本文件412170-1使用查詢表導入412170-2使用Open 語句導入413170-3使用OpenText方法415技巧171將數據寫入文本文件416171-1使用Print # 語句416171-2另存為文本文件418技巧172文件修改的日期和時間419技巧173查找文件或文件夾420技巧174獲得當前文件夾的名稱422技巧175創(chuàng)建和刪除文件夾422技巧176重命名文件或文件夾423技巧177復制指定的文件424技巧178刪除指定的文件425技巧179搜索特定的文件426技巧180使用WSH處理文件428180-1獲取文件信息428180-2查找文件430180-3移動文件431180-4復制文件431180-5刪除文件432180-6創(chuàng)建文件夾433180-7復制文件夾434180-8移動文件夾435180-9刪除文件夾435180-10導入文本文件436180-11創(chuàng)建文本文件438第11章其他應用441技巧181取得電腦名稱441技巧182取得邏輯盤序列號442技巧183使用API取得硬盤信息443技巧184使用數字簽名444技巧185暫停代碼的運行449技巧186定時關機450技巧187打開指定的網頁451技巧188VBE的操作452188-1添加模塊和過程452188-2建立事件過程454188-3模塊的導入與導出456188-4刪除宏代碼457技巧189保護VBA代碼459189-1設置工程密碼459189-2設置“工程不可查看”460技巧190優(yōu)化代碼462190-1關閉屏幕刷新462190-2使用工作表函數464190-3使用更快的單元格操作方法465190-4使用With語句引用對象466190-5少用激活或選擇語句468技巧191取得文件的基本名稱469技巧192防止用戶中斷代碼運行470技巧193加班費計算表472技巧194制作發(fā)放條498技巧195費用統(tǒng)計表501技巧196職工花名冊516技巧197收據系統(tǒng)529技巧198職工考勤系統(tǒng)567第1章 Range(單元格)對象Range對象是Excel應用程序中最常用的對象,一個Range對象代表一個單元格、一行、一列、包含一個或者更多單元格區(qū)域(可以是連續(xù)的單元格,也可以是不連續(xù)的單元格)中選定的單元格,甚至是多個工作表上的一組單元格,在操作Excel 內的任何區(qū)域之前都需要將其表示為一個Range對象,然后使用該Range對象的方法和屬性。技巧1 單元格的引用方法在VBA中經常需要引用單元格或單元格區(qū)域區(qū)域,主要有以下幾種方法。1-1 使用Range屬性VBA中可以使用Range屬性返回單元格或單元格區(qū)域,如下面的代碼所示。#001 Sub RngSelect() #002 Sheet1.Range(A3:F6, B1:C5).Select#003 End Sub代碼解析:RngSelect過程使用Select方法選中A3:F6,B1:C5單元格區(qū)域。Range屬性返回一個Range對象,該對象代表一個單元格或單元格區(qū)域,語法如下:Range(Cell1, Cell2)參數Cell1是必需的,必須為 A1 樣式引用的宏語言,可包括區(qū)域操作符(冒號)、相交區(qū)域操作符(空格)或合并區(qū)域操作符(逗號)。也可包括美元符號(即絕對地址,如“$A$1”)??稍趨^(qū)域中任一部分使用局部定義名稱,如Range(B2:LastCell),其中LastCell為已定義的單元格區(qū)域名稱。參數Cell2是可選的,區(qū)域左上角和右下角的單元格。運行Sub RngSelect過程,選中A3:F6, B1:C5單元格區(qū)域,如圖 11所示。圖 11使用Range屬性引用單元格區(qū)域注意 如果沒有使用對象識別符,Range屬性返回活動表的一個區(qū)域,如果活動表不是工作表,則該屬性無效。1-2 使用Cells屬性使用Cells屬性返回一個Range對象,如下面的代碼所示。#001 Sub Cell()#002 Dim icell As Integer#003 For icell = 1 To 100#004 Sheet2.Cells(icell, 1).Value = icell#005 Next#006 End Sub代碼解析:Cell過程使用For.Next語句為工作表中的A1:A100單元格區(qū)域填入序號。Cells屬性指定單元格區(qū)域中的單元格,語法如下:Cells(RowIndex, ColumnIndex)參數RowIndex是可選的,表示引用區(qū)域中的行序號。參數ColumnIndex是可選的,表示引用區(qū)域中的列序號。如果缺省參數,Cells屬性返回引用對象的所有單元格。Cells屬性的參數可以使用變量,因此經常應用于在單元格區(qū)域中循環(huán)。1-3 使用快捷記號在VBA中可以將A1引用樣式或命名區(qū)域名稱使用方括號括起來,作為Range屬性的快捷方式,這樣就不必鍵入單詞“Range”或使用引號,如下面的代碼所示。#001 Sub Fastmark()#002 A1:A5 = 2#003 Fast = 4#004 End Sub代碼解析:Fastmark過程使用快捷記號為單元格區(qū)域賦值。第2行代碼使用快捷記號將活動工作表中的A1:A5單元格賦值為2。第3行代碼將工作簿中已命名為“Fast”的單元格區(qū)域賦值為4。注意 使用快捷記號引用單元格區(qū)域時只能使用固定字符串而不能使用變量。1-4 使用Offset屬性可以使用Range對象的Offset屬性返回一個基于引用的Range對象的單元格區(qū)域,如下面的代碼所示。#001 Sub Offset()#002 Sheet3.Range(A1:C3).Offset(3, 3).Select#003 End Sub代碼解析:Offset過程使用Range對象的Offset屬性選中A1:A3單元格偏移三行三列后的區(qū)域。應用于Range對象的Offset 屬性的語法如下:expression.Offset(RowOffset, ColumnOffset)參數expression是必需的,該表達式返回一個Range對象。參數RowOffset是可選的,區(qū)域偏移的行數(正值、負值或 0(零)。正值表示向下偏移,負值表示向上偏移,默認值為 0。參數ColumnOffset是可選的,區(qū)域偏移的列數(正值、負值或 0(零)。正值表示向右偏移,負值表示向左偏移,默認值為 0。運行Offset過程,選中A1:A3單元格偏稱三行三列后的區(qū)域,如圖 12所示。圖 12使用Range對象的Offset屬性1-5 使用Resize屬性使用Range對象的Resize屬性調整指定區(qū)域的大小,并返回調整大小后的單元格區(qū)域,如下面的代碼所示。#001 Sub Resize()#002 Sheet4.Range(A1).Resize(3, 3).Select#003 End Sub代碼解析:Resize過程使用Range對象的Resize屬性選中A1單元格擴展為三行三列后的區(qū)域。Resize屬性的語法如下:expression.Resize(RowSize, ColumnSize)參數expression是必需的,返回要調整大小的Range 對象參數RowSize是可選的,新區(qū)域中的行數。如果省略該參數,則該區(qū)域中的行數保持不變。參數ColumnSize是可選的,新區(qū)域中的列數。如果省略該參數。則該區(qū)域中的列數保持不變。運行Resize過程,選中A1單元格擴展為三行三列后的區(qū)域,如圖 13所示。圖 13使用Resize屬性調整區(qū)域大小1-6 使用Union方法使用Union方法可以將多個非連續(xù)區(qū)域連接起來成為一個區(qū)域,從而可以實現對多個非連續(xù)區(qū)域一起進行操作,如下面的代碼所示。#001 Sub UnSelect()#002 Union(Sheet5.Range(A1:D4), Sheet5.Range(E5:H8).Select#003 End Sub代碼解析:UnSelect過程選擇單元格A1:D4和E5:H8所組成的區(qū)域。Union方法返回兩個或多個區(qū)域的合并區(qū)域,語法如下:expression.Union(Arg1, Arg2, .)其中參數expression是可選的,返回一個Application對象。參數Arg1, Arg2, .是必需的,至少指定兩個Range對象。運行UnSelect過程,選中單元格A1:D4和E5:H8所組成的區(qū)域,如圖 14所示。圖 14使用Union方法將多個非連續(xù)區(qū)域連接成一個區(qū)域1-7 使用UsedRange屬性使用UsedRange屬性返回指定工作表上已使用單元格組成的區(qū)域,如下面的代碼所示。#001 Sub UseSelect()#002 Sheet6.UsedRange.Select#003 End Su代碼解析:UseSelect過程使用UsedRange屬性選擇工作表上已使用單元格組成的區(qū)域,包括空單元格。如工作表中已使用A1單元格和D8單元格,運行UseSelect過程將選擇A1到D8單元格區(qū)域,如圖 15所示。圖 15使用UsedRange屬性選擇已使用區(qū)域1-8 使用CurrentRegion屬性使用CurrentRegion屬性返回指定工作表上當前的區(qū)域,如下面的代碼所示。#001 Sub CurrentSelect()#002 Sheet7.Range(A5).CurrentRegion.Select#003 End Sub代碼解析:CurrentSelect過程使用CurrentRegion屬性選擇工作表上A5單元格當前的區(qū)域,當前區(qū)域是一個邊緣是任意空行和空列組合成的范圍。運行CurrentSelect過程將選擇A5到B6單元格區(qū)域,如圖 16所示。圖 16CurrentRegion屬性選擇當前的區(qū)域技巧2 選定單元格區(qū)域的方法2-1 使用Select方法在VBA中一般使用Select方法選定單元格或單元格區(qū)域,如下面的代碼所示。#001 Sub RngSelect()#002 Sheet3.Activate#003 Sheet3.Range(A1:B10).Select#004 End Sub代碼解析:RngSelect過程使用Select方法選定Sheet3中的A1:B10單元格區(qū)域,Select方法應用于Range對象時語法如下:expression.Select(Replace)參數expression是必需的,一個有效的對象。參數Replace是可選的,要替換的對象。使用Select方法選定單元格時,單元格所在的工作表必需為活動工作表,所以在第2行代碼中先使用Activate方法使Sheet3成為活動工作表,否則Select方法有可能出錯,顯示如圖 21所示的錯誤提示。圖 21Select方法無效提示2-2 使用Activate方法還可以使用Activate方法選定單元格或單元格區(qū)域,如下面的代碼所示。#001 Sub RngActivate()#002 Sheet3.Activate#003 Sheet3.Range(A1:B10).Activate#004 End Sub代碼解析:RngActivate過程使用Activate方法選定Sheet3中的A1:B10單元格區(qū)域,Activate方法應用于Range對象時語法如下:expression.Activate使用Activate方法選定單元格時,單元格所在的工作表也必需為活動工作表,否則Activate方法有可能出錯,顯示如圖 22所示的錯誤提示。圖 22Activate方法無效提示2-3 使用Goto方法使用Goto方法無需使單元格所在的工作表成為活動工作表,如下面的代碼所示。#001 Sub RngGoto()#002 Application.Goto Reference:=Sheet3.Range(A1:B10), scroll:=True#003 End Sub代碼解析:RngGoto過程使用Goto方法選定Sheet3中的A1:B10單元格區(qū)域,并滾動工作表以顯示該單元格。Goto方法選定任意工作簿中的任意區(qū)域或任意Visual Basic過程,并且如果該工作簿未處于活動狀態(tài),就激活該工作簿,語法如下:expression.Goto(Reference, Scroll)參數expression是必需的,返回一個Application 對象。參數Reference是可選的,Variant類型,指定目標??梢允荝ange對象、包含R1C1-樣式記號的單元格引用的字符串或包含 Visual Basic 過程名的字符串。如果省略本參數,目標將是最近一次用Goto方法選定的區(qū)域。參數Scroll是可選的,Variant類型,如果該值為True,則滾動窗口直至目標區(qū)域的左上角單元格出現在窗口的左上角。如果該值為False,則不滾動窗口。默認值為False。技巧3 獲得指定行、列中的最后一個非空單元格使用VBA對工作表進行操作時,經常需要定位到指定行或列中最后一個非空單元格,此時可以使用Range對象的End屬性,在取得單元格對象后便能獲得該單元格的相關屬性,如單元格地址、行列號、數值等,如下面的代碼所示。#001 Sub LastRow()#002 Dim rng As Range#003 Set rng = Sheet1.Range(A65536).End(xlUp)#004 MsgBox A列中最后一個非空單元格是 & rng.Address(0, 0) _#005 & ,行號 & rng.Row & ,數值 & rng.Value#006 Set rng = Nothing#007 End Sub代碼解析:LastRow過程使用消息框顯示工作表中A列最后非空單元格的地址、行號和數值。End屬性返回一個Range對象,該對象代表包含源區(qū)域的區(qū)域尾端的單元格。等同于按鍵、或,語法如下:expression.End(Direction)參數expression是必需的,一個有效的對象。參數Direction是可選的,所要移動的方向,可以為表格 31所示的XlDirection 常量之一。常量值描述xlDown-4121向下xlToRight-4161向右xlToLeft-4159向左xlUp-4162向上表格 31XlDirection 常量Range對象的End屬性返回的是一個Range對象,因此可以直接使用該對象的屬性和方法。運行LastRow過程結果如圖 31所示。圖 31獲得A列最后一個非空單元格通過修改相應的參數,能夠獲得指定行中最后一個非空單元格,如下面的代碼所示。#001 Sub LastColumn()#002 Dim rng As Range#003 Set rng = Sheet1.Range(IV1).End(xlToLeft)#004 MsgBox 第一行中最后一個非空單元格是 & rng.Address(0, 0) _#005 & ,列號 & rng.Column & ,數值 & rng.Value#006 Set rng = Nothing#007 End Sub代碼解析:LastColumn過程使用消息框顯示工作表中第一行最后一個非空單元格的地址、列號和數值,如圖 32所示。圖 32獲得第一行最后一個非空單元格技巧4 定位單元格在Excel中使用定位對話框可以選中工作表中特定的單元格區(qū)域,而在VBA中則使用SpecialCells方法,如下面的代碼所示。#001 Sub SpecialAddress()#002 Dim rng As Range#003 Set rng = Sheet1.UsedRange.SpecialCells(xlCellTypeFormulas)#004 rng.Select#005 MsgBox 工作表中有公式的單元格為: & rng.Address#006 Set rng = Nothing#007 End Sub代碼解析:SpecialAddress過程使用SpecialCells方法選中工作表中有公式的單元格,并用消息框顯示其地址。SpecialCells方法返回一個Range對象,該對象代表與指定類型及值相匹配的所有單元格,語法如下:expression.SpecialCells(Type, Value)參數expression是必需的,返回一個有效的對象。參數Type是必需的,要包含的單元格,可為表格 41所列的XlCellType常量之一。常量值描述xlCellTypeAllFormatConditions-4172任意格式單元格xlCellTypeAllValidation-4174含有驗證條件的單元格xlCellTypeBlanks4空單元格xlCellTypeComments-4144含有注釋的單元格xlCellTypeConstants2含有常量的單元格xlCellTypeFormulas-4123含有公式的單元格xlCellTypeLastCell11使用區(qū)域中最后的單元格xlCellTypeSameFormatConditions-4173含有相同格式的單元格xlCellTypeSameValidation-4175含有相同驗證條件的單元格xlCellTypeVisible12所有可見單元格表格 41XlCellType常量第3行代碼將SpecialCells方法的Type參數設置為xlCellTypeFormulas,返回的是含有公式的單元格,通過修改相應的參數可以返回不同的單元格。參數Value是可選的,如果Type參數為xlCellTypeConstants或xlCellTypeFormulas, 此參數可用于確定結果中應包含哪幾類單元格。將某幾個值相加可使此方法返回多種類型的單元格。如果省略將選定所有常量或公式,可為表格 42所列的 XlSpecialCellsValue常量之一。常量值描述xlErrors16錯誤xlLogical4邏輯值xlNumbers1數字xlTextValues2文本表格 42XlSpecialCellsValue常量第5行代碼使用消息框顯示工作表中含有公式單元格的地址。SpecialCells方法返回的是Range對象,因此可以直接使用該對象的屬性和方法。運行SpecialAddress過程結果如圖 41所示。圖 41SpecialCells方法技巧5 查找單元格5-1 使用Find方法在Excel中使用查找對話框可以查找工作表中特定內容的單元格,而在VBA中則使用Find方法,如下面的代碼所示。#001 Sub RngFind()#002 Dim StrFind As String#003 Dim Rng As Range#004 StrFind = InputBox(請輸入要查找的值:)#005 If Trim(StrFind) Then#006 With Sheet1.Range(A:A)#007 Set Rng = .Find(What:=StrFind, _#008 After:=.Cells(.Cells.Count), _#009 LookIn:=xlValues, _#010 LookAt:=xlWhole, _#011 SearchOrder:=xlByRows, _#012 SearchDirection:=xlNext, _#013 MatchCase:=False)#014 If Not Rng Is Nothing Then#015 Application.Goto Rng, True#016 Else#017 MsgBox 沒有找到該單元格!#018 End If#019 End With#020 End If#021 End Sub代碼解析:RngFind過程使用Find方法在工作表Sheet1的A列中查找InputBox函數對話框中所輸入的值,并查找該值所在的第一個單元格。第6到第13行代碼在工作表Sheet1的A列中查找InputBox函數對話框中所輸入的值。應用于Range對象的Find方法在區(qū)域中查找特定信息,并返回Range對象,該對象代表用于查找信息的第一個單元格。如果未發(fā)現匹配單元格,就返回Nothing,語法如下:expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)參數expression是必需的,該表達式返回一個Range對象。參數What是必需的,要搜索的數據,可為字符串或任意數據類型。參數After是可選的,表示搜索過程將從其之后開始進行的單元格,必須是區(qū)域中的單個單元格。查找時是從該單元格之后開始的,直到本方法繞回到指定的單元格時,才對其進行搜索。如果未指定本參數,搜索將從區(qū)域的左上角單元格之后開始。在本例中將After參數設置為A列的最后一個單元格,所以查找時從A1單元格開始搜索。參數LookIn是可選的,信息類型。參數LookAt是可選的,可為XlLookAt常量的xlWhole 或xlPart之一。參數SearchOrder是可選的,可為XlSearchOrder常量的xlByRows或xlByColumns之一。參數SearchDirection是可選的,搜索的方向,可為XlSearchDirection常量的xlNext或xlPrevious之一。參數MatchCase是可選的,若為True,則進行區(qū)分大小寫的查找。默認值為False。參數MatchByte是可選的,僅在選擇或安裝了雙字節(jié)語言支持時使用。若為True,則雙字節(jié)字符僅匹配雙字節(jié)字符。若為False,則雙字節(jié)字符可匹配其等價的單字節(jié)字符。參數SerchFormat是可選的,搜索的格式。每次使用Find方法后,參數LookIn、LookAt、SearchOrder 和MatchByte的設置將保存。如果下次調用Find方法時不指定這些參數的值,就使用保存的值。因此每次使用該方法時請明確設置這些參數。如果工作表的A列中存在重復的數值,那么需要使用FindNext方法或FindPrevious方法進行重復搜索,如下面的代碼所示。#001 Sub RngFindNext()#002 Dim StrFind As String#003 Dim Rng As Range#004 Dim FindAddress As String#005 StrFind = InputBox(請輸入要查找的值:)#006 If Trim(StrFind) Then#007 With Sheet1.Range(A:A)#008 Set Rng = .Find(What:=StrFind, _#009 After:=.Cells(.Cells.Count), _#010 LookIn:=xlValues, _#011 LookAt:=xlWhole, _#012 SearchOrder:=xlByRows, _#013 SearchDirection:=xlNext, _#014 MatchCase:=False)#015 If Not Rng Is Nothing Then#016 FindAddress = Rng.Address#017 Do#018 Rng.Interior.ColorIndex = 6#019 Set Rng = .FindNext(Rng)#020 Loop While Not Rng Is Nothing And Rng.Address FindAddress#021 End If#022 End With#023 End If#024 End Sub代碼解析:RngFindNext過程在工作表Sheet1的A列中查找InputBox函數對話框中所輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論