|
Еще один вопросик по экселю | ☑ | ||
---|---|---|---|---|
0
mzelensky
21.03.12
✎
09:22
|
Необходимо чтобы определенные ячейки Экселевского листа были "Списком выбора". Как сделать это чисто в экселе я нашел (вариантов, как оказалось несколько), но как сделать это из-под 1С?
Уточню задание: выгружаю данные из 1С в эксель. Необходимо чтобы определенные колонки были списком значений и пользователь в последствии выбирал одно из значений, а не печатал в ручную. Как сделать? |
|||
1
asady
21.03.12
✎
09:23
|
телепатирую: это СЗ нужен в 1С но хранится он должен в экселе????
|
|||
2
mzelensky
21.03.12
✎
09:26
|
(1) телепатирую: список значений - это классификатор единиц измерения. Я выгружу его (заполню список) данными из 1С. Пользователь будет оперировать теми единица измерения, которые присутствуют (и в том виде, как они присутствуют) в 1С. В последствии данные будут загружаться обратно из экселя в 1С. Так понятней?
|
|||
3
asady
21.03.12
✎
09:28
|
(2) где юзер будет ими оперировать?
|
|||
4
Fish
21.03.12
✎
09:30
|
(2) А не проще пользователю всё делать сразу в 1С? Что за изврат?
|
|||
5
mzelensky
21.03.12
✎
09:31
|
(3) слушай, я реально так дебильно объясняю..или это ты не выспался?
Еще раз...выгружаю данные из 1С в эксель (балванку для заполнения). В этой болванке присутствуют колонки представляющие собой список значений (список выбора), которые пользователь должен не набивать ручками ,а просто выбрать одно из значений. Вот эти самые значения будут выгружены из 1С!!! Пользователь запоняет балванку и потом эти данные опять загружаются в 1С!!! |
|||
6
Tatitutu
21.03.12
✎
09:31
|
Меню - Данные - Проверка - Список значений
|
|||
7
Tatitutu
21.03.12
✎
09:31
|
With Selection.Validation
.Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=R7C4:R18C4" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With |
|||
8
mzelensky
21.03.12
✎
09:31
|
(4) давай без "не хочу делать так, как просят" - если я говорю, что мне нужно это сделать, значит мне нужно ИМЕННО ЭТО!
|
|||
9
mzelensky
21.03.12
✎
09:32
|
(6)О! тебя то и ждал!
Я смотрю у тебя большой опыт работы с экселем :) Это все из собственного опыта или может есть послезные ссылки в инете, где это можно подглядеть??? |
|||
10
mzelensky
21.03.12
✎
09:34
|
(7) трабл в том ,что тут список формируется из диапазона значений ,которые присутствуют в листе - "xlBetween, Formula1:="=R7C4:R18C4"". А можно наполнить список сразу из 1С, без заливки этих данных в эксель, чтобы потом по этому диапазону сделать список?
|
|||
11
Tatitutu
21.03.12
✎
09:42
|
(10) давай подскажу
создай ему список в Ексел и присвой имя а потом как написал |
|||
12
Tatitutu
21.03.12
✎
09:46
|
(9) большой собственный жизненный опыт - EXCEL может практически Все
посмотри - может натолкнет на свое решение: Как из 1С правильно УКАЗАТЬ MS EXCEL как нужно печатать документы ! http://infostart.ru/public/62648/ Из 1С записать формулу в ячейке MS EXCEL http://infostart.ru/public/61933/ |
|||
13
mzelensky
21.03.12
✎
09:53
|
(11) "создай ему список в Ексел и присвой имя" - в смысле просто создать список или еще и наполнить?!
|
|||
14
mzelensky
21.03.12
✎
09:54
|
(12) я еще вчера эти статьи перебирал...там немного не то...
|
|||
15
Tatitutu
21.03.12
✎
09:57
|
(14) а то и смотрю даже плюса не поставил :-)
немного попозже напишу код тебе |
|||
16
mzelensky
21.03.12
✎
10:05
|
(15) я честно говоря даже и не глянул, что статьи твои :)
Поискал в инете, нашел что-то типа этого: http://forum.ixbt.com/topic.cgi?id=23:30034 но тут тоже сперва заполняют яцейки значениями, а потом по этим яцейкам строят список - как-то можно обойтись без этого? сразу загнать значения в список? |
|||
17
mzelensky
21.03.12
✎
10:12
|
(15) вроде дошло!!!
Range("A2").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="Максим, Иван, Николай" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With |
|||
18
mzelensky
21.03.12
✎
10:14
|
(17) + осталось ток понять, как назначить этот список не только ячейке "A2", а сразу всему столбцу "А"... разумеется если прописать просто "А" вместо "А2" пишет ошибку...
|
|||
19
Axel2009
21.03.12
✎
10:18
|
Range("A:A")
|
|||
20
Axel2009
21.03.12
✎
10:19
|
почитай лучше про запись макросов.
|
|||
21
mzelensky
21.03.12
✎
10:20
|
(20) вчера на это пол дня убил (на группировку колонок) - получилось, а сегодня нашел код, как можно все это без макросов делать :)
|
|||
22
mzelensky
21.03.12
✎
10:25
|
(19) спасибо за подсказку :)
|
|||
23
Tatitutu
21.03.12
✎
10:51
|
(20) это конечно хорошо, но всегда там явно пишет VBA
все можно сделать намного проще (22) выбирай один из 4 вариантов (какой хочешь на 1С написать) http://www.planetaexcel.ru/tip.php?aid=34 |
|||
24
mzelensky
21.03.12
✎
11:11
|
(23) да у меня вроде получилось вот так:
MR = Книга.VBProject; NM = MR.VBComponents.Add(1); NM.CodeModule.InsertLines(1,"Sub Макрос_СписокЗначений()"); NM.CodeModule.InsertLines(2," Range(Cells(2, "+строка(СчКолонка-1)+"),Cells(10, "+строка(СчКолонка-1)+")).Select"); NM.CodeModule.InsertLines(3," With Selection.Validation"); NM.CodeModule.InsertLines(4," .Delete"); NM.CodeModule.InsertLines(5," .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _"); NM.CodeModule.InsertLines(6," xlBetween, Formula1:=""1, 2"""); //NM.CodeModule.InsertLines(7," .IgnoreBlank = True"); //NM.CodeModule.InsertLines(8," .InCellDropdown = True"); //NM.CodeModule.InsertLines(9," .InputTitle = """); //NM.CodeModule.InsertLines(10," .ErrorTitle = """); //NM.CodeModule.InsertLines(11," .InputMessage = """); //NM.CodeModule.InsertLines(12," .ErrorMessage = """); //NM.CodeModule.InsertLines(13," .ShowInput = True"); NM.CodeModule.InsertLines(7," End With"); NM.CodeModule.InsertLines(8,"End Sub"); Эксель.Run(Книга.Name+"!Макрос_СписокЗначений"); ток проблема в том, что мне эту штуку надо в цикл засунуть, т.к. именно в цикле я прогоняю колонки, которые должны стать списком значений. В результате вылазиет ошибка при "Эксель.Run(Книга.Name+"!Макрос_СписокЗначений");" - типа такого макроса НЕТ! |
|||
25
mzelensky
21.03.12
✎
11:15
|
Все, победил! Извиняюсь за собственную тупость :)
|
|||
26
Tatitutu
21.03.12
✎
11:18
|
(24) забей ! чтобы создавать макросы программно нужен немного другой уровень
(и полные права на VBA у пользователя) можно все намного проще , сделай программно из 1С //в ячейки с А1 по А10 забей свои значения //этим ячейкам присвоим новое имя Range(Cells(1, 1), Cells(10, 1)).Name = "НужныйСписок" //в нужной ячейке добавим выбор из нужного списка Range("B13").Validation.Add 3, 1, 1, "=НужныйСписок" //все ! |
|||
27
mzelensky
21.03.12
✎
11:28
|
(26) хороший метоД, но минус один - нужно забивать значения исходыне значения:
//в ячейки с А1 по А10 забей свои значения //этим ячейкам присвоим новое имя Range(Cells(1, 1), Cells(10, 1)).Name = "НужныйСписок" //в нужной ячейке добавим выбор из нужного списка А только потом по ним формируем список. В варианте (24) я могу сразу занести список в колонку, без промежуточного забивания значений: NM.CodeModule.InsertLines(6," xlBetween, Formula1:=""" +Строка(СтрокаДляСпискаЗначений)+"""); |
|||
28
mzelensky
21.03.12
✎
12:08
|
(26) слушай, а не знаешь - почему в список могут не все значения попадать?
Например, формирую строку для списка значений: СтрокаЕдиницыИзмерения=""; Запрос=новый запрос; Запрос.Текст="ВЫБРАТЬ | КлассификаторЕдиницИзмерения.Ссылка, | КлассификаторЕдиницИзмерения.Наименование КАК Наименование, | КлассификаторЕдиницИзмерения.МеждународноеСокращение КАК МСокр |ИЗ | Справочник.КлассификаторЕдиницИзмерения КАК КлассификаторЕдиницИзмерения |ГДЕ | КлассификаторЕдиницИзмерения.ПометкаУдаления = ЛОЖЬ | |УПОРЯДОЧИТЬ ПО | Наименование |АВТОУПОРЯДОЧИВАНИЕ"; Выборка=Запрос.Выполнить().Выбрать(); Пока выборка.Следующий() цикл СтрокаЕдиницыИзмерения=СтрокаЕдиницыИзмерения+", "+СокрЛП(выборка.Наименование); КонецЦикла; СтрокаЕдиницыИзмерения=Сред(СтрокаЕдиницыИзмерения,3); В выборке 44 элемента и все они попадают в "СтрокаЕдиницыИзмерения", но когда открывается экселевский лист в списке выбора только первые 14 элементов. Финт ушами, делаю упорядочивание этого запроса в обратную сторону (разумеется количество элементов опять таки 44), но в эксель уже попадает 17 элементов. Затем выгрузил не "Наименование", а "МеждународноеСокращение" - в эксель папали все 44 элемента ... от чего это зависит не пойму |
|||
29
mzelensky
21.03.12
✎
12:28
|
ап
|
|||
30
mzelensky
21.03.12
✎
12:57
|
?ап?
|
|||
31
mzelensky
22.03.12
✎
14:15
|
апну еще разок...
|
|||
32
mzelensky
22.03.12
✎
16:44
|
В общем, после некоторых разборов выяснелась ошибочка одна (ньанс так сказать)...
Когда я пытаюсь заполнить диапазон значений : xlBetween, Formula1:="""+ СтрокаЕдиницыИзмерения +""" " То получается .что строка "СтрокаЕдиницыИзмерения" не может превышать 256 символов...точнее превышать то может, но все что выше 256 она просто обрезает! Следовательно у меня в списке получаются не все значения, а только часть! Как это победить???? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |