小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VBA常用代碼解析(第二講)

 wdmexcel 2015-08-04

正文開始前,先插播一條廣告:復(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,xlMedium5

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(LineStyleWeight,ColorIndexColor)

其中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.BorderAroundxlContinuousxlMedium,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è)置單元格的行高列寬。

34行代碼使用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,23,4,5,67,8'

EndWith

End Sub

代碼解析:

Validation過程使用Add方法在A1A10單元格中建立數(shù)據(jù)有效性。

3行代碼刪除已建立的數(shù)據(jù)有效性,防止代碼運(yùn)行出錯(cuò)。

4行到第7行代碼使用Add方法建立數(shù)據(jù)有效性。應(yīng)用于Validation對(duì)象的Add方法的語(yǔ)法如下:

expression.Add(TypeAlertStyle,OperatorFormula1,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)OperatorxlBetweenxlNotBetween時(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,Z386Z486,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(KeysWait)

參數(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(00)

EndSelect

End Sub

代碼解析:

工作表中按鈕的單擊過程,檢查所選擇的單元格區(qū)域是否含有公式。

2行代碼返回所選擇單元格區(qū)域的HasFormula屬性值。如果區(qū)域中所有單元格均包含公式,則該值為True;如果所有單元格均不包含公式,則該值為False。

34行代碼,如果返回True,說明區(qū)域中所有單元格均包含公式。

56行代碼,如果返回False,說明區(qū)域中所有單元格均不包含公式。

78行代碼,如果是混合區(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:G9H12: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 - 12).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(i2).Value

IntCot = .Cells(i,2).MergeArea.Count

.Cells(i2).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ū)域開始。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多