|
1c ком объект, таблица, добавить строку после строки,Rows.Add | ☑ | ||
---|---|---|---|---|
0
Domanoff26
29.08.13
✎
10:13
|
хочу добавить в таблице строку после какой нить строки
табл.Rows.Add(начСтрока); табл.Rows.Add(табл.Rows(начстрока)); табл.Rows.Add(табл.Rows.Item(начстрока)); - все не работает,ошибки использования, что не верно делаю? |
|||
1
Wobland
29.08.13
✎
10:14
|
а что такое КОМОбъект?
|
|||
2
Domanoff26
29.08.13
✎
10:18
|
(1) вордовский COM объект
|
|||
3
manyak
29.08.13
✎
10:19
|
в VBA как учили код проверял?
1) запись макроса 2) проверка работоспособноси макроса 3) перенос кода в 1с |
|||
4
Domanoff26
29.08.13
✎
10:28
|
(3) там InsertRowsBelow, он для Selection, но табл.select().InsertRowsBelow(3)не опознает метод InsertRowsBelow
|
|||
5
manyak
29.08.13
✎
10:33
|
ActiveDocument.Tables(1).Rows(4).Select
Selection.InsertRowsAbove 1 |
|||
6
Domanoff26
29.08.13
✎
10:37
|
(5) у меня уже на Rows(4) ругается, мол ошибка при вызове метода контекста, к тому же насколько я понимаю ActiveDocument.Tables(1).Rows(4).Select
Selection.InsertRowsAbove(1) если для COM? |
|||
7
Domanoff26
29.08.13
✎
10:38
|
т е по сути я даже строку не могу получить
|
|||
8
manyak
29.08.13
✎
10:43
|
Word = Новый COMОбъект("Word.Application");
ActiveDocument.Tables(1).Rows(4).Select() Selection.InsertRowsAbove(1) |
|||
9
manyak
29.08.13
✎
10:44
|
Word.ActiveDocument....
|
|||
10
Domanoff26
29.08.13
✎
10:48
|
(9) говорю же Rows(4) не понимает? ошибка при вызове метода контекста, чтоне так делаю
|
|||
11
manyak
29.08.13
✎
10:51
|
Rows(4) выбирает 4-ю строку, может у тебя строки такой нет.
|
|||
12
manyak
29.08.13
✎
10:52
|
ну и не видя твоего кода 1с сложно сказать что не так.
|
|||
13
Domanoff26
29.08.13
✎
10:52
|
(11) да я на всех номерах пробывал
|
|||
14
Domanoff26
29.08.13
✎
10:54
|
Docum = WordDoc.open(имяВрФ);
табл = Docum.Tables.item(начтал1); табл.Rows(3).Select() Selection.InsertRowsAbove(1); и ошибка на rows |
|||
15
Domanoff26
29.08.13
✎
10:57
|
Docum.Tables(4).Rows(3).Select().Selection.InsertRowsAbove(1) вот так ругается что Selection не является объектным типом
|
|||
16
Domanoff26
29.08.13
✎
11:21
|
Docum.Tables(4).Rows(3).Select().select() - вот это в отладчике - неопределено
|
|||
17
Domanoff26
29.08.13
✎
11:24
|
когда я просто добавлял строки в конец талицы, было без проблем, но сейчас нужно в разбивать таблицу на строки в зависимости от данных, оставляя при этом итоговую строку не измененной, может это можно как то проще сделать?
|
|||
18
manyak
29.08.13
✎
11:25
|
Word = Новый COMОбъект("Word.Application");
word.visible=1; docum=Word.Documents.open("c:\test.docx"); docum.Tables(1).Rows(4).Select(); word.selection.InsertRowsAbove(1); |
|||
19
Domanoff26
29.08.13
✎
11:45
|
(18) та же самая ошибка, дело не в видимости
|
|||
20
manyak
29.08.13
✎
11:48
|
мой код рабочий на 100% провереный, сделай по моему коду
|
|||
21
manyak
29.08.13
✎
11:49
|
значит у тебя нет таблиц в документе, c:\test.docx создай с одной таблицей например с 10-ю строками и проверь мой код
|
|||
22
manyak
29.08.13
✎
11:54
|
Docum = WordDoc.open(имяВрФ);
табл = Docum.Tables.item(начтал1); сам насоздавал непойми чего наверно, индекс нетот может берешь и т.д. |
|||
23
manyak
29.08.13
✎
12:01
|
!!!!!docum!!!!!.Tables(1).Rows(4).Select();
!!!!!word!!!!!!.selection.InsertRowsAbove(1); selection заметь Обьект "ворда" а не документа WordDoc.Selection.InsertRowsAbove(1); это если у тебя все по уму выше написано что ты сюда не запостил: WordDoc = Новый COMОбъект("Word.Application"); |
|||
24
Domanoff26
29.08.13
✎
12:02
|
docum.Tables(1).Rows(4) странно что вот так не ругается
а если сначало табл получаю docum.Tables(1), то потом ругается на Rows(4) |
|||
25
Domanoff26
29.08.13
✎
12:04
|
хотя нет и тут ругается
|
|||
26
Domanoff26
29.08.13
✎
12:07
|
вот четко твой код, строка есть , таблица есть ругается на Rows(1) до selection !! (23)
|
|||
27
manyak
29.08.13
✎
12:07
|
(21) мой код работает с c:\test.docx
|
|||
28
manyak
29.08.13
✎
12:07
|
это вопрос
|
|||
29
Domanoff26
29.08.13
✎
12:09
|
(28) т е с doc может не работать?
|
|||
30
Domanoff26
29.08.13
✎
12:13
|
(28) расширение тоже не при чем? ясен пень что я свой адрес вставил, говорю же таблица видна, он почему то строки не видит, хотя проверял на разные
|
|||
31
Domanoff26
29.08.13
✎
12:15
|
(28) я понял кроче . там в строке есть объединенные ячейки, а как тогда вставить добавить диапазон? скопировать и вставить я знаю, но как сначало добавить его?
|
|||
32
manyak
29.08.13
✎
12:18
|
так и быть открою тайну раз до сих пор не догнал:
1) запись макроса 2) проверка работоспособноси макроса 3) перенос кода в 1с |
|||
33
manyak
29.08.13
✎
12:18
|
любое "как" узнаешь через макрос VBA
|
|||
34
Domanoff26
29.08.13
✎
12:19
|
(32) догнал тоже самое только не с row, не знаешь почему в первый раз когда запускаю 1с и обработку заполнения, она заполняет раз в 10 дольше чем второй раз, при этом открытие ворд не настолько долгое, и после каждого заполнения оно закрывается, он что то кеширует или как?
|
|||
35
manyak
29.08.13
✎
12:19
|
там если нажать в коде на методе или свойстве F1 курилово неплохое выходит :)
|
|||
36
manyak
29.08.13
✎
12:22
|
ну везде так, даже когда просто работаешь - первый запуск приложения всегда дольше следующего
|
|||
37
Domanoff26
29.08.13
✎
12:24
|
(36) чего то прям очень намного
|
|||
38
Domanoff26
29.08.13
✎
12:24
|
юзеры будут злиться
|
|||
39
manyak
29.08.13
✎
12:27
|
попробуй:
до начала выгрузки таблицы: Application.ScreenUpdating = False после окончания: Application.ScreenUpdating = true в экселе например разнице во времени небо и земля |
|||
40
manyak
29.08.13
✎
12:30
|
до выгрузки
WordDoc.ScreenUpdating = False; после: WordDoc.ScreenUpdating = True; и сравни время |
|||
41
Domanoff26
29.08.13
✎
13:06
|
почему то вверх вставляет а не вниз
|
|||
42
Domanoff26
29.08.13
✎
13:13
|
не на отображении тормозит. на заполнении ячеек, к тому же и раньше было когда самого дока не было видно вообще
|
|||
43
Domanoff26
29.08.13
✎
13:16
|
Docum.Range(табл.Cell(начСТрока,2).Range.Start, табл.Cell(начСТрока,7).Range.End).Select();
word.selection.InsertRowsAbove(1); вот это почему то вверх всталяет, а не вниз(( |
|||
44
manyak
29.08.13
✎
14:21
|
выше:
word.selection.InsertRowsAbove(1); ниже: word.selection.InsertRowsBelow(1); |
|||
45
Domanoff26
29.08.13
✎
15:11
|
(44) а как можно вставить выделеный фрагмент, после конкретной строки, чтоб и количество и размер колонок соханилась, что то даже не знаю как мокрос такой записать
|
|||
46
manyak
29.08.13
✎
15:25
|
1) скопировать фрагмент
2.1) встать на след строку и нажать "вставить" - заменит строки ниже которые идут вставленным 2.2) если не надо заменять - а нужно вставить с добавлением: то добавить новых строк в кол-ве равным кол-ву в копируемом диапазоне, скопировать диапазон-фрагмент, встать на посл. строку из добавленных и нажать "вставить" |
|||
47
Domanoff26
29.08.13
✎
15:46
|
Docum.Range(табл.Cell(3,1).Range.Start, табл.Cell(3,7).Range.End).copy();
Docum.Range(табл.Cell(начСТрока,2).Range.Start, табл.Cell(начСТрока,5).Range.End).Select(); word.selection.InsertRowsbelow(1); Docum.Range(табл.Cell(начСТрока+1,1).Range.Start, табл.Cell(начСТрока+1,5).Range.End).Select(); word.selection.paste(); оставил количество колонок 5, а я хотел чтобы он там сделал столько же колонок сколько и в копированой строке |
|||
48
Domanoff26
29.08.13
✎
16:01
|
надо выделять всю строку но почему то Rows(1) хоть убей не хочет работать,
|
|||
49
Domanoff26
29.08.13
✎
16:04
|
ошибка отсуствует доступ к отдельным строкам по скольку таблица имеет ячейки объединенные по вертикали, но как тогда интерактивно я их выделяю?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |