正文開始前,先插播一條廣告:復(fù)制下面黃色內(nèi)容后打開手機(jī)淘寶即可查看!感謝各位的支持! 去老繭,脫死皮!番茄派足膜!,使用¥賺大了!拍下立即送卡通姓名貼?。屜阮A(yù)覽(長(zhǎng)按復(fù)制整段文案,打開手機(jī)淘寶即可進(jìn)入活動(dòng)內(nèi)容) 下面應(yīng)以為粉絲的要求,開始把我以前的一些學(xué)習(xí)資料整理了一下,然后分20期發(fā)給各位有需要的朋友,您也可以索取源文件,郵箱:546039945@qq.com! 011 單元格格式操作 011-1 單元格字體格式設(shè)置 在VBA中可以對(duì)單元格的字體格式進(jìn)行各種設(shè)置,如下面的代碼所示。 Public Sub RngFont() WithRange('A1').Font .Name = '華文彩云' .FontStyle = 'Bold' .Size = 18 .ColorIndex = 3 .Underline = 2 EndWith End Sub 代碼解析: RngFont過程對(duì)單元格A1的字體格式進(jìn)行設(shè)置。 其中第3行代碼設(shè)置字體為“華文彩云”,應(yīng)用于Font對(duì)象的Name屬性返回或設(shè)置對(duì)象的名稱。 第4行代碼設(shè)置字體為加粗,FontStyle屬性返回或設(shè)置字體樣式。設(shè)置為“Bold”加粗字體,設(shè)置為“Italic”傾斜字體,也可以設(shè)置成“Bold Italic”。 第5行代碼設(shè)置字體的大小為18磅,Size屬性返回或設(shè)置字體大小。 第6行代碼設(shè)置字體的顏色為紅色,應(yīng)用于Font對(duì)象的ColorIndex屬性返回或設(shè)置字體的顏色,該顏色可指定為當(dāng)前調(diào)色板中顏色的編號(hào)。 第7行代碼設(shè)置字體為單下劃線類型,Underline屬性返回或設(shè)置應(yīng)用于字體的下劃線類型,可為表格所列的XlUnderlineStyle常量之一。 011-2 設(shè)置單元格內(nèi)部格式 設(shè)置單元格的Interior屬性可以對(duì)單元格的內(nèi)部格式進(jìn)行設(shè)置,如下面的代碼所示。 Sub RngInterior() WithRange('A1').Interior .ColorIndex = 3 .Pattern = xlPatternCrissCross .PatternColorIndex = 6 EndWith End Sub 代碼解析: RngInterior過程對(duì)A1單元格的內(nèi)部格式進(jìn)行設(shè)置。 第2行代碼使用Interior屬性返回單元格對(duì)象的內(nèi)部。 第3行代碼設(shè)置單元格邊框內(nèi)部的顏色為紅色。應(yīng)用于Interior對(duì)象的ColorIndex屬性返回或設(shè)置邊框內(nèi)部的顏色,可指定為如▲11-1所示的當(dāng)前調(diào)色板中顏色的編號(hào)或?yàn)?/span>XlColorIndex 常量之一:xlColorIndexAutomatic(自動(dòng)填充)、xlColorIndexNone (無內(nèi)部填充)。 第4行代碼設(shè)置單元格設(shè)置內(nèi)部圖案為十字圖案。應(yīng)用于Interior對(duì)象的Pattern屬性返回或者設(shè)置內(nèi)部圖案。 第5行代碼設(shè)置單元格設(shè)置內(nèi)部圖案的顏色為黃色。應(yīng)用于Interior對(duì)象的PatternColorIndex屬性返回或設(shè)置內(nèi)部圖案的顏色,可指定為如▲11-1中所示的當(dāng)前調(diào)色板中顏色的編號(hào)或?yàn)?/span>XlColorIndex常量之一:xlColorIndexAutomatic (自動(dòng)填充)、xlColorIndexNone (無內(nèi)部填充)。 011-3 為單元格區(qū)域添加邊框 我們?yōu)閱卧駞^(qū)域添加邊框時(shí)往往通過錄制宏獲取代碼,但宏錄制器生成的代碼分別設(shè)置單元格區(qū)域的每個(gè)邊框,因此代碼多且效率低。使用Range對(duì)象的Borders集合可以快速的對(duì)單元格區(qū)域的每個(gè)邊框應(yīng)用相同的格式,而Range對(duì)象的BorderAround方法則可以快速地為單元格區(qū)域添加一個(gè)外邊框,如下面的代碼所示。 Sub AddBorders() Dimrng As Range Setrng = Range('B4:G10') Withrng.Borders .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 5 EndWith rng.BorderAroundxlContinuous,xlMedium,5 Setrng = Nothing End Sub 代碼解析: AddBorders過程為單元格區(qū)域B4:G10設(shè)置內(nèi)部統(tǒng)一邊框并添加一個(gè)加粗外邊框。 第4行到第8行代碼使用Borders屬性引用單元格區(qū)域的Borders集合,其中第5行代碼設(shè)置其邊框樣式線條的樣式,第6行代碼設(shè)置邊框線條的粗細(xì),第7行代碼設(shè)置邊框的顏色。 應(yīng)用于Range對(duì)象的Borders集合代表Range對(duì)象的4個(gè)邊框(左邊框、右邊框、頂部邊框和底部邊框)的4個(gè)Border對(duì)象組成的集合,這4個(gè)邊框既可單獨(dú)返回,也可作為一個(gè)組同時(shí)返回。 第9行代碼使用BorderAround方法為單元格區(qū)域添加一個(gè)加粗外邊框。 應(yīng)用于Range對(duì)象的BorderAround方法向單元格區(qū)域添加整個(gè)區(qū)域的外邊框,并設(shè)置該邊框的相關(guān)屬性,其語(yǔ)法如下: BorderAround(LineStyle,Weight,ColorIndex,Color) 其中LineStyle參數(shù)設(shè)置邊框線條的樣式,Weight參數(shù)設(shè)置邊框線條的粗細(xì),ColorIndex參數(shù)設(shè)置邊框顏色,Color參數(shù)以RGB值指定邊框的顏色。 注意指定Color參數(shù)可以設(shè)置顏色為當(dāng)前調(diào)色板之處的其它顏色,不能同時(shí)指定ColorIndex參數(shù)和Color參數(shù)。 運(yùn)行AddBorders過程,效果。 如果需要在單元格區(qū)域中應(yīng)用多種邊框格式,則需分別設(shè)置各邊框格式,如下面的代碼所示。 Sub BordersDemo() Dimrng As Range Setrng = Sheet2.Range('B4:G10') Withrng.Borders(xlInsideHorizontal) .LineStyle = xlDot .Weight = xlThin .ColorIndex = 5 EndWith Withrng.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 5 EndWith rng.BorderAroundxlContinuous,xlMedium,5 Setrng = Nothing End Sub 代碼解析: BordersDemo過程代碼為單元格區(qū)域內(nèi)部邊框在水平和垂直方向上應(yīng)用不同格式,并為區(qū)域添加一個(gè)加粗外邊框。 Borders(index)屬性返回單個(gè)Border對(duì)象,其Index參數(shù)取值可為表格所列的XlBordersIndex常量之一: 011-4 靈活設(shè)置單元格的行高列寬 一般情況下單元格的行高列寬都是以磅為單位進(jìn)行設(shè)置的,也可以使用英寸和厘米計(jì)量單位設(shè)置單元格的行高列寬,如下面的代碼所示。 Sub RngToPoints() WithRange('A1') .RowHeight = Application.CentimetersToPoints(2) .ColumnWidth = Application.CentimetersToPoints(1.5) EndWith WithRange('A2') .RowHeight = Application.InchesToPoints(1.2) .ColumnWidth = Application.InchesToPoints(0.3) EndWith End Sub 代碼解析: RngToPoints過程以英寸和厘米計(jì)量單位設(shè)置單元格的行高列寬。 第3、4行代碼使用CentimetersToPoints方法以厘米為計(jì)量單位設(shè)置A1單元格的行高列寬。CentimetersToPoints方法將計(jì)量單位從厘米轉(zhuǎn)換為磅(一磅等于0.035 厘米),語(yǔ)法如下: expression.CentimetersToPoints(Centimeters) 參數(shù)expression是必需的,返回一個(gè)Application對(duì)象。 參數(shù)Centimeters是必需的,指定要轉(zhuǎn)換為磅值的厘米值。 第5、6行代碼使用InchesToPoints方法以英寸為計(jì)量單位設(shè)置B2單元格的行高列寬。InchesToPoints方法將計(jì)量單位從英寸轉(zhuǎn)換為磅,語(yǔ)法如下: expression.InchesToPoints(Inches) 參數(shù)expression是必需的,返回一個(gè)Application對(duì)象。 參數(shù)Inches是必需的,指定要轉(zhuǎn)換為磅值的英寸值。
▲012 單元格中的數(shù)據(jù)有效性 012-1 在單元格中建立數(shù)據(jù)有效性 在單元格中建立數(shù)據(jù)有效性可以使用Add方法,如下面的代碼所示。 Sub Validation() WithRange('A1:A10').Validation .Delete .Add Type:=xlValidateList,_ AlertStyle:=xlValidAlertStop,_ Operator:=xlBetween,_ Formula1:='1,2,3,4,5,6,7,8' EndWith End Sub 代碼解析: Validation過程使用Add方法在A1:A10單元格中建立數(shù)據(jù)有效性。 第3行代碼刪除已建立的數(shù)據(jù)有效性,防止代碼運(yùn)行出錯(cuò)。 第4行到第7行代碼使用Add方法建立數(shù)據(jù)有效性。應(yīng)用于Validation對(duì)象的Add方法的語(yǔ)法如下: expression.Add(Type,AlertStyle,Operator,Formula1,Formula2) 參數(shù)expression是必需的,返回一個(gè)Validation對(duì)象。 參數(shù)Type是必需的,數(shù)據(jù)有效性類型。 參數(shù)AlertStyl是可選的,有效性檢驗(yàn)警告樣式。 參數(shù)Operator是可選的,數(shù)據(jù)有效性運(yùn)算符。 參數(shù)Formula1是可選的,數(shù)據(jù)有效性公式的第一部分。 參數(shù)Formula2是可選的,當(dāng)Operator為xlBetween或xlNotBetween時(shí),數(shù)據(jù)有效性公式的第二部分(其他情況下,此參數(shù)被忽略)。 Add 方法所要求的參數(shù)依有效性檢驗(yàn)的類型而定,如表格所示。 012-2 判斷單元格是否存在數(shù)據(jù)有效性 在VBA中沒有專門的屬性判斷單元格是否存在數(shù)據(jù)有效性設(shè)置,可以使用Validation對(duì)象的有效性類型和錯(cuò)誤陷阱來判斷,如下面的代碼所示。 Sub Validation() On ErrorGoTo Line If Range('A2').Validation.Type>= 0 Then MsgBox '單元格有數(shù)據(jù)有效性!' Exit Sub EndIf Line: MsgBox'單元格沒有數(shù)據(jù)有效性!' End Sub 代碼解析: Validation過程使用Validation對(duì)象的有效性類型和錯(cuò)誤陷阱來判斷A2單元格中是否存在數(shù)據(jù)有效性。 第6行代碼,如果A2單元格中存在數(shù)據(jù)有效性,Type參數(shù)值就會(huì)大于等于0,否則就會(huì)發(fā)生錯(cuò)誤,使用OnError GoTo捕捉到錯(cuò)誤后轉(zhuǎn)移到第8行代碼,顯示一個(gè)消息框。 012-3 動(dòng)態(tài)的數(shù)據(jù)有效性 利用VBA可以在單元格中建立動(dòng)態(tài)的數(shù)據(jù)有效性,如下面的代碼所示。 Private Sub Worksheet_SelectionChange(ByVal TargetAs Range) If Target.Column= 1 And Target.Count = 1 And Target.Row > 1 Then With Target.Validation .Delete .Add Type:=xlValidateList,_ AlertStyle:=xlValidAlertStop,_ Operator:=xlBetween,_ Formula1:='主機(jī),顯示器' End With EndIf End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column= 1 And Target.Row > 1 And Target.Count = 1 Then With Target.Offset(0,1).Validation .Delete Select Case Target Case '主機(jī)' .Add Type:=xlValidateList,_ AlertStyle:=xlValidAlertStop,_ Operator:=xlBetween,_ Formula1:='Z286,Z386,Z486,Z586' Case '顯示器' .Add Type:=xlValidateList,_ AlertStyle:=xlValidAlertStop,_ Operator:=xlBetween,_ Formula1:='三星17,飛利浦15,三星15,飛利浦17' End Select End With EndIf End Sub 代碼解析: 第1行到第11行代碼,工作表的SelectionChange事件,當(dāng)選擇工作表的A列單元格時(shí),在A2以下的單元格中建立動(dòng)態(tài)的數(shù)據(jù)有效性。 其中第2行代碼,利用SelectionChange事件的Target參數(shù)來限制事件的觸發(fā)條件。 第3行到第9行代碼使用Add方法在A列單元格中建立數(shù)據(jù)有效性。應(yīng)用于Validation對(duì)象的Add方法請(qǐng)參閱▲12-1。 第12行到第30行代碼,工作表的Change事件,當(dāng)工作表A列單元格內(nèi)容改變時(shí),在B列單元格中建立動(dòng)態(tài)的數(shù)據(jù)有效性。 其中第16行到第27行代碼,根據(jù)A列單元格的內(nèi)容在B列對(duì)應(yīng)的單元格中建立數(shù)據(jù)有效性,其Formula1參數(shù)的值根據(jù)A列單元格的內(nèi)容而變化,使之達(dá)到動(dòng)態(tài)數(shù)據(jù)有效性的效果。 012-4 自動(dòng)展開數(shù)據(jù)有效性下拉列表 選擇工作表單元格時(shí)自動(dòng)展開數(shù)據(jù)有效性的下拉列表,如下面的代碼所示。 Private Sub Worksheet_SelectionChange(ByVal TargetAs Range) If Target.Column= 5 Then Application.SendKeys '%{down}' End Sub 代碼解析: 當(dāng)選擇工作表的E列中有數(shù)據(jù)有效性的單元格時(shí)使用SendKeys方法發(fā)送Alt+向下鍵,打開數(shù)據(jù)有效性的下拉列表。 應(yīng)用于Application對(duì)象的SendKeys方法將擊鍵發(fā)送給活動(dòng)應(yīng)用程序,語(yǔ)法如下: expression.SendKeys(Keys,Wait) 參數(shù)expression是可選的,該表達(dá)式返回一個(gè)Application對(duì)象。 參數(shù)Keys是必需的,要發(fā)送的鍵或者組合鍵,以文本方式表示。 Keys參數(shù)可以指定任何單個(gè)鍵或與Alt、Ctrl 或Shift的組合鍵(或者這些鍵的組合)。每個(gè)鍵可用一個(gè)或多個(gè)字符表示。例如,'a' 表示字符 a,或者 '{ENTER}' 表示 Enter。 若要指定在按相應(yīng)鍵時(shí)不會(huì)顯示的字符(例如,Enter 或Tab),請(qǐng)使用如表格所列的代碼來表示相應(yīng)的鍵,表中的每個(gè)代碼表示鍵盤上的一個(gè)鍵。 當(dāng)選擇工作表中的E列單元格時(shí)將自動(dòng)展開數(shù)據(jù)有效性的下拉列表,
▲13 單元格中的公式 013-1 在單元格中寫入公式 使用Range對(duì)象的Formula屬性可以在單元格區(qū)域中寫入公式,如下面的代碼所示。 Sub rngFormula() Sheet1.Range('C1:C10').Formula= '=SUM(A1+B1)' End Sub 代碼解析: 應(yīng)用于Range對(duì)象的Formula屬性返回或設(shè)置A1樣式表示的Range對(duì)象的公式,語(yǔ)法如下: expression.Formula 參數(shù)expression是必需的,返回一個(gè)Range對(duì)象。 還可以使用FormulaR1C1屬性返回或設(shè)置以R1C1-樣式符號(hào)表示的公式,如下面的代碼所示。 Sub rngFormulaRC() Sheet2.Range('C1:C10').FormulaR1C1 = '=SUM(RC[-2]+RC[-1])' End Sub如果需要在單元格中寫入數(shù)組公式則使用Range對(duì)象的FormulaArray屬性。如下面的代碼所示。 Sub RngFormulaArray() Sheet3.Range('C1').FormulaArray= '=A1:A2*B1:B2' End SubRange對(duì)象的FormulaArray屬性返回或設(shè)置單元格區(qū)域的數(shù)組公式。 013-2 檢查單元格是否含有公式 使用單元格的HasFormula屬性檢查單元格是否含有公式,如下面的代碼所示。 Private Sub CommandButton1_Click() SelectCase Selection.HasFormula Case True MsgBox '公式單元格!' Case False MsgBox '非公式單元格!' Case Else MsgBox '公式區(qū)域:' & Selection.SpecialCells(xlCellTypeFormulas,23).Address(0,0) EndSelect End Sub 代碼解析: 工作表中按鈕的單擊過程,檢查所選擇的單元格區(qū)域是否含有公式。 第2行代碼返回所選擇單元格區(qū)域的HasFormula屬性值。如果區(qū)域中所有單元格均包含公式,則該值為True;如果所有單元格均不包含公式,則該值為False。 第3、4行代碼,如果返回True,說明區(qū)域中所有單元格均包含公式。 第5、6行代碼,如果返回False,說明區(qū)域中所有單元格均不包含公式。 第7、8行代碼,如果是混合區(qū)域,則顯示包含公式的單元格地址。 013-3 判斷單元格公式是否存在錯(cuò)誤 當(dāng)需要獲取的單元格的值由公式返回時(shí),公式返回的結(jié)果可能是一個(gè)錯(cuò)誤文本,包含#NULL!、#DIV/0!、#VALUE!、#REF!、#NAME?、#NUM!、#N/A等。此時(shí),當(dāng)單元格公式返回結(jié)果為錯(cuò)誤文本時(shí),如果試圖通過Value屬性來獲得公式的返回結(jié)果,將得到類型不匹配的錯(cuò)誤信息。 通過Range對(duì)象的Value屬性的返回結(jié)果是否為錯(cuò)誤類型,來判斷公式是否存在錯(cuò)誤,如下面的代碼所示。 Sub FormulaIsError() If VBA.IsError(Range('A1').Value)= True Then MsgBox 'A1單元格錯(cuò)誤類型為:' & Range('A1').Text Else MsgBox 'A1單元格公式結(jié)果為' & Range('A1').Value EndIf End Sub 代碼解析: FormulaIsError過程代碼判斷單元格A1中公式結(jié)果是否為錯(cuò)誤,如果為錯(cuò)誤則顯示該錯(cuò)誤類型,否則顯示公式的結(jié)果。 第2行代碼使用IsError函數(shù)返回Boolean值,指出表達(dá)式是否為一個(gè)錯(cuò)誤值,如果表達(dá)式表示一個(gè)錯(cuò)誤,則IsError函數(shù)返回True,否則返回False。 013-4 取得單元格中公式的引用單元格 如果需要取得單元格中公式的引用單元格對(duì)象,可以使用Range對(duì)象的Precedents屬性,如下面的代碼所示。 Sub RngPrecedent() Dimrng As Range Setrng = Sheet1.Range('C1').Precedents MsgBox'公式所引用的單元格有:' & rng.Address Setrng = Nothing End Sub 代碼解析: 在工作表的C1單元格中寫有公式“SUM(“A1:B1”)”,RngPrecedent過程使用Range對(duì)象的Precedents屬性取得其引用的單元格A1:B1。 Precedents屬性返回一個(gè)Range對(duì)象,該對(duì)象代表單元格的所有引用單元格。如果有若干引用單元格,那么該區(qū)域可能是多個(gè)的選定區(qū)域(Range 對(duì)象的聯(lián)合)。 013-5 將單元格中的公式轉(zhuǎn)換為數(shù)值 工作表中如果存在過多的公式將影響操作速度,將單元格中的函數(shù)與公式的結(jié)果轉(zhuǎn)換為數(shù)值,可以提高工作表運(yùn)算效率,有下面幾種方法可以實(shí)現(xiàn)。 使用選擇性粘貼的方法可以將函數(shù)與公式的結(jié)果轉(zhuǎn)換為數(shù)值,如下面的代碼所示。 Sub SpecialPaste() WithRange('A1:A10') .Copy .PasteSpecial Paste:=xlPasteValues EndWith Application.CutCopyMode= False End Sub 代碼解析: SpecialPaste過程使用選擇性粘貼方法將單元格區(qū)域的公式轉(zhuǎn)換為數(shù)值。 第3行代碼將單元格區(qū)域復(fù)制到剪貼板中。 應(yīng)用于Range對(duì)象的Copy方法將單元格區(qū)域復(fù)制到指定的區(qū)域或剪貼板中,語(yǔ)法如下: expression.Copy(Destination)參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對(duì)象。 參數(shù)Destination是可選的,指定區(qū)域要復(fù)制到的目標(biāo)區(qū)域。如果省略該參數(shù),Microsoft Excel 將把該區(qū)域復(fù)制到剪貼板中。 第4行代碼將剪貼板中的Range對(duì)象僅復(fù)制值到單元格區(qū)域中。 應(yīng)用于Range對(duì)象的PasteSpecial方法將剪貼板中的Range對(duì)象粘貼到指定區(qū)域中,語(yǔ)法如下: expression.PasteSpecial(Paste,Operation,SkipBlanks,Transpose) 參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對(duì)象。 參數(shù)Paste是可選的,指定要粘貼的區(qū)域部分。在本例中設(shè)置為xlPasteValues,僅復(fù)制值到單元格區(qū)域中。使用Value屬性可以將函數(shù)與公式的結(jié)果轉(zhuǎn)換為數(shù)值,如下面的代碼所示。 Sub UseValue() Range('A1:A10').Value= Range('A1:A10').Value End Sub 代碼解析: UseValue過程使用Value屬性將函數(shù)與公式的結(jié)果轉(zhuǎn)換為數(shù)值。使用Formula屬性可以將函數(shù)與公式的結(jié)果轉(zhuǎn)換為數(shù)值,如下面的代碼所示。 Sub UseFormula() Range('A1').Formula= Range('A1').Value End Sub 代碼解析: UseFormula過程Formula屬性將函數(shù)與公式的結(jié)果轉(zhuǎn)換為數(shù)值。當(dāng)Formula屬性值為非公式時(shí),返回的結(jié)果與Value屬性一致。
▲14 單元格中的批注 014-1 判斷單元格是否存在批注 在VBA中,可以利用Range對(duì)象的Comment屬性判斷單元格是否存在批注,如下面的代碼所示。 Sub HasComment() If Range('A1').CommentIs Nothing Then MsgBox 'A1單元格中沒有批注!' Else MsgBox 'A1單元格中批注內(nèi)容為:' & Chr(13) & Range('A1').Comment.Text EndIf End Sub 代碼解析: HasComment過程判斷A1單元格是否存在批注,并用消息框顯示批注信息。 Range對(duì)象的Comment屬性返回一個(gè)批注對(duì)象,如果指定的單元格不存在批注,該屬性返回Nothing。 運(yùn)行HasComment過程結(jié)果。 014-2 為單元格添加批注 如果希望為單元格添加批注,那么可以使用AddComment方法,如下面的代碼所示。 Sub Comment_Add() WithRange('A1') If .Comment Is Nothing Then .AddComment Text:=.Value .Comment.Visible = True End If EndWith End Sub 代碼解析: Comment_Add判斷單元格A1中是否存在批注,如果沒有批注則為單元格A1添加批注并將單元格數(shù)值作為批注文本,同時(shí)顯示批注對(duì)象。 第4行代碼使用Range對(duì)象的AddComment方法為單元格添加批注。該方法只有一個(gè)參數(shù)Text,代表批注文本。如果單元格已經(jīng)存在批注,則該方法返回一個(gè)錯(cuò)誤。 第5行代碼顯示批注對(duì)象,Visible屬性確定對(duì)象是否可視。 當(dāng)單元格A1中不存在批注時(shí),運(yùn)行代碼后的結(jié)果。 014-3 刪除單元格中的批注 如果需要?jiǎng)h除單元格中的批注,那么可以使用ClearComments方法、ClearNotes方法或者Delete方法,如下面的代碼所示。 Sub Commentdel() On ErrorResume Next Range('A1').ClearComments Range('A2').ClearNotes Range('A3').Comment.Delete End Sub格中的批注。 第2行代碼錯(cuò)誤處理語(yǔ)句,如果單元格中沒有批注,那么運(yùn)行第5行代碼時(shí)會(huì)發(fā)生錯(cuò)誤,所以使用On Error語(yǔ)句來忽略錯(cuò)誤。 第3行代碼使用ClearComments方法刪除單元格A1中的批注。ClearComments方法清除指定區(qū)域的所有單元格批注,語(yǔ)法如下: expression.ClearComments 第4行代碼使用ClearNotes方法刪除A2單元格中的批注。ClearNotes方法清除指定區(qū)域中所有單元格的附注和語(yǔ)音批注,語(yǔ)法如下: expression.ClearNotes 第5行代碼使用Delete方法刪除刪除A3單元格中的批注.Range對(duì)象的Comment屬性返回一個(gè)Comment對(duì)象,該對(duì)象代表與該區(qū)域左上角單元格相關(guān)聯(lián)的批注。
▲15 合并單元格操作 015-1 判斷單元格區(qū)域是否存在合并單元格 Range對(duì)象的MergeCells屬性可以確定單元格區(qū)域是否包含合并單元格,如果該屬性返回值為True,則表示區(qū)域包含合并單元格。 下面的代碼判斷單元格 A1是否包含合并單元格,并顯示相應(yīng)的提示信息。 Sub IsMergeCell() If Range('A1').MergeCells= True Then MsgBox '包含合并單元格' Else MsgBox '沒有包含合并單元格' EndIf End Sub 如果在指定區(qū)域中存在部分合并的單元格,比如工作表區(qū)域E8:I17中包含合并單元格區(qū)域F8:G9,H12:I13。 判斷這樣一個(gè)單元格區(qū)域中是否包含合并單元格,可以使用下面的代碼快速判斷單元格區(qū)域中是否包含部分合并單元格,而不需要遍歷單元格。 Sub IsMerge() If IsNull(Range('E8:I17').MergeCells)Then MsgBox '包含合并單元格' Else MsgBox '沒有包含合并單元格' EndIf End Sub 代碼解析: 當(dāng)單元格區(qū)域中同時(shí)包含合并單元格和非合并單元格時(shí),MergeCells屬性將返回Null,因此第2行代碼通過該返回結(jié)果作為判斷條件。 015-2 合并單元格時(shí)連接每個(gè)單元格的文本 使用Excel的“合并及居中”按鈕合并多個(gè)單元格區(qū)域時(shí),Excel僅保留區(qū)域左上角單元格的內(nèi)容,如果用戶希望在合并單元格區(qū)域時(shí),將各個(gè)單元格的內(nèi)容連接起來保存在合并后的單元格區(qū)域中,則可以使用下面的代碼。 Sub Mergerng() DimStrMerge As String Dimrng As Range If TypeName(Selection)= 'Range' Then For Each rng In Selection StrMerge = StrMerge & rng.Value Next Application.DisplayAlerts = False Selection.Merge Selection.Value = StrMerge Application.DisplayAlerts = True EndIf End Sub 代碼解析: Mergerng過程將所選各個(gè)單元格的內(nèi)容連接起來保存在合并后的單元格區(qū)域中。 第4行代碼使用TypeName函數(shù)判斷當(dāng)前選定對(duì)象是否為Range對(duì)象,若是則繼續(xù)執(zhí)行代碼。 第5行到第7行代碼將當(dāng)前選中區(qū)域的內(nèi)容連接起來保存在字符串變量StrMerge中。 第8行代碼將DisplayAlerts屬性設(shè)置為False,禁止在合并多重?cái)?shù)值區(qū)域時(shí),Excel顯示的警告信息,避免中斷代碼的運(yùn)行。 第9行代碼使用Merge方法合并當(dāng)前選定區(qū)域。應(yīng)用于Range對(duì)象的Merge方法通過指定Range對(duì)象創(chuàng)建合并單元格,語(yǔ)法如下: expression.Merge(Across) 參數(shù)expression是必需的,返回一個(gè)Range對(duì)象。 參數(shù)Across是可選的,如果該值為True,則將指定區(qū)域內(nèi)的每一行合并為一個(gè)合并單元格。默認(rèn)值為False。 第9行也可以使用下面的代碼: Selection.MergeCells= True 第10行代碼將變量StrMerge的值賦給合并后的單元格。 015-3 合并內(nèi)容相同的連續(xù)單元格 如果需要合并工作表中B列中部門相同的連續(xù)單元格,可以使用下面的代碼。 Sub Mergerng() DimIntRow As Integer Dimi As Integer Application.DisplayAlerts= False WithSheet1 IntRow = .Range('A65536').End(xlUp).Row For i = IntRow To 2 Step -1 If .Cells(i,2).Value = .Cells(i - 1,2).Value Then .Range(.Cells(i - 1,2),.Cells(i,2)).Merge End If Next EndWith Application.DisplayAlerts= True End Sub 代碼解析: 第7行到第11行代碼,從最后一行開始,向上逐個(gè)單元格判斷連續(xù)兩個(gè)單元格的內(nèi)容是否相同,如果相同則合并。 015-4 取消合并單元格時(shí)在每個(gè)單元格中保留內(nèi)容 如果需要取消▲15-3中工作表B列“部門”的合并單元格,并且各個(gè)單元格均保留原合并單元格的內(nèi)容,可以使用下面的代碼。 Sub UnMerge() DimStrMer As String DimIntCot As Integer Dimi As Integer WithSheet1 For i = 2 To .Range('B65536').End(xlUp).Row StrMer = .Cells(i,2).Value IntCot = .Cells(i,2).MergeArea.Count .Cells(i,2).UnMerge .Range(.Cells(i,2),.Cells(i + IntCot - 1,2)).Value = StrMer i = i + IntCot - 1 Next EndWith End Sub 代碼解析: UnMerge過程取消工作表中B列中的合并單元格,并且各個(gè)單元格均保留原合并單元格的內(nèi)容。 第7行代碼取得B列每個(gè)合并單元格的內(nèi)容。 第8行代碼取得合并區(qū)域的單元格數(shù)量。 第9行代碼使用UnMerge方法取消合并單元格。UnMerge方法將合并區(qū)域分解為獨(dú)立的單元格,語(yǔ)法如下: expression.UnMerge 第10行代碼將原合并單元格的內(nèi)容賦值給取消合并單元格后的區(qū)域。 第11行代碼調(diào)整循環(huán)變量i的值,使下一次循環(huán)從下一個(gè)單元格區(qū)域開始。 |
|