Как сформировать массив из таблицы Word - VBA
Формулировка задачи:
В Excel, например, можно диапазон ячеек сразу поместить в массив:
Как сделать что-нибудь подобное в программе Word с таблицей?
Если по каждой ячейке идти, то код будет очень долго работать. Надо сразу получить как-то всю таблицу, чтобы потом её анализировать. С большими таблицами вообще долго работать в программе Word с помощью VBA.
Решение задачи: «Как сформировать массив из таблицы Word»
textual
Листинг программы
Sub Fill_Table() Dim tbl As Table Dim t!, ii&, jj&, s$, w$(), i& ActiveDocument.Range.Delete Set tbl = ActiveDocument.Tables.Add(Selection.Range, 200, 5) t = Timer Set tbl = ThisDocument.Tables(1) ''' [200*5] For ii& = 1 To tbl.Rows.Count For jj& = 1 To tbl.Columns.Count tbl.Cell(ii&, jj&).Range.Text = CStr(ii& * jj&) Next jj& Next ii& Debug.Print "fill table", Timer - t ReDim v(1 To tbl.Rows.Count, 1 To tbl.Columns.Count) t = Timer For ii& = 1 To tbl.Rows.Count For jj& = 1 To tbl.Columns.Count s = tbl.Cell(ii&, jj&).Range.Text v(ii, jj) = CDbl(Left$(s, Len(s) - 2)) Next jj& Next ii& Debug.Print "read table", Timer - t t = Timer tbl.Range.Copy 'Excel должен быть запущен! With GetObject(, "excel.application").workbooks.Add(-4167).sheets(1) 'xlwbatworksheet .PasteSpecial "Текст", False, False v = .usedrange.Value .Parent.Close 0 End With Debug.Print "Excel", Timer - t t = Timer w = Split(tbl.Range.Text, Chr$(13) & Chr$(7)) For ii& = 1 To tbl.Rows.Count For jj& = 1 To tbl.Columns.Count v(ii, jj) = CDbl(w(i)) i = i + 1 Next jj& i = i + 1 'пустой столбец, который всегда есть справа от таблицы Next ii& Debug.Print "Split table text", Timer - t Stop 'проконтролировать содержимое v! End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д