Имя: Пароль:
1C
1C 7.7
v7: Помогите создать выпадающий список в экселе через ОЛЕ.
0 Толич
 
29.09.11
09:11
День добрый.
Не могу понять как сделать из 1С в таблице эксель в ячейке выпадающий список.
На данный момент выделил область листа и обозвал ее.
Дальше не могу разобраться как это можно сделать из 1С не используя скрипт.
Вот код...

Лист = ExcelApp.Sheets.Add(); //создаем лист с вспомогательной информацией для заполнения списков
Лист.Name = "MVZ"; //обзываем лист
       
//Удаляем нафиг лишние листы. Нам нужен только 1-й и 2-й лист в книге
Пока ExcelApp.Worksheets.Count>2 Цикл //удаляем все листы, кроме первого и второго  
   ExcelApp.Sheets(3).Delete();
КонецЦикла;        
//Поменяем местами 1-й и 2-й лист в книге, так красивЕЕ
ExcelApp.Sheets(2).Select();
ExcelApp.Sheets(ExcelApp.Sheets.Count).Move(ExcelApp.Sheets(ExcelApp.Sheets.Count-1));
ExcelApp.Sheets(2).Select();
нн = 0;
//заполним на втором листе информацию для списков
СпрСЗ = СоздатьОбъект("Справочник.СтатьиЗатрат");  
СпрСЗ.ВыбратьЭлементы();
Пока СпрСЗ.ПолучитьЭлемент() = 1 Цикл
   Если СпрСЗ.ЭтоГруппа() = 1 Тогда
       Продолжить;
   КонецЕсли;
   нн = нн + 1;
   RangeSelect = ExcelApp.Range(ExcelApp.Cells(НН, 1), ExcelApp.Cells(НН, 1));
   RangeSelect.FormulaR1C1 = СпрСЗ.Наименование;
КонецЦикла;
                                                                 
//Обзавем  и выделим область для списка
ActiveWorkbook = ExcelApp.ActiveWorkbook();
ActiveWorkbook.Names.Add("MV", "=MVZ!R1C1:R" + СокрЛП(НН) + "C1");        

ExcelApp.Sheets(1).Select();

//здесь надо добавить в ячейку выпадающий список.

ФайлXLS.Save();

Спасибо.
1 Толич
 
29.09.11
09:32
В скрипте добавление выглядит приблизительно так...
...
   ADDR = Range("MVZ!$C$1").FormulaR1C1 //здесь лежит адрес ячеек, которых требуется добавить в список  
   With Selection
       .ListFillRange = ADDR
       .LinkedCell = "$Z$19"
       .DropDownLines = 8
       .Display3DShading = False
   End With
   Range("Z19:Z19").Select
   With Selection
       .HorizontalAlignment = xlCenter
       .VerticalAlignment = xlCenter
       .WrapText = False
       .Orientation = 0
       .AddIndent = False
       .IndentLevel = 0
       .ShrinkToFit = False
       .ReadingOrder = xlContext
       .MergeCells = False
   End With
2 Толич
 
29.09.11
10:26
ап
3 Толич
 
29.09.11
10:34
т.е. мне нужно узнать как можно реализовать в 1С, то что в макросе выглядит как
ActiveSheet.DropDowns.Add(735.5, 308.25, 203.25, 15.75).Select
4 Толич
 
29.09.11
11:37
Строка
ActiveSheet.DropDowns.Add(735.5, 308.25, 203.25, 15.75);
Добавляет список в лист эксель.

Вопрос как передать этому элементу (списку) значения, которые он должен отображать.
5 Толич
 
29.09.11
15:00
Решение если вдруг кому понадобится:

ActiveWorkbook = ExcelApp.ActiveWorkbook();
ActiveWorkbook.Names.Add("MV", "=MVZ!R1C1:R" + СокрЛП(НН) + "C1");        
       
ExcelApp.Sheets(1).Select();
СписокМВЗ = ExcelApp.ActiveSheet.DropDowns.Add(1322, 90, 100, 100);
СписокМВЗ.ListFillRange ="MVZ!R1C1:R" + СокрЛП(НН) + "C1";//"$Лист1!R44C4:R44C4";
СписокМВЗ.DropDownLines = 8;
СписокМВЗ.Display3DShading = 0;        
       
ФайлXLS.Save();

Поговорил сам с собой...
6 filh
 
29.09.11
15:08
приходи еще.
7 Толич
 
29.09.11
15:15
То есть так

ActiveWorkbook = ExcelApp.ActiveWorkbook();
ActiveWorkbook.Names.Add("MV", "=MVZ!R1C1:R" + СокрЛП(НН) + "C1");        
       
       
ExcelApp.Sheets(1).Select();
СписокМВЗ = ExcelApp.ActiveSheet.DropDowns.Add(1322, 94, 100, 100);
СписокМВЗ.ListFillRange ="MV";
СписокМВЗ.DropDownLines = 8;
СписокМВЗ.Display3DShading = 0;
8 FN
 
29.09.11
15:15
(5) еще можно через Validation - будет и список, и заодно проверка введенных значений

Ексель.Range(Область).Validation.Add(3,1,1,("="+ОбластьЗначений));
                           Ексель.Range(Область).Validation.IgnoreBlank=1;
                           Ексель.Range(Область).Validation.InCellDropdown=1;
                           Ексель.Range(Область).Validation.ShowInput=0;
                           Ексель.Range(Область).Validation.ShowError=1;

Область - куда цеплять список
ОбластьЗначений - сам список
9 FN
 
29.09.11
15:18
(8)+ ОбластьЗначений="$"+ПолучитьНазваниеКолонки(номерКолонки)+"$"+Строка(начальныйНомерСтроки)+":"+"$"+ПолучитьНазваниеКолонки(номерКолонкиок)+"$"+Строка(КонечныйНомерСтроки);

//Функция возвращает буквенный код столбца по его номеру
Функция ПолучитьНазваниеКолонки(Знач ном)  //от 1 до 255
   ном=Макс(1,Мин(ном,255)); //ограничим
   ном=ном-1;
   ПоследнийСимвол=Симв(65+(ном%26));
   ПервыйСимвол=?(Цел(ном/26)=0,"",Симв(64+Цел(ном/26)));
   Возврат(ПервыйСимвол+ПоследнийСимвол);                                                  
КонецФункции
10 Толич
 
29.09.11
15:48
(9) Попробывал

//Обзавем  и выделим область для списка
ActiveWorkbook = ExcelApp.ActiveWorkbook();
ActiveWorkbook.Names.Add("MV", "=MVZ!R1C1:R" + СокрЛП(НН) + "C1");        

ExcelApp.Sheets(1).Select();
ExcelApp.Range(ExcelApp.Cells(44, 5), ExcelApp.Cells(44, 5)).Validation.Add(3,1,1,"MV");
ExcelApp.Range(ExcelApp.Cells(44, 5), ExcelApp.Cells(44, 5)).Validation.IgnoreBlank=1;
ExcelApp.Range(ExcelApp.Cells(44, 5), ExcelApp.Cells(44, 5)).Validation.InCellDropdown=1;
ExcelApp.Range(ExcelApp.Cells(44, 5), ExcelApp.Cells(44, 5)).Validation.ShowInput=0;
ExcelApp.Range(ExcelApp.Cells(44, 5), ExcelApp.Cells(44, 5)).Validation.ShowError=1;        

На листе не видно этого списка вообще. Что я делаю не так?
11 FN
 
29.09.11
21:41
=MV
12 Толич
 
29.09.11
22:08
(11) Побывал. Область ExcelApp.Cells(44, 5) после этого ничем не отличается от обычной ячейки. =(
Excel 2007
13 FN
 
29.09.11
22:56
http://infostart.ru/public/16140/
давненько писал - там это есть. Можешь попробовать под себя причесать
14 Толич
 
30.09.11
09:32
(13) Спасибо.
Дело было в неправильном объявлении Области как то так

//Обзавем  и выделим область для списка
ActiveWorkbook = ExcelApp.ActiveWorkbook();
ActiveWorkbook.Names.Add("MV", "=MVZ!R1C1:R" + СокрЛП(НН) + "C1");
ОбластьЗначений="$"+ПолучитьНазваниеКолонки(44)+"$"+Строка(5)+":"+"$"+ПолучитьНазваниеКолонки(44)+"$"+Строка(7);
ExcelApp.Sheets(1).Select();                                                      
       ExcelApp.Range("AR4:AR500").Validation.Add(3,1,1,("=MV"));
       ExcelApp.Range("AR4:AR500").Validation.IgnoreBlank=1;
       ExcelApp.Range("AR4:AR500").Validation.InCellDropdown=1;
       ExcelApp.Range("AR4:AR500").Validation.ShowInput=0;
       ExcelApp.Range("AR4:AR500").Validation.ShowError=1;
15 Толич
 
30.09.11
09:33
(14) В смысле так правильно надо было объявлять область...
16 FN
 
30.09.11
10:06
(14) Рад, если смог помочь
Закон Брукера: Даже маленькая практика стоит большой теории.