一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Word表格之VBA知識(shí)

 gblhp 2015-03-31

Table 對(duì)象(因?yàn)槭菍?duì)象,所以用Set賦值)

該對(duì)象代表一個(gè)單獨(dú)的表格。Table 對(duì)象是Tables集合的一個(gè)成員。Tables集合包含了指定的選定內(nèi)容、范圍文檔中的所有表格。

下面是Table的常用方法(注意是部分,不是全部,只例出重要的方法,下面的屬性皆如此,如果詳細(xì)面全部的了解,請(qǐng)看Word VBA自帶的幫助。VBAWD10.chm

使用Table對(duì)象

可使用 Tables(index) 返回一個(gè) Table 對(duì)象,其中 index 為索引號(hào)。索引號(hào)代表選定內(nèi)容、范圍或文檔中表格的位置。下例將活動(dòng)文檔中的第一個(gè)表格轉(zhuǎn)換為文本。

ActiveDocument.Tables(1).ConvertToText Separator:=wdSeparateByTabs

使用Add方法可以在指定范圍內(nèi)新增一表格。下例在活動(dòng)文檔的起始處添加一 3 x 4 表格。

Set myRange = ActiveDocument.Range(Start:=0, End:=0)

ActiveDocument.Tables.Add Range:=myRange, NumRows:=3, NumColumns:=4

Cell 方法

返回一個(gè) Cell 對(duì)象,該對(duì)象代表表格中的一個(gè)單元格。

expression.Cell(Row, Column)

expression      必需。該表達(dá)式返回一個(gè)Table對(duì)象。

Row   Long 類型,必需。指返回的表格行數(shù)??梢允墙橛?/SPAN> 1 和表格行數(shù)之間的任意整數(shù)。

Column    Long 類型,必需。指返回的表格單元格數(shù)目??梢允墙橛?/SPAN> 1 和表格列數(shù)之間的任意整數(shù)。

示例

本示例在新文檔中創(chuàng)建一個(gè) 33 表格,并在表格的第一個(gè)和最后一個(gè)單元格中插入文本。

Dim docNew As Document

Dim tableNew As Table

Set docNew = Documents.Add

Set tableNew = docNew.Tables.Add(Selection.Range, 3, 3)

With tableNew

    .Cell(1,1).Range.InsertAfter "First cell"

    .Cell(tableNew.Rows.Count, _

        tableNew.Columns.Count).Range.InsertAfter "Last Cell"

End With

本示例刪除活動(dòng)文檔的第一個(gè)表格中的第一個(gè)單元格的內(nèi)容。

If ActiveDocument.Tables.Count >= 1 Then

    ActiveDocument.Tables(1).Cell(1, 1).Delete

End If

Split 方法

在表格中緊靠指定行的上面插入一空段落,并且返回一個(gè) Table 對(duì)象,此對(duì)象包含指定行及其下一行。(簡(jiǎn)單的的理解:就是指向拆分后的下面的表格,不清楚也沒(méi)關(guān)系,看下面的。)

expression.Split(BeforeRow)

expression      必需。該表達(dá)式返回一個(gè) Table 對(duì)象。

BeforeRow     Variant 類型,必需。將要拆分的表格的前一行??梢詾?/SPAN> Row 對(duì)象或行號(hào)。

本示例在活動(dòng)文檔(應(yīng)試是新建文檔)中創(chuàng)建一張 5x5 的表格,并且在第三行之前進(jìn)行拆分。然后為結(jié)果表格(新的 3x5 表格)的單元格添加底紋。

Set newDoc = Documents.Add

Set myTable = ActiveDocument.Tables.Add(Range:=Selection.Range, _

    NumColumns:=5, NumRows:=5)

myTable.Split(BeforeRow:=myTable.Rows(3)).Shading _

    .Texture = wdTexture10Percent

Table屬性

Range 屬性

本示例復(fù)制表格 1 中的首行。

 

If ActiveDocument.Tables.Count >= 1 Then _

    ActiveDocument.Tables(1).Rows(1).Range.Copy

End if

Borders 屬性

該屬性返回一個(gè) Borders 集合,該集合代表指定對(duì)象的所有邊框。

expression.Borders

expression      必需。該表達(dá)式返回“應(yīng)用于”列表中的一個(gè)對(duì)象。

示例

本示例對(duì)活動(dòng)文檔中的第一個(gè)表格應(yīng)用內(nèi)部和外部邊框。

Set myTable = ActiveDocument.Tables(1)

With myTable.Borders

    .InsideLineStyle = wdLineStyleSingle

    .OutsideLineStyle = wdLineStyleDouble

End With

Columns 屬性

返回一個(gè) Columns 集合,該集合代表在某一區(qū)域、所選內(nèi)容或表格中所有表格列。只讀。

示例

本示例顯示活動(dòng)文檔的第一個(gè)表格中的列數(shù)。

If ActiveDocument.Tables.Count >= 1 Then

    MsgBox ActiveDocument.Tables(1).Columns.Count

End If

本示例將當(dāng)前列的寬度設(shè)置為 1 英寸。

If Selection.Information(wdWithInTable) = True Then

    Selection.Columns.SetWidth ColumnWidth:=InchesToPoints(1), _

        RulerStyle:=wdAdjustProportional

End If

Rows 屬性

該屬性返回一個(gè) Rows 集合,該集合代表某個(gè)范圍、所選部分或表格中所有的表格行。只讀。

本示例刪除活動(dòng)文檔第一個(gè)表格的第二行。

ActiveDocument.Tables(1).Rows(2).Delete

本示例為插入點(diǎn)所在行的各單元格設(shè)置邊框。

Selection.Collapse Direction:=wdCollapseStart

If Selection.Information(wdWithInTable) = True Then

    Selection.Rows(1).Borders.OutsideLineStyle =  wdLineStyleSingle

Else

    MsgBox "The insertion point is not in a table."

End If

Column 對(duì)象

代表單個(gè)表格列。Column 對(duì)象是 Columns 集合的一個(gè)元素。Columns 集合包括某一表格、選定內(nèi)容或區(qū)域中的所有列。

使用 Column 對(duì)象

使用 Columns(index) 可返回單獨(dú)的 Column 對(duì)象,其中 index 為索引序號(hào)。索引序號(hào)代表該列在 Columns 集合中的位置(從左至右計(jì)算)。

下列示例選定活動(dòng)文檔中的表格 1 的第一列。

ActiveDocument.Tables(1).Columns(1).Select

Cell 對(duì)象的 Column 屬性可返回一個(gè) Column 對(duì)象。下列示例刪除單元格 1 中的文字,插入新文字,然后對(duì)該列進(jìn)行排序。

With ActiveDocument.Tables(1).Cell(1, 1)

    .Range.Delete

    .Range.InsertBefore "Sales"

    .Column.Sort

End With

Add 方法可在表格中添加一列。下列示例為活動(dòng)文檔的第一張表格中添加一列,然后將列寬設(shè)置為相等。

If ActiveDocument.Tables.Count >= 1 Then

    Set myTable = ActiveDocument.Tables(1)

    myTable.Columns.Add BeforeColumn:=myTable.Columns(1)

    myTable.Columns.DistributeWidth

End If

說(shuō)明

Selection 對(duì)象的 Information 屬性可返回當(dāng)前列號(hào)。下列示例選定當(dāng)前列并在消息框中顯示其列號(hào)。

If Selection.Information(wdWithInTable) = True Then

    Selection.Columns(1).Select

    MsgBox "Column " _

        & Selection.Information(wdStartOfRangeColumnNumber)

End If

Cell 對(duì)象

代表單個(gè)表格單元格。Cell 對(duì)象是 Cells 集合中的元素。Cells 集合代表指定對(duì)象中所有的單元格。

使用 Cell 對(duì)象

Cell(row, column) Cells(index)可返回 Cell 對(duì)象,其中 row 為行號(hào),column 為列號(hào),index 為索引序號(hào)。下列示例給第一行的第二個(gè)單元格加底紋。

Set myCell = ActiveDocument.Tables(1).Cell(Row:=1, Column:=2)

myCell.Shading.Texture = wdTexture20Percent

下列示例給第一行的第一個(gè)單元格加底紋。

ActiveDocument.Tables(1).Rows(1).Cells(1).Shading _

    .Texture = wdTexture20Percent

Add 方法可在 Cells 集合中添加 Cell 對(duì)象。也可用 Selection 對(duì)象的 InsertCells 方法插入新單元格。下列示例在 myTable 的第一個(gè)單元格之前插入一個(gè)單元格。

Set myTable = ActiveDocument.Tables(1)

myTable.Range.Cells.Add BeforeCell:=myTable.Cell(1, 1)

本示例將第一個(gè)表格的頭兩個(gè)單元格設(shè)定為一個(gè)域 (myRange)。區(qū)域設(shè)定之后,用 Merge 方法合并兩個(gè)單元格。

Set myTable = ActiveDocument.Tables(1)

Set myRange = ActiveDocument.Range(myTable.Cell(1, 1) _

    .Range.Start, myTable.Cell(1, 2).Range.End)

myRange.Cells.Merge

說(shuō)明

使用帶 Rows Columns 集合的 Add 方法添加一行或一列單元格。

使用 Selection 對(duì)象的 Information 屬性返回當(dāng)前行號(hào)和列號(hào)。下面的示例改變選中部分第一個(gè)單元格的寬度,再顯示單元格的行號(hào)和列號(hào)。

If Selection.Information(wdWithInTable) = True Then

    With Selection

        .Cells(1).Width = 22

        MsgBox "Cell " & .Information(wdStartOfRangeRowNumber) _

            & "," & .Information(wdStartOfRangeColumnNumber)

    End With

End If

Row 對(duì)象

代表表格的一行。Row 對(duì)象是 Rows 集合中的一個(gè)元素。Rows 集合包括指定部分、區(qū)域或表格中的所有行。

使用 Row 對(duì)象

Rows(index) 可返回單獨(dú)的 Row 對(duì)象,其中 index 為索引序號(hào)。索引序號(hào)代表該行在選定部分、區(qū)域或表格中的位置。下列示例刪除活動(dòng)文檔中第一張表格的首行。

ActiveDocument.Tables(1).Rows(1).Delete

Add 方法可在表格中添加行。下列示例在選定部分首行前插入一行。

If Selection.Information(wdWithInTable) = True Then

    Selection.Rows.Add BeforeRow:=Selection.Rows(1)

End If

說(shuō)明

Cells 屬性可修改 Row 對(duì)象中的單個(gè)單元格。下列示例在選定部分中添加一張表格,并在表格第二行的各單元格內(nèi)插入數(shù)字。

Selection.Collapse Direction:=wdCollapseEnd

If Selection.Information(wdWithInTable) = False Then

    Set myTable = _

        ActiveDocument.Tables.Add(Range:=Selection.Range, _

        NumRows:=3, NumColumns:=5)

    For Each aCell In myTable.Rows(2).Cells

        i = i + 1

        aCell.Range.Text = i

    Next aCell

End If

訪問(wèn)表格行或列時(shí)產(chǎn)生的錯(cuò)誤

如果要訪問(wèn)繪制表格中單獨(dú)的行或列,而該表格又不統(tǒng)一,則會(huì)產(chǎn)生一個(gè)運(yùn)行時(shí)錯(cuò)誤。例如,如果活動(dòng)文檔中第一張表格的每列中具有不同數(shù)量的行,則使用下列指令將導(dǎo)致出錯(cuò)。

Sub RemoveTableBorders()

    ActiveDocument.Tables(1).Rows(1).Borders.Enable = False

End Sub

要避免這種錯(cuò)誤,可首先使用 SelectColumn SelectRow 方法選定一列或一行中的單元格。選定單元格后,再使用 Selection 對(duì)象的 Cells 屬性。下列示例選定第一張文檔表格中的第一行。Cells 屬性用于訪問(wèn)選定的單元格(第一行中的所有單元格)以刪除邊框。

Sub RemoveTableBorders()

    ActiveDocument.Tables(1).Cell(1, 1).Select

    With Selection

        .SelectRow

        .Cells.Borders.Enable = False

    End With

End Sub

下列示例選定第一張文檔表格的第一列。For Each...Next 循環(huán)語(yǔ)句用于在所選內(nèi)容(第一列中的所有單元格)的每個(gè)單元格中添加文字。

Sub AddTextToTableCells()

    Dim intCell As Integer

    Dim oCell As Cell

    ActiveDocument.Tables(1).Cell(1, 1).Select

    Selection.SelectColumn

    intCell = 1

    For Each oCell In Selection.Cells

        oCell.Range.Text = "Cell " & intCell

        intCell = intCell + 1

    Next oCell

End Sub

處理表格

創(chuàng)建一張表格,插入文字,并應(yīng)用格式

下列示例在活動(dòng)文檔的開(kāi)頭插入一張 4 3 行的表格。For Each...Next 結(jié)構(gòu)用于循環(huán)遍歷表格中的每個(gè)單元格。在 For Each...Next 結(jié)構(gòu)中,InsertAfter 方法用于將文字添至表格單元格(單元格 1、單元格 2、以此類推)。

Sub CreateNewTable()

    Dim docActive As Document

    Dim tblNew As Table

    Dim celTable As Cell

    Dim intCount As Integer

    Set docActive = ActiveDocument

    Set tblNew = docActive.Tables.Add( _

        Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _

        NumColumns:=4)

    intCount = 1

    For Each celTable In tblNew.Range.Cells

        celTable.Range.InsertAfter "Cell " & intCount

        intCount = intCount + 1

    Next celTable

    tblNew.AutoFormat Format:=wdTableFormatColorful2, _

        ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True

End Sub

在表格單元格中插入文字

下列示例在活動(dòng)文檔中第一張表格的第一個(gè)單元格中插入文字。Cell 方法返回單獨(dú)的 Cell 對(duì)象。Range 屬性返回一個(gè) Range 對(duì)象。Delete 方法用于刪除現(xiàn)有的文字,而 InsertAfter 方法用于插入文字“Cell 1,1。

Sub InsertTextInCell()

    If ActiveDocument.Tables.Count >= 1 Then

        With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range

            .Delete

            .InsertAfter Text:="Cell 1,1"

           ' .text="cell 1,1" 上面兩行,可以用這一行表示。

        End With

    End If

End Sub

返回表格單元格中的文字,不包括表格結(jié)束單元格標(biāo)記

下列示例返回并顯示文檔中第一張表格的第一行中每個(gè)單元格的內(nèi)容。

Sub ReturnTableText()

    Dim tblOne As Table

    Dim celTable As Cell

    Dim rngTable As Range

    Set tblOne = ActiveDocument.Tables(1)

    For Each celTable In tblOne.Rows(1).Cells

        Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _

            End:=celTable.Range.End - 1)         '注意這里用了-1

        MsgBox rngTable.Text

    Next celTable

End Sub

 

Sub ReturnCellText()

    Dim tblOne As Table

    Dim celTable As Cell

    Dim rngTable As Range

    Set tblOne = ActiveDocument.Tables(1)

    For Each celTable In tblOne.Rows(1).Cells

        Set rngTable = celTable.Range

        rngTable.MoveEnd Unit:=wdCharacter, Count:=-1

        MsgBox rngTable.Text

    Next celTable

End Sub

 

將文本轉(zhuǎn)換為表格

下列示例在活動(dòng)文檔的開(kāi)頭插入用制表符分隔的文本,然后將這些文本轉(zhuǎn)換為表格。

Sub ConvertExistingText()

    With Documents.Add.Content

        .InsertBefore "one" & vbTab & "two" & vbTab & "three" & vbCr

        .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3

    End With

End Sub

 

返回每個(gè)表格單元格的內(nèi)容

下列示例定義一個(gè)數(shù)組,該數(shù)組的元素個(gè)數(shù)等于文檔中第一張表格(假定為 Option Base 1)中的單元格數(shù)。For Each...Next 結(jié)構(gòu)用于返回每個(gè)表格單元格的內(nèi)容,并將文字指定給相應(yīng)的數(shù)組元素。

Sub ReturnCellContentsToArray()

    Dim intCells As Integer

    Dim celTable As Cell

    Dim strCells() As String

    Dim intCount As Integer

    Dim rngText As Range

    If ActiveDocument.Tables.Count >= 1 Then

        With ActiveDocument.Tables(1).Range

            intCells = .Cells.Count

            ReDim strCells(intCells)

            intCount = 1

            For Each celTable In .Cells

                Set rngText = celTable.Range

                rngText.MoveEnd Unit:=wdCharacter, Count:=-1

                strCells(intCount) = rngText

                intCount = intCount + 1

            Next celTable

        End With

    End If

End Sub

(測(cè)試環(huán)境.docVBA中有更好的方法,可以參考)

將活動(dòng)文檔中的所有表格復(fù)制到新文檔中

本示例將當(dāng)前文檔中的表格復(fù)制到新文檔中。

Sub CopyTablesToNewDoc()

    Dim docOld As Document

    Dim rngDoc As Range

    Dim tblDoc As Table

    If ActiveDocument.Tables.Count >= 1 Then

        Set docOld = ActiveDocument

        Set rngDoc = Documents.Add.Range(Start:=0, End:=0)

        For Each tblDoc In docOld.Tables

            tblDoc.Range.Copy

            With rngDoc

                .Paste

                .Collapse Direction:=wdCollapseEnd

                .InsertParagraphAfter

                .Collapse Direction:=wdCollapseEnd

            End With

        Next

    End If

End Sub

 

以下為我對(duì)表格的認(rèn)識(shí):(陋見(jiàn))

在“測(cè)試環(huán)境.doc”中有不少的例子(在VBA中),也有解釋,

兩個(gè)文檔花了我8小時(shí)以上(即一個(gè)工作日以上)

關(guān)于表格在VBA中的相關(guān)說(shuō)明:

1.         如下圖,類似于回車 VBA中也是chr(13),豎線就是chr(7),怎么知道的?

2.         當(dāng)然是看老大們知道的。不過(guò)。在“測(cè)試環(huán)境.doc”中有相關(guān)的宏能得到這些數(shù)字。這也是授之以漁吧。

3.         重點(diǎn)推薦“測(cè)試環(huán)境.doc的相關(guān)代碼用了我不少功夫,慢慢體會(huì)。不懂的可以提出來(lái)。

Ch(13)

Ch(7)

4.         因?yàn)?/SPAN>chr(13)為段落標(biāo)記,所以在VBA中,ActiveDocument.Paragraphs.Count測(cè)得的段落數(shù)與工具、字?jǐn)?shù)統(tǒng)計(jì)是不一樣的。

5.         如果這樣統(tǒng)計(jì):表格中單元格中類似的 且不為空就為一個(gè)段落,否則不算。這就與工工具、字?jǐn)?shù)統(tǒng)計(jì)的段落數(shù)一樣了。

6.         如果要新建一個(gè)表格,再添加一些字符(包括數(shù)字)的話,更好的方法是:先字符寫入文檔中(當(dāng)然,要加一些標(biāo)記,以便確定單元格),再利用Word的表格、轉(zhuǎn)換、文字轉(zhuǎn)換為表格。這樣,速度快一些。有以下的代碼為證。

Sub 表格5()

'先放到文檔,再放入表格

Dim i%, astring As String

Dim adoc As Document

Dim atime As Long

Application.ScreenUpdating = False '關(guān)閉屏幕更新

atime = Timer '設(shè)atime為正前時(shí)間

For i = 1 To 1000

    astring = astring & i & Chr(13)

Next

    Set adoc = Documents.Add

        adoc.Content = astring

        adoc.Range.ConvertToTable Separator:=wdSeparateByParagraphs, NumColumns:=10, _

        NumRows:=100

Application.ScreenUpdating = True

    MsgBox "先放到文檔的運(yùn)行時(shí)間為:" & Timer - atime

    '1.28,1.07,1.03

End Sub

Sub 表格6()

'先生成表格,再向單元格中添數(shù)

Dim i%, astring As String

Dim adoc As Document

Dim atime As Long

Dim atable As Table

Application.ScreenUpdating = False '關(guān)閉屏幕更新

atime = Timer '設(shè)atime為正前時(shí)間

Set adoc = Documents.Add

Set atable = adoc.Tables.Add(Selection.Range, 100, 10)

With atable.Range

    For i = 1 To 1000

        .Cells(i).Range.Text = i

    Next

End With

Application.ScreenUpdating = True

    MsgBox "先放到文檔的運(yùn)行時(shí)間為:" & Timer - atime

    '16.3,15.53,15.35

End Sub

'幾乎是15倍的差別,誰(shuí)快誰(shuí)慢應(yīng)該大家知道了。還順帶說(shuō)一話:有的軟件在操作Word的表格時(shí),就是用類似于“表格6的方法,而且也沒(méi)有用Appplication.ScreenUpdating=true。所以,看上去就像在看動(dòng)畫片。(例如:“青山預(yù)算之星”的“輸出到Word”就是)看來(lái),國(guó)產(chǎn)軟件還需努力。

7.         有些尤意末盡的,大家慢慢在程序中體會(huì)。

8.         特別強(qiáng)調(diào):微軟本身的許多功能,不是一般的VBA的程序,比VBA要快很多,不明白內(nèi)部是用什么語(yǔ)言或什么原理在工作。例如:a.郵件合并,速度奇快。如果你試著用VBA來(lái)做,速度奇慢。b.修訂功能;c.工具、宏、命令listcommands的運(yùn)行速度。
等等,都是我們VBA一族所不能及的。(不過(guò)來(lái),如果我們的VBA與微軟快,微軟不PK我們才怪。呵呵,阿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)論公約

    類似文章 更多

    国产美女精品午夜福利视频 | 九九久久精品久久久精品| 五月综合激情婷婷丁香| 亚洲国产精品av在线观看 | 国产精品一区二区日韩新区| 深夜视频成人在线观看| 麻豆视频传媒入口在线看| 亚洲一区二区精品免费| 亚洲午夜福利不卡片在线| 九九九热在线免费视频| 东京不热免费观看日本| 午夜福利精品视频视频| 中文字幕一区久久综合| 色婷婷在线视频免费播放| 中文字幕日韩一区二区不卡| 欧美自拍偷自拍亚洲精品| 四季av一区二区播放| av一区二区三区天堂| 久久精品亚洲精品一区| 日本女人亚洲国产性高潮视频| 免费黄片视频美女一区| 激情五月综五月综合网| 一区二区三区四区亚洲专区| 亚洲国产色婷婷久久精品 | 亚洲伦理中文字幕在线观看| 国产成人免费高潮激情电| 美女被后入福利在线观看| 日韩精品在线观看完整版| 粉嫩国产美女国产av| 国产内射一级二级三级| 99日韩在线视频精品免费| 亚洲熟妇中文字幕五十路| 亚洲一区二区三区三州| 国产午夜福利在线观看精品| 成人日韩在线播放视频| 日本熟妇五十一区二区三区 | 亚洲综合伊人五月天中文| 草草视频福利在线观看| 熟女少妇久久一区二区三区| 亚洲精品国产主播一区| 中文字幕日韩欧美一区|