|
Загрузка из Эксель: Ошибка при вызове метода контекста (ПолучитьОбъект) | ☑ | ||
|---|---|---|---|---|
|
0
Старуха Шапокляк
26.02.10
✎
14:53
|
Загружаю из Эксель в спр.Номенклатура файл, содержащий два столбца:
"КодТовара" и "НовыйРеквизит" (этот реквизит мы завели в спр.Номенклатура и теперь его надо заполнить данными из файла). Все загружает нормально, только когда доходит до последнего элемента, выдает ошибку: {Форма.Форма(114)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран! Товар = Товар.ПолучитьОбъект(); по причине: Элемент не выбран! И Эксель зависает, хотя все подгрузил без ошибок... Вот мой код: НомерЛиста = 1; Попытка Excel = новый COMОбъект("Excel.Application"); Исключение Сообщить("Excel на компьютере не установлен."); Возврат; КонецПопытки; Excel.Workbooks.Open(ИмяФайла); Excel.Sheets(НомерЛиста).select(); Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count; ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13); Иначе ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; НомерКолонкиКодаТовара = 1; НомерКолонкиНовогоРеквизита = 2; Для а = 2 По 469 Цикл КодТовара = СокрЛП(Excel.Cells(а,НомерКолонкиКодаТовара).Value); НовыйРеквизит = СокрЛП(Excel.Cells(а,НомерКолонкиНовогоРеквизита).Value); Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара); Сообщить("Нашел Код номенклатуры" + КодТовара); Товар = Товар.ПолучитьОбъект(); Товар.НовыйРеквизит = НовыйРеквизит; Товар.Записать(); Конеццикла; Excel.ActiveWorkbook.Close(); |
|||
|
1
73
26.02.10
✎
14:55
|
С чего это такая уверенность, что "Нашел Код номенклатуры"?
|
|||
|
2
dk
26.02.10
✎
14:56
|
А кто будет проверять нашелся товар по коду или нет?
|
|||
|
3
Старуха Шапокляк
26.02.10
✎
15:07
|
(2) а как?
|
|||
|
4
skunk
26.02.10
✎
15:09
|
Товар.ПустаяССылка()
|
|||
|
5
73
26.02.10
✎
15:09
|
СП:
Пример: СтрокаКода = "840"; Валюты = Справочники.Валюты; НайденнаяСсылка = Валюты.НайтиПоКоду(СтрокаКода); Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда Сообщить("Валюты """ + СтрокаКода + """ еще нет"); КонецЕсли; |
|||
|
6
skunk
26.02.10
✎
15:10
|
(5)полный пипец
|
|||
|
7
73
26.02.10
✎
15:11
|
(6) Это пример из СП.
Полный пипец - это (4). Если уж так, как ты предлагаешь проверять, то: Товар.Пустая() |
|||
|
8
Старуха Шапокляк
26.02.10
✎
15:11
|
(4), (6) а как надо правильно, применительно к моему коду в (0)???
|
|||
|
9
73
26.02.10
✎
15:12
|
(8) Ну-ну...
|
|||
|
10
skunk
26.02.10
✎
15:14
|
(7)ну да согласен ... затупил с сылкой
|
|||
|
11
Старуха Шапокляк
26.02.10
✎
15:16
|
Так будет правильно?
...... Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара); Если Товар = Справочники.Номенклатура.ПустаяСсылка() Тогда Сообщить("Строка НЕ ЗАГРУЖЕНА. Код Номенклатуры "+КодТовара+" не найден в справочнике."); Продолжить; КонецЕсли; Сообщить("Нашел Код номенклатуры" + КодТовара); Товар = Товар.ПолучитьОбъект(); Товар.НовыйРеквизит = НовыйРеквизит; Товар.Записать(); Конеццикла; |
|||
|
12
dk
26.02.10
✎
15:22
|
сойдет
|
|||
|
13
Старуха Шапокляк
26.02.10
✎
15:36
|
Еще подскажите пож-та, т.к. даже если в файле меньше 469 строк, он все равно обрабатывал все 469 строчки, то я исправила строчки:
Было: Для а = 2 По 469 Цикл ... КонецЦикла; Стало: Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл ... КонецЦикла; Стал выдавать ошибку: {Форма.Форма(114)}: Ошибка при вызове метода контекста (SpecialCells): Произошла исключительная ситуация (Microsoft Office Excel): Unable to get the SpecialCells property of the Range class Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл по причине: Произошла исключительная ситуация (Microsoft Office Excel): Unable to get the SpecialCells property of the Range class |
|||
|
14
Старуха Шапокляк
26.02.10
✎
15:41
|
Вот мой текст итоговый:
НомерЛиста = 1; Попытка Excel = новый COMОбъект("Excel.Application"); Исключение Сообщить("Excel на компьютере не установлен."); Возврат; КонецПопытки; Excel.Workbooks.Open(ИмяФайла); Excel.Sheets(НомерЛиста).select(); Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count; ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13); Иначе ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; НомерКолонкиКодаТовара = 1; НомерКолонкиНовогоРеквизита = 2; //Для а = 2 По 469 Цикл Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл КодТовара = СокрЛП(Excel.Cells(а,НомерКолонкиКодаТовара).Value); НовыйРеквизит = СокрЛП(Excel.Cells(а,НомерКолонкиНовогоРеквизита).Value); Товар = Справочники.Номенклатура.НайтиПоКоду(КодТовара); Если Товар = Справочники.Номенклатура.ПустаяСсылка() Тогда Сообщить("Строка НЕ ЗАГРУЖЕНА. Код Номенклатуры "+КодТовара+" не найден в справочнике."); Продолжить; КонецЕсли; Сообщить("Нашел Код номенклатуры" + КодТовара); Товар = Товар.ПолучитьОбъект(); Товар.НовыйРеквизит = НовыйРеквизит; Товар.Записать(); Конеццикла; |
|||
|
15
Старуха Шапокляк
26.02.10
✎
15:57
|
up!
|
|||
|
16
dk
26.02.10
✎
16:00
|
SpecialCells(11)
|
|||
|
17
SlavCO
26.02.10
✎
16:01
|
Для а = 2 по ФайлСтрок Цикл
Попробуй так |
|||
|
18
dk
26.02.10
✎
16:01
|
хотя ...
нафига Excel.Cells(2,1).SpecialCells(21).Row просто 1 |
|||
|
19
Дикообразко
26.02.10
✎
16:05
|
ИМХО
предположу что нет 21 колонки КМК должно быть так: Для а = 2 По ФайлСтрок Цикл |
|||
|
20
dk
26.02.10
✎
16:08
|
(19) это не колонка
|
|||
|
21
Дикообразко
26.02.10
✎
16:08
|
(20) а что?
|
|||
|
22
dk
26.02.10
✎
16:09
|
открой для себя справку по VBA )
|
|||
|
23
Дикообразко
26.02.10
✎
16:11
|
(22) XlCellType constants Value
xlCellTypeAllFormatConditions. Cells of any format -4172 xlCellTypeAllValidation. Cells having validation criteria -4174 xlCellTypeBlanks. Empty cells 4 xlCellTypeComments. Cells containing notes -4144 xlCellTypeConstants. Cells containing constants 2 xlCellTypeFormulas. Cells containing formulas -4123 xlCellTypeLastCell. The last cell in the used range 11 xlCellTypeSameFormatConditions. Cells having the same format -4173 xlCellTypeSameValidation. Cells having the same validation criteria -4175 xlCellTypeVisible. All visible cells 12 ну и где там 21 ? |
|||
|
24
Дикообразко
26.02.10
✎
16:11
|
может надо было указать 12 ?
xlCellTypeVisible. All visible cells 12 |
|||
|
25
Дикообразко
26.02.10
✎
16:11
|
или 4 ?
|
|||
|
26
dk
26.02.10
✎
16:12
|
а вообще (14) сильно корявый код хоть и рабочий частично
Книга = Excel.Workbooks.Open(ИмяФайла); Лист = Книга.Sheets(НомерЛиста); НовыйРеквизит = СокрЛП(Лист.Cells(а,НомерКолонкиНовогоРеквизита).Value); ФайлКолонок = Лист.SpecialCells(11).Column; и т.д. и т.п. |
|||
|
27
Дикообразко
26.02.10
✎
16:12
|
(22) я смотрю ты открывать то умеешь, вот только пользоваться не очень
|
|||
|
28
dk
26.02.10
✎
16:13
|
(23) XlCellType <> номер колонки? ))
|
|||
|
29
dk
26.02.10
✎
16:15
|
))
|
|||
|
30
Дикообразко
26.02.10
✎
16:18
|
(28) да я вообще VBA в глаза не видел ....
раза 2 за 10 лет открывал, откуда мне знать? я просто предположил.. |
|||
|
31
Дикообразко
26.02.10
✎
16:18
|
и кстати угадал
|
|||
|
32
dk
26.02.10
✎
16:25
|
тебе виднее )
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |