【问题标题】:Word Macro: How exclude total row in table sort & Get rid of Error 5992Word 宏:如何在表格排序中排除总行并摆脱错误 5992
【发布时间】:2019-07-16 02:15:20
【问题描述】:

我正在使用宏对包含多个表格的 Word 文件中的表格进行排序,效果很好,但也对总行进行了可悲的排序,所有表格都有不同的行数,排序前后的表格是:

表格示例预排序:

后排序:

宏是:(感谢@scenography)

Dim mytable As Table
For Each mytable In ActiveDocument.Tables
mytable.Sort ExcludeHeader:=True, FieldNumber:="Column 2", _
    SortFieldType:=wdSortFieldAlphanumeric,      SortOrder:=wdSortOrderDescending
Next

有什么方法可以做到这一点?

编辑:

这条线可以避免最后一行(总计)吗?示例:

 Dim last_row As Long last_row = Cells.Find(What:="*", SearchDirection:=xlPrevious).Row ) 

 lLastRow = rng(rng.Rows.Count, 1).Row

它可能删除最后一列(Cum),因为当排序这个值时它不正确。

这里是一个 Word 文档的链接,其中包含我的表格示例以复制结果

https://drive.google.com/file/d/1KpV11dHjON_gFnlAvlegzc3pWVfYipV4/view?usp=sharing

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    很遗憾,您不能从 Sort 中排除最后一行,但如果始终是总行,此解决方法将有效。

    For i = 1 To ActiveDocument.Tables.Count
    
    Set mytable = ActiveDocument.Tables(i)
    
    mytable.Rows(mytable.Rows.Count).Delete
    
    mytable.Sort ExcludeHeader:=True, FieldNumber:="Column 2", _
        SortFieldType:=wdSortFieldNumeric, SortOrder:=wdSortOrderDescending
    
    mytable.Rows(2).Range.Copy
    mytable.Rows.Add
    mytable.Rows(mytable.Rows.Count).Range.Paste
    mytable.Rows(2).Delete
    
    mytable.Cell(1, mytable.Columns.Count).Select
    Selection.SelectColumn
    Selection.Cells.Delete ShiftCells:=wdDeleteCellsShiftLeft
    
    Next
    

    基本上我们在排序后将第二行移到最后一行。

    表格如下:

    【讨论】:

    • 是的,在答案中添加了额外的行。如果它适合你,请接受答案:) @RODRIGO
    • 给出错误,只删除最后一列的第一个值并停止宏
    • 不明白你到底想要什么。在问题中发布屏幕截图。
    • 我附上一些删除列的表格示例
    • 这一行将删除最后一列mytable.Columns(mytable.Columns.Count).Delete,错误是什么? @罗德里戈
    猜你喜欢
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2011-11-04
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2019-01-25
    相关资源
    最近更新 更多