Имя: Пароль:
1C
1С v8
Маленький простенький вопрос про excel
0 tolok_d
 
09.01.13
17:32
Подскажите как через ком обьект скопировать строку и вставить ее в определенном месте.
1 Lama12
 
09.01.13
17:33
Сделай запись макроса, там все видно будет.
2 tolok_d
 
09.01.13
17:36
Sub Макрос1()
'
' Макрос1 Макрос
'

'
   Rows("12:12").Select
   Selection.Copy
   Rows("13:13").Select
   Selection.Insert Shift:=xlDown
   ActiveSheet.Paste
   Application.CutCopyMode = False
End Sub
3 tolok_d
 
09.01.13
17:36
просто эту часть взять?
4 tolok_d
 
09.01.13
17:38
Никто не знает?(
5 Леха Дум
 
09.01.13
17:46
Страница.Cells(НомерСтроки, НомерКолонки).Copy(Страница.Cells(НомерСтроки, КолвоСтолбцов + НомерКолонки));

примерно так
6 tolok_d
 
09.01.13
17:47
Ок, сейчас буду пробывать. Потом отпишусь
7 tolok_d
 
09.01.13
17:48
(5) спасибо
8 Леха Дум
 
09.01.13
17:52
там кстати еще одна засада есть - если текст в ячейке больше 256 символов, тогда он будет обрезан до 256 символов и вот тут придется это все загонять в макрос
9 tolok_d
 
09.01.13
18:16
Лист.Rows(НомерСтрокиОткуда).Copy(Лист.Rows(НомерСтрокиКуда));
10 tolok_d
 
09.01.13
18:17
Но это заменяет просто содержание ячеек, а мне надо чтоб они не заменялись, а именно вставлялись со сдвигом
11 Леха Дум
 
09.01.13
18:22
ну тогда в цикле макрос, примерно такой (выдрал из старья):
Если Не ИмяКолонки = "" Тогда
                   
                   ДлиннаяСтрока = СтрЗаданий[ИмяКолонки];
                   ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока, Символы.ПС, " ");
                   ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока, Символ(182), " ");
                   ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока, "'", "");
                   ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,""""," ");
                   //ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,"       "," ");
                   //ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,"      "," ");
                   //ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,"     "," ");
                   //ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,"    "," ");
                   //ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,"   "," ");
                   //ДлиннаяСтрока = СтрЗаменить(ДлиннаяСтрока,"  "," ");
                   Если СтрДлина(ДлиннаяСтрока)>255 Тогда
                       
                       Если СтрДлина(ДлиннаяСтрока)>900 Тогда
                           ТекстМакроса = ТекстМакроса + Символы.ПС + " ActiveSheet.Cells(" + Строка(СтрТЗ.НомСтр) + ", " + Строка(КолвоСтолбцов+к) + ").Value = """;
                           Стр = ДлиннаяСтрока; СтрокаРазд="";
                           Пока СтрДлина(Стр)>900 Цикл
                               СтрокаРазд = СтрокаРазд+Лев(Стр,800)+"""  & _ " +Символы.ПС+"""";    
                               Стр = Сред(Стр,801);
                           КонецЦикла;    
                           СтрокаРазд = СтрокаРазд+ Стр+ """";
                           //Сообщить("Разделили строку" +Строка(СтрТЗ.НомСтр)+" "+Строка(КолвоСтолбцов+к));
                           ТекстМакроса = ТекстМакроса +  СтрокаРазд;
                       Иначе
                           ТекстМакроса = ТекстМакроса + Символы.ПС + " ActiveSheet.Cells(" + Строка(СтрТЗ.НомСтр) + ", " + Строка(КолвоСтолбцов+к) + ").Value = """ + ДлиннаяСтрока + """";
                       КонецЕсли;    
                   Иначе
                       //Страница.Cells(СтрТЗ.НомСтр, КолвоСтолбцов+к).NumberFormat = "@";
                       //Сообщить("Проверить значение: строка"+СтрТЗ.НомСтр+" столбец "+КолвоСтолбцов+к);
                       Страница.Cells(СтрТЗ.НомСтр, КолвоСтолбцов+к).Value = ДлиннаяСтрока;
                   КонецЕсли;    
               КонецЕсли;            
           КонецЦикла;

Если Не ПустаяСтрока(ТекстМакроса) Тогда
       
       ТекстМакроса = "Sub ПереносДлинныхСтрок()" + ТекстМакроса + Символы.ПС + "End Sub";
       
       VBComponents = ExcelApp.ActiveWorkbook.VBProject.VBComponents;
       cntComp = VBComponents.Count();
       Компонет = VBComponents.Add(1);
       VBComponents.Item(cntComp+1).CodeModule.InsertLines(1,ТекстМакроса);
       
       //ExcelApp.Application.Run("ПереносДлинныхСтрок");
       //VBComponents.Remove(Компонет);

       
   КонецЕсли;
12 tolok_d
 
09.01.13
18:25
Ну должно же быть более простое решение?
13 Леха Дум
 
09.01.13
18:28
Страница.Cells(НомерСтроки, НомерКолонки).Value =
Строка(Страница.Cells(НомерСтроки, НомерКолонки).Value) + Строка(Страница.Cells(НомерСтроки, КолвоСтолбцов + НомерКолонки).Value);
14 tolok_d
 
09.01.13
19:06
Сделал)
Лист.Rows(8).Insert(1);// добавляем одну пустую строку перед 8й строкой
   Лист.Rows(7).Copy(Лист.Rows(8));//Копируем содержимое 7 строки в восьмую(пустая из предидущей строки)