Имя: Пароль:
1C
1С v8
Работа с Экселем
0 margoigo
 
10.05.16
18:48
Задача такая, надо вывести прайс на разные листы в эксель по группам. Это все норм, выводит. Теперь надо на каждом листе закрепить область. И вот тут не работает. Делаю так:
Вариант 1

ОбщаяКнига = ДокЭксель.WorkBooks.Open(путь);        
Для каждого СтрЛисты ИЗ ТЗИменаЛистов Цикл
Лист= ДокЭксель.ActiveWorkbook.Sheets(СтрЛисты.НомерЛиста);
Лист.Cells(8,11).Formula = ИтоговаяФормула;
Лист.Range("A12").Select();
ДокЭксель.ActiveWindow.FreezePanes = True;
КонецЦикла;

вариант 2

КоличествоЛистов = ДокЭксель.Sheets.count;
Для лист = 1 По КоличествоЛистов Цикл
  Листик = ДокЭксель.sheets(Лист);
  Листик.Cells(8,11).Formula = ИтоговаяФормула;
  Листик.Range("A12").Select();
  ДокЭксель.ActiveWindow.FreezePanes = True;
КонецЦикла;

В обоих случаях ругается на Select(), ошибка времени выполнения. Ну вот и как быть??
1 Мэс33
 
10.05.16
18:57
Может просто Select ?
2 Мэс33
 
10.05.16
18:59
(1) тьфу... зря написал
3 Pistol
 
10.05.16
19:00
Включить запись макроса в ёкселе, прокликать руками, посмотреть, что записалось.
4 Мэс33
 
10.05.16
19:01
(3)
Sub Макрос1()
    With ActiveWindow
        .SplitColumn = 0
        .SplitRow = 1
    End With
    ActiveWindow.FreezePanes = True
End Sub
5 margoigo
 
10.05.16
19:04
(4) записывала макрос, смотрела что пишет, оттуда и взяла. Только он select без скобок пишет. На первом листе если, то прекрасно работает, если на втором, то уже все ругается. Пробую вашим методом.
6 margoigo
 
10.05.16
19:25
Попробовала так:

КоличествоЛистов = ДокЭксель.Sheets.count;
Для лист = 1 По КоличествоЛистов Цикл
Листик = ДокЭксель.sheets(Лист);
Листик.Cells(8,11).Formula = ИтоговаяФормула;
ДокЭксель.ActiveWindow.SplitRow = 12;
ДокЭксель.ActiveWindow.FreezePanes = 1;
КонецЦикла;

Так только один лист закрепил. А надо на каждом.

(4) Как оператор with в 1С записать? Не поняла. У меня макрос совсем другое выдает.
7 Мэс33
 
10.05.16
19:41
(6) Так у вас что такое ДокЭксель.ActiveWindow?
Вам надо не просто лист перебирать, а делать его активным.
8 Мэс33
 
10.05.16
19:45
(7) совсем "по-русский" разучился ))
В общем, надо вам листы перебрать, и каждый лист тогда уж делать активным. Может быть как-то и другим способом можно сделать, быстрый гуглинг ответа не нашел.
9 Мэс33
 
10.05.16
19:46
http://am.rusimport.ru/msaccess/f2.aspx?id=66659
Тут понятно по полочкам во втором комментарии поясняется механизм.
10 margoigo
 
10.05.16
19:49
В общем, еще раз внимательно на макрос посмотрела и все заработало )))))

ОбщаяКнига = ДокЭксель.WorkBooks.Open(путь);        
Для каждого СтрЛисты ИЗ ТЗИменаЛистов Цикл
Лист = ДокЭксель.ActiveWorkbook.Sheets(СтрЛисты.Имя);
Лист.Cells(8,11).Formula = ИтоговаяФормула;
            
// устанавливаем закрепление области
Лист.Select(); // ВОТ ЭТУ СТРОКУ НАДО БЫЛО ПРОПИСАТЬ

Лист.Range("A12").Select();
ДокЭксель.ActiveWindow.FreezePanes = True;
КонецЦикла;

Всем СПАСИБИЩЕ!!!!!!
11 Мэс33
 
10.05.16
19:51
(10) ну да, лист становится активным.