Нельзя установить свойство numberformatlocal класса range microsoft excel

 

РНС

Пользователь

Сообщений: 20
Регистрация: 09.12.2011

Добрый день!
Скачал fuzzy lookup с официального сайта. Вроде делаю все по прилагаемому описанию (к сожалению оно на английском, возможно что-то не так устанавливаю). После запуска обрабатывает почему-то лишь половину списка, причем некоторые выходные данные выдает неправильно и выскакивает сообщение «Нельзя установить свойство NumberFormat класса Range». Подскажите, пожалуйста, что я делаю не так?

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

Эта ошибка, скорее всего, связана с локализацией – в качестве разделителя целой и дробной части числа, похоже, ожидается точка, а не запятая (как в русской локализации).
Зайдите в Параметры Excel – Дополнительно – Снимите флажок c <Использовать системные разделители> , в качестве разделителя целой и дробной части впишите точку, а в качестве разделителя разрядов – пробел.

 

РНС

Пользователь

Сообщений: 20
Регистрация: 09.12.2011

#4

07.04.2014 15:52:39

Получилось, спасибо! Сообщение об ошибке перестало выскакивать, текстовые значение «подогнались» идеально, а вот с числами проблема осталась. Впрочем, это уже не проблема, с этим справится и обычный ВПР. Может, есть возможность и здесь отрегулировать? На всякий случай прилагаю что у меня получилось.

Прикрепленные файлы

  • новинки.xlsx (26.39 КБ)

Группа: Пользователи

Ранг: Новичок

Сообщений: 14


Репутация:

3

±

Замечаний:
0% ±


Здравствуйте!
Сравниваю две таблицы по неполному соответствию с помощью расширения Fuzzy Lookup, выскакивает ошибка «Нельзя установить свойство NumberFormatLocal класса Range» и процесс останавливается.
Пожалуйста, подскажите как это исправить.

К сообщению приложен файл:

6948956.jpg
(40.9 Kb)

Сообщение отредактировал 20tav10Среда, 09.02.2022, 13:24

   zmb

24.07.07 — 18:26

Борюсь с такой вот фигней:



Книга = Новый ComОбъект(«Excel.Application»);

Книга.Application.Workbooks.Open(ИмяФайла);

Лист = Книга.Worksheets(1);

Лист.Range(«A1:A10).NumberFormat = «[$$-409]#,##0.00»; //собсно тут и ругается

Сама ошибка — «Ошибка при установке значения атрибута контекста (NumberFormat): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range»

Через поиско я понял, что был далеко не одинок в данной проблеме, не раз находил для себя, вроде бы и новое решение, перебивая модуль, надеясь, что щас вот оно заработает, но проблема не решалась, в итоге вылез на такой вот обнадеживающий топик:

http://forum.foxclub.ru/read.php?28,253200,253200,quote=1

Платформа у меня 8.0.18.2

Знает кто вообще, решаема ли эта проблема, и как?

   zmb

1 — 24.07.07 — 18:28

   NS

2 — 24.07.07 — 18:31

не верю!

Синтаксический контроль конструкция из (0) не пройдет.

Лист.Range(«A1:A10).

Это как?

   zmb

3 — 24.07.07 — 18:42

уважаемый, я это не из рабочего модуля копировал, а просто набросал для примера, чтобы лишь в общем показать о чем реч. За синтаксис сори, а где именно ошибка, я показал…

   NS

4 — 24.07.07 — 18:57

Помню глюк с точкой. Вместо точки в 0.00 попробуй запятую.

   zmb

5 — 24.07.07 — 19:01

Мда, формат таки записался, спасибо уже прогресс :)

   NS

6 — 24.07.07 — 19:03

(5) Спасибо в карман не положишь :)

   zmb

7 — 24.07.07 — 19:05

Странно, хотя через те же макросы выдал точку

   у лю 427

8 — 24.07.07 — 19:06

(5) самое прикольное, что на другой машине у тебя может и не записаться…

И это зависит от региональных установок и экселя…

P.S. решение этой проблемы есть…

   NS

9 — 24.07.07 — 19:06

(7) Фича известная. И давняя. Помницца Бекас никак не мог решение найти.

   у лю 427

10 — 24.07.07 — 19:08

(9) так и не нашел? там же все примитивно делается….

   asady

11 — 24.07.07 — 19:11

(0)

вот так работает:

  WorkBook=Application.WorkBooks.Open(«Z:test.xls»);

   Скрипт=Новый COMОбъект(«MSScriptControl.ScriptControl»);

   Скрипт.Language = «javascript»;

   List = WorkBook.Worksheets(1);

   Скрипт.AddObject(«List»,List);

   Скрипт.eval(«List.Range(«»A1:A10″»).NumberFormat = «»[$$-409]#,##0.00″»;»);

   WorkBook.save();

   Application.Quit();

   NS

12 — 24.07.07 — 19:18

(9) Про замену точки на запятую я ему сказал, а дальше разобрался он аль нет я не знаю.

ExcelApplication.International?

   NS

13 — 24.07.07 — 19:21

Проблема похоже в том, что NumberFormat из 1C срабатывает как NumberFormatLocal

   у лю 427

14 — 24.07.07 — 19:37

(13) возможно. У меня были такие подозрения, но решение нашел раньше…

P.S. причем не оязательно точка-запятая…

(11) пристроенный к телеге паровоз…

   ШтушаКутуша

15 — 24.07.07 — 19:39

(0)
Книга = Новый ComОбъект(«Excel.Application»);
КакБыКнига=Книга.Application.Workbooks.Open(ИмяФайла);

   smaharbA

16 — 24.07.07 — 19:50

Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]#,##0.00»;

   smaharbA

17 — 24.07.07 — 19:52

Вернее
Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]# ##0,00»;

   NS

18 — 24.07.07 — 19:52

(16) А это тут причем???

   smaharbA

19 — 24.07.07 — 19:53

(18) см (17)

   smaharbA

20 — 24.07.07 — 19:53

+(18) а референсе на всяк случай, если стиль ссылок не тот, то все — пипец

   NS

21 — 24.07.07 — 19:53

(19) У него Range() и так срабатывает.

   NS

22 — 24.07.07 — 19:55

NumberFormatLocal ничего не меняет.

   smaharbA

23 — 24.07.07 — 19:56

(22) меняет, см (17)

   NS

24 — 24.07.07 — 19:58

(23) Смотрю, длина строки выросла на 5 символов. Больше ничего не изменилось :)

Запятая ошибочная убрана в шаблоне, но сработает точно так-же как и NumberFormat

   smaharbA

25 — 24.07.07 — 20:00

NS я тебя конечно уважаю, но счас проверю и напишу, все работает, это уж точно, тема была уже далеко не один разок

   NS

26 — 24.07.07 — 20:00

см. (8) и (12,13)

   NS

27 — 24.07.07 — 20:01

(25) Угу, и так-же всё работает с NumberFormat

   smaharbA

28 — 24.07.07 — 20:12

[1C]
//*******************************************

Процедура Сформировать()

   Ексель=СоздатьОбъект(«Excel.Application»);

   Ексель.ReferenceStyle=1;

   Книги=Ексель.Workbooks;

   Книга=Книги.Add();

   Листы=Книга.Worksheets;

   Лист=Листы.item(1);

   Ячейки=Лист.Cells;

   Диапазон=Ячейки.Range(«A1:A10»);

   Диапазон.NumberFormatLocal = «[$$-409]# ##0,00»;

   Сообщить(Ячейки.Range(«A1»).NumberFormat);

   Сообщить(Ячейки.Range(«A1»).NumberFormatLocal);

   Ячейки.Range(«A1»).Value=10245.23;

   Ячейки.Range(«A1»).EntireColumn.AutoFit();

   Сообщить(Ячейки.Range(«A1»).Text);

   Ексель.Visible=-1;

КонецПроцедуры

[/1C]

   NS

29 — 24.07.07 — 20:14

Ну и?

А если теперь попробовать

Диапазон.NumberFormat = «[$$-409]# ##0,00»;

   smaharbA

30 — 24.07.07 — 20:15

(27) работает, если формат «локаль» задан, как в (17)

   smaharbA

31 — 24.07.07 — 20:15

(29) да

   NS

32 — 24.07.07 — 20:16

Да, в смысле они работают одинаково? :)

   smaharbA

33 — 24.07.07 — 20:16

(32) ага ))

   NS

34 — 24.07.07 — 20:18

Блин, немного поцарапали машину, повезли ремонтировать по Каско.

Там всё сделали, и сказали (показали) что машина крашенная!!!

Не поверили — нам показали целый цех, где КРАСЯТ НОВЫЕ МАШИНЫ.

Говорят 30% новых машин царапанные/битые.

   smaharbA

35 — 24.07.07 — 20:21

(34) жизнь прошла стороной ?

   smaharbA

36 — 24.07.07 — 20:22

я тут приору увидал, десятка лучче…

   NS

37 — 24.07.07 — 20:23

(35) Собирались её продавать — теперь уйдет чуть дешевле :(

по идее пустяки, но новость меня ошарашила. Там варят и красят новые иномарки ценой 30, 40, 50 Килобаксов. Люди думая что покупают новую машину в салоне, на самом деле покупают битую машину.

   NS

38 — 24.07.07 — 20:25

(36) У нас 15-ая, с модным черным бампером. Оказалось что заводские бамперы только черные. В итоге оказалось что купили в салоне машину с битыми и перекрашенными бамперами, и перекрашена одна задняя дверь. Покупали три года назад — наверно сейчас салону уже претензий не предъявить…

   NS

39 — 24.07.07 — 20:25

Опечатался — заводские только серые.

   у лю 427

40 — 24.07.07 — 20:27

(34) а ты ВИДЕЛ УСЛОВИЯ ПЕРЕВОЗКИ?

Везли спецзаказом тачку в КОНТЕЙНЕРЕ — так эти уроды буржуи ее даже толком не закрепили, один борт протерся до дыр. Меняли дверь и крыло.

В автовозах — что угодно бывает…

P.S. в контейнере тачку не закрепили толком, но фиксаторы максимальных ускорений — ПОСТАВИЛИ!!! Полные уроды. Хорошо, что ни один не сработал. Так что выставили счет на 35 штук баксов за ремонт, шлифовку и покраску…

   NS

41 — 24.07.07 — 20:29

(40) Нет, не видел, но теперь знаю :(

Покупать новую машину резко расхотелось :(

  

Torquader

42 — 25.07.07 — 14:54

Excel — загадочная вещь.

Региональные установки для Excel и для 1C могут быть разные.

Кроме того, всё зависит от версии Excel.

P.S. а зачем такой сложный формат нужен ?

Модераторы:Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Gray[cLmT]

Сообщения:8
Зарегистрирован:18 мар 2009, 07:06

У меня другой вопрос, я в ячейке хочу сделать формат в ‘%’
выполняю команду:
Excel.WorkBooks[1].WorkSheets[1].Cells[6, 6].NumberFormat := ‘0.00%’;
в результате ошибка: «Нельзя установить свойство NumberFormat класса Range», может быть вы тут пожалуйста подскажите.

Аватара пользователя

Naeel Maqsudov

Сообщения:2551
Зарегистрирован:20 фев 2004, 19:17
Откуда:Moscow, Russia
Контактная информация:

19 мар 2009, 08:45

Странно.
Эта ошибка обычно возникает, если свойство read-only.
Также она может возникать, если Excel находися в определенном статусе. Например, ничего нельзя форматировать, пока Excel находится в режиме редактирования ячейки. Т.е. форматировать можно только символы в этой ячейке, а все остальное — нет.
Можно взглянуть на весь код, начиная от открыити книги, до места с ошибкой?

Gray[cLmT]

Сообщения:8
Зарегистрирован:18 мар 2009, 07:06

20 мар 2009, 05:35

Да, конечно:

Код: Выделить всё

procedure TForm1.Button2Click(Sender: TObject);
var
    Excel: Variant;
begin
    Excel := CreateOleObject('Excel.Application');
    Excel.WorkBooks.add;
    Excel.Visible := False;
    Excel.Range['B1', 'C10'].NumberFormat := '0.00%';

Gray[cLmT]

Сообщения:8
Зарегистрирован:18 мар 2009, 07:06

20 мар 2009, 05:39

и в этой же процедуре следом записываю в ячейки:

Код: Выделить всё

    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 1]:='Время';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 2]:='КОКС';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 3]:='Порфирит';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 4]:='Доломит';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 5]:='Шлак';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 6]:='КОКС';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 7]:='Доломит';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 8]:='Порфирит';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 9]:='Шлак';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 10]:='Всего шихты';
    Excel.WorkBooks[1].WorkSheets[1].Cells[1, 11]:='Мк';
    Excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Bold := True;

Аватара пользователя

Игорь Акопян

Сообщения:1419
Зарегистрирован:13 окт 2004, 17:11
Откуда:СПБ
Контактная информация:

20 мар 2009, 09:16

Выделяю в отдельную тему
[quote=»Gray[cLmT»]
У меня другой вопрос, я в ячейке хочу сделать формат в ‘%’
выполняю команду:
Excel.WorkBooks[1].WorkSheets[1].Cells[6, 6].NumberFormat := ‘0.00%’]

Изображение

Gray[cLmT]

Сообщения:8
Зарегистрирован:18 мар 2009, 07:06

23 мар 2009, 09:00

Попробывал с выделением… тоже ошибка

Код: Выделить всё

procedure TForm1.Button4Click(Sender: TObject);
var
    Excel: Variant;
begin
    Excel := CreateOleObject('Excel.Application');
    Excel.WorkBooks.add;
    Excel.Range['A1: C1'].Select;
    Excel.selection.Columns.NumberFormatLocal := '0.00%';
end;

———- Post added at 11:00 ———- Previous post was Вчера at 09:56 ———-

Лапухнулся… нужно запятую вместо точки… пардон.

Аватара пользователя

Naeel Maqsudov

Сообщения:2551
Зарегистрирован:20 фев 2004, 19:17
Откуда:Moscow, Russia
Контактная информация:

23 мар 2009, 09:55

На счет запятых и точек:

Свойства, заканчивающиеся на Local используют значения, в которых разделитель берется из национальных настроек. Так что ставбте на запятую или точку, а Sysutils.DecimalSeparator

This code has been working for ages. I thought maybe I accidently pressed a key but I cannot seem to see it. I suddenly get the error:

Unable to set the NumberFormat property of the Range class

in the below code:

Worksheets("Sheet1").Cells(y + k, x + j).Select
TempValue = Worksheets("Sheet1").Cells(y + k, x + j).Value
Worksheets("Sheet1").Cells(y + k, x + j).NumberFormat = "#,##0" //ERROR HERE
Worksheets("Sheet1").Cells(y + k, x + j).Value = TempValue

Siddharth Rout's user avatar

asked May 29, 2012 at 14:50

intrigued_66's user avatar

intrigued_66intrigued_66

15.7k49 gold badges117 silver badges184 bronze badges

8

The problem as discovered in Chat was the workbook had more than 64,000 formats because of which the user was getting the «Too many different cell formats» error message in Excel

Solution

Topic: You receive a «Too many different cell formats» error message in Excel

Link: http://support.microsoft.com/kb/213904

QUOTE from the above link

In Microsoft Excel 2007/2010 files may produce the following error message;

Excel found unreadable content in the file

This problem occurs when the workbook contains more than approximately 4,000 different combinations of cell formats in Excel 2003 or 64,000 in Excel 2007 and higher.

Solution as mentioned in the link is to download and run the XLStyesTool

Community's user avatar

answered May 29, 2012 at 15:35

Siddharth Rout's user avatar

Siddharth RoutSiddharth Rout

146k17 gold badges206 silver badges250 bronze badges

0

I met with this problem using Fuzzy LookUp AddIn in Office365ProPlus.
After I run FuzzyLookUp only 10 rows of output were generated and this message popped up.

Problem was caused by my local setting of Excell.

To fix it I had to change decimal separator from coma into dot under general Excel settings.

On my side it solved the problem perfectly.

answered Nov 7, 2019 at 14:15

Tomas Paul's user avatar

Понравилась статья? Поделить с друзьями:
  • Нельзя создать документ word
  • Нельзя редактировать формулы в word
  • Нельзя редактировать документ word что делать
  • Нельзя редактировать документы word
  • Нельзя преобразовать тип char к word