![]() |
#1
|
|||
|
|||
![]() Hi, Am having a document contains a table, i want to sort a text by descending order (string length large to small) based on a text in the last column, Please find a attachment for references. Please sort a text by large to small in the same file and saved in a same path and please exclude the table headers first 3 rows. Doc Type : .docx & .rtf. File location is more dynamic and changes every time, it should be as a browse option to select a file from a desired location, it could be more benefited. Please do the needful and your help is highly appreciated. ![]() I want to sort by column no 3 but first 2 rows were not having same columns and getting error "Invalid column number", can anyone alter the below code according to my need. Below code has to exclude the first 2 rows and it should be consider from 3rd row because from third it has a uniformity columns... Below code source : 2 Smart Ways to Sort a Column of Texts by Length in Your Word - Data Recovery Blog Code:
Sub SortByWordLength() Dim objTable As Table Dim objColumnCell As Cell Dim objColumnCellRange As Range Dim objNewColumnCellRange As Range Dim nRowNumber As Integer Dim nColumnNumber As Integer Dim strWordLenth As String Dim nSortOrder As Integer Dim nCurrentTableIndex As Integer Dim nTableColumnsInCurrentTable As Integer nCurrentTableIndex = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count nTableColumns = ActiveDocument.Tables(nCurrentTableIndex).Columns.Count nColumnNumber = InputBox("Enter the column number you want to sort", "Column Number", "For example:2") If nColumnNumber > 0 And nColumnNumber <= nTableColumns Then nSortOrder = InputBox("Choose the sort order:" & vbNewLine & "If you want to sort by descending, click 1" & vbNewLine & "If you want to sort by ascending, click 0", "Sort Order", "For example:1") If nSortOrder = 1 Or nSortOrder = 0 Then ' Add a new column to put the word length of the specified column. Set objTable = ActiveDocument.Tables(nCurrentTableIndex) objTable.Columns.Add BeforeColumn:=objTable.Columns(nColumnNumber) nRowNumber = 1 For Each objColumnCell In objTable.Columns(nColumnNumber + 1).Cells Set objColumnCellRange = objColumnCell.Range objColumnCellRange.MoveEnd Unit:=wdCharacter, Count:=-1 Set objNewColumnCellRange = objTable.Cell(nRowNumber, nColumnNumber).Range objNewColumnCellRange.MoveEnd Unit:=wdCharacter, Count:=-1 strWordLenth = Len(objColumnCellRange.Text) objNewColumnCellRange.InsertAfter (strWordLenth) nRowNumber = nRowNumber + 1 Next objColumnCell objTable.Select ' Sort by the word length. Selection.Sort ExcludeHeader:=True, FieldNumber:="Column " & nColumnNumber, SortFieldType:= _ wdSortFieldNumeric, SortOrder:=nSortOrder, FieldNumber2:="", _ SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:=wdSortOrderAscending _ , FieldNumber3:="", SortFieldType3:=wdSortFieldAlphanumeric, SortOrder3:= _ wdSortOrderAscending, Separator:=wdSortSeparateByCommas, SortColumn:= _ False, CaseSensitive:=False, LanguageID:=wdEnglishUS, SubFieldNumber:= _ "Paragraphs", SubFieldNumber2:="Paragraphs", SubFieldNumber3:="Paragraphs" objTable.Columns(nColumnNumber).Delete Else MsgBox ("Invalid sort type, please try again") End If Else MsgBox ("Invalid column number, please try again") End If End Sub |
Tags |
descending, text length |
Thread Tools | |
Display Modes | |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Sort by length.. | ranjan | Word VBA | 1 | 09-03-2021 03:19 PM |
Need to sort based on the length of cells | ganesang | Excel Programming | 2 | 08-31-2021 09:58 PM |
![]() |
wardw | Word | 7 | 05-07-2018 09:13 AM |
![]() |
AustinBrister | Word VBA | 19 | 08-22-2016 05:18 PM |
![]() |
omahadivision | Excel Programming | 12 | 11-23-2013 12:10 PM |