hexadecimal, ваш код нелогично работает, хотя и работает.
В этом случае:
Visual Basic | ||
|
диапазон «rngTbl» содержит ячейки от второй ячейки в четвёртом столбце до третьей ячейки (включительно) в чётвёртом столбце. Т.е. вы думаете, что работаете с двумя ячейками, а задействуете девять ячеек. Это можно проверить, если узнать количество ячеек с помощью команды:
Visual Basic | ||
|
Я не буду вникать, в чём ошибка, которая у вас появляется, а предложу свой вариант (код просто показывает принцип):
Кликните здесь для просмотра всего текста
Visual Basic | ||
|
Примечание
В некоторых случаях, когда в таблице есть объединённые ячейки, нельзя обратиться к ячейке по номеру строки и столбца: Cell(2, 1). Нужно что-то другое придумывать.
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Cells.Merge method (Word) |
vbawd10.chm155844812 |
vbawd10.chm155844812 |
word |
Word.Cells.Merge |
064d405e-00a1-205a-184c-4f46ab463a63 |
06/08/2017 |
medium |
Cells.Merge method (Word)
Merges the specified table cells with one another. The result is a single table cell.
Syntax
expression.Merge
expression Required. A variable that represents a ‘Cells’ collection.
Example
This example merges the cells in row one of the selection into a single cell and then applies shading to the row.
If Selection.Information(wdWithInTable) = True Then Set myrow = Selection.Rows(1) myrow.Cells.Merge myrow.Shading.Texture = wdTexture10Percent End If
See also
Cells Collection Object
[!includeSupport and feedback]
- Neuromancer
- Начинающий
- Сообщения: 8
- Зарегистрирован: 08.05.2008 (Чт) 16:08
Объединение ячеек в таблице Word
Задача:
Объединить по вертикали несколько ячеек таблицы в файле Word.
- Код: Выделить всё
Dim wrdApp1 As Word.Application
Dim wrdDoc As Word.Document
Dim sel As SelectionSet wrdApp1 = CreateObject("Word.Application")
Set wrdDoc = wrdApp1.Documents.Open("Шаблон1.doc")
wrdDoc.Tables(1).Rows(2).Cells(1).Select
Set sel = wrdApp1.Selection
With sel
.MoveDown Unit:=wdLine, count:=1, Extend:=wdExtend
.Range.Cells.Merge
End With
Что неверно ? Ячейки выделяются, но не объединяются.
- Neuromancer
- Начинающий
- Сообщения: 8
- Зарегистрирован: 08.05.2008 (Чт) 16:08
Neuromancer » 08.05.2008 (Чт) 16:58
Разобрался.
.Cells.Merge вместо Range.Cells.Merge и все работает.
Сорри за беспокойство.
- Neuromancer
- Начинающий
- Сообщения: 8
- Зарегистрирован: 08.05.2008 (Чт) 16:08
Neuromancer » 11.05.2008 (Вс) 21:19
Теперь столкнулся с новой проблемой.
Выделил ячейки, объединил. Теперь хочу объединить в другом столбце, но любое действие с таблицей вызывает ошибку.
- Код: Выделить всё
Dim wrdApp1 As Word.Application
Dim wrdDoc As Word.Document
Dim sel As SelectionSet wrdApp1 = CreateObject("Word.Application")
Set wrdDoc = wrdApp1.Documents.Open("Шаблон1.doc")
wrdDoc.Tables(1).Rows(2).Cells(1).Select
Set sel = wrdApp1.Selection
With sel
.MoveDown Unit:=wdLine, count:=1, Extend:=wdExtend
.Range.Cells.Merge
End With
wrdDoc.Tables(1).Rows(2).Cells(2).Select
Последняя строка вызывает ошибку, как и любое другое действи с ячейками.
Как снять выделение, чтобы можно было что то делать дальше в таблице ?
Спасибо.
- Neuromancer
- Начинающий
- Сообщения: 8
- Зарегистрирован: 08.05.2008 (Чт) 16:08
Neuromancer » 05.06.2008 (Чт) 12:08
Через «Add Watch..» обратил внимание на поле Last объекта Table. Там написано «В таблице есть объеденения по вертикали, поэтому доступ к отдельным строкам запрещен». В документации или в help я этого нигде не нашел. Задачу решил выделением строки поячеечно.
Пишу тем кто возможно столкнется с похожей проблемой.
- Код: Выделить всё
wrdDoc.Tables(1).Cell(tbl.Rows.count, 1).Select
Set sel = tbl.Application.Selection
With sel
.MoveEnd Unit:=wdColumn, count:=17
.Cells.Delete
End With
Вопрос снят.
- Vlassoff
- Начинающий
- Сообщения: 7
- Зарегистрирован: 06.06.2008 (Пт) 13:55
Vlassoff » 06.06.2008 (Пт) 14:06
На самом деле, после того как ячейки обеденены, имеется доступ только к первой ячейке, то есть в таблице 3Х3 при объеденение ячеек и использовании следующей конструкции
- Код: Выделить всё
Table(1).Cell.Next
debug.print Selection.Information(wdStartOfRangeRowNumber)
debug.print Selection.Information(wdStartOfRangeColumnNumber)
несколько раз выдается значение одного и того же столбца и строки. т.е. ячейки как бы есть, но адрес у ни — только первой ячейки…
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 06.06.2008 (Пт) 14:25
Это потому что таблицы в Word отличаются от таблиц в Excel. В Word это скорее списки, чем таблицы, и в случае объединения нескольких ячеек «внутренних» ячеек действительно не существует. Остается только одна ячейка, по высоте и ширине равная объедененным.
Lasciate ogni speranza, voi ch’entrate.
- Vlassoff
- Начинающий
- Сообщения: 7
- Зарегистрирован: 06.06.2008 (Пт) 13:55
Vlassoff » 06.06.2008 (Пт) 14:36
Но при методе Table(1).Cell.Next они как-бы существуют в качестве ссылок на первую из объедененных ячеек. ..
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 06.06.2008 (Пт) 14:50
Хм… У меня при Selection.Cells(1).Next.Select выбралась следующая ячейка, а не текущая.
Возможно, что тогда там имеется что-то вроде атрибута colspan таблиц HTML.
Lasciate ogni speranza, voi ch’entrate.
- Vlassoff
- Начинающий
- Сообщения: 7
- Зарегистрирован: 06.06.2008 (Пт) 13:55
Vlassoff » 06.06.2008 (Пт) 16:24
alibek писал(а):Хм… У меня при Selection.Cells(1).Next.Select выбралась следующая ячейка, а не текущая.
Возможно, что тогда там имеется что-то вроде атрибута colspan таблиц HTML.
Я в цикле атрибуты ячеек выводил. Количесто ячеек:
- Код: Выделить всё
Sub АтрибутыЯчеек()
Set Таб = Selection.Tables(1)
k = 1
Строк = Таб.Rows.Count
Столбец = Таб.Columns.Count
Таб.Cell(1, 1).Range.SelectDebug.Print "Строк: "; Строк
Debug.Print "Столбцов: "; СтолбецFor i = 1 To Строк
For j = 1 To Столбец
Debug.Print "(" & Selection.Information(wdStartOfRangeRowNumber) & ";" & Selection.Information(wdStartOfRangeColumnNumber) & ")";
If Not ((i = Строк) And (j = Столбец)) Then Selection.MoveRight Unit:=wdCell
Next j
Debug.Print
Next iEnd Sub
Вот что получалось. Певый массив до объеденения. Второй после.
- Код: Выделить всё
Строк: 4
Столбцов: 4
(1;1)(1;2)(1;3)(1;4)
(2;1)(2;2)(2;3)(2;4)
(3;1)(3;2)(3;3)(3;4)
(4;1)(4;2)(4;3)(4;4)
Строк: 4
Столбцов: 4
(1;1)(1;2)(1;3)(1;4)
(1;1)(2;2)(2;3)(2;4)
(1;1)(3;2)(3;3)(3;4)
(4;1)(4;2)(4;3)(4;4)
Можете попробовать!!!
- Neuromancer
- Начинающий
- Сообщения: 8
- Зарегистрирован: 08.05.2008 (Чт) 16:08
Neuromancer » 02.07.2008 (Ср) 15:41
Vlassoff писал(а):На самом деле, после того как ячейки обеденены, имеется доступ только к первой ячейке, то есть в таблице 3Х3 при объеденение ячеек и использовании следующей конструкции
- Код: Выделить всё
Table(1).Cell.Next
debug.print Selection.Information(wdStartOfRangeRowNumber)
debug.print Selection.Information(wdStartOfRangeColumnNumber)несколько раз выдается значение одного и того же столбца и строки. т.е. ячейки как бы есть, но адрес у ни — только первой ячейки…
Проблема была в другом. Я объединял ячейки в одной строке или столбце, после этого добавлял новые строки, и уже в них не мог обращаться к строке таблицы. Пришлось перейти к обращению вида Cell(x,y). Как я понял, объединив в таблице ячейки один раз, я теряю возможность обращаться к элементам таблицы через Column(i) или Row(i), что мне кажется странным.
Все свои проблемы я решил
Даже научился объединять ячейки в столбце при переходе на новую страницу. Для справки, если я пытаюсь объединить ячейки в столбце и конец объединения попадает на следующую страницу, то я получаю ошибку. Так что надо отслеживать этот момент и объединять до конца текущей страницы и с начала следующей до конца. Кому интересно могу написать сюда пример кода.
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Формулировка задачи:
С помощью макроса добавляю таблицу в TextBox на страницу.
Дальше пытаюсь объединить ячейки.
В столбцах отличных от первого ячейки объединяются. В первом столбце появляется ошибка «Запрашиваемый номер семейства не существует»
Макрос
Подскажите, в чем ошибка.
Такой вариант работает.
Выделение происходит правильно.
Только ошибка все равно непонятная.
Код к задаче: «Word: объединение ячеек таблицы»
textual
Sub Procedure_4() Dim myTextFrame As Word.TextFrame Dim myTable As Word.Table Set myTextFrame = ActiveDocument.Shapes(1).TextFrame Set myTable = myTextFrame.TextRange.Tables(1) myTable.Cell(2, 1).Merge MergeTo:=myTable.Cell(3, 1) End Sub
Полезно ли:
5 голосов , оценка 4.000 из 5
Код:
procedure TForm1.Button1Click(Sender: TObject);
var word,count,n,Unit_,extend :OleVariant;
begin
n:=’C:document1.doc’;
Unit_:=wdCharacter;
extend:= wdExtend;
count:=2;
WordApplication1.Documents.Open(n,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
WordApplication1.Selection.MoveRight(unit_,count,extend);
WordApplication1.Selection.Cells.Merge;
end;
вот так вот у меня нормально работает объединение ячеек…вощем в конце попробуй добавить doc.ActiveWindow.selection.cells.merge; тогда должно заработать. Удачи!