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
asked May 29, 2012 at 14:50
intrigued_66intrigued_66
15.7k48 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
answered May 29, 2012 at 15:35
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
РНС Пользователь Сообщений: 20 |
Добрый день! |
Hugo Пользователь Сообщений: 23250 |
|
ZVI Пользователь Сообщений: 4328 |
Эта ошибка, скорее всего, связана с локализацией – в качестве разделителя целой и дробной части числа, похоже, ожидается точка, а не запятая (как в русской локализации). |
РНС Пользователь Сообщений: 20 |
#4 07.04.2014 15:52:39 Получилось, спасибо! Сообщение об ошибке перестало выскакивать, текстовые значение «подогнались» идеально, а вот с числами проблема осталась. Впрочем, это уже не проблема, с этим справится и обычный ВПР. Может, есть возможность и здесь отрегулировать? На всякий случай прилагаю что у меня получилось. Прикрепленные файлы
|
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
Знает кто вообще, решаема ли эта проблема, и как?
1 — 24.07.07 — 18:28
2 — 24.07.07 — 18:31
не верю!
Синтаксический контроль конструкция из (0) не пройдет.
Лист.Range(«A1:A10).
Это как?
3 — 24.07.07 — 18:42
уважаемый, я это не из рабочего модуля копировал, а просто набросал для примера, чтобы лишь в общем показать о чем реч. За синтаксис сори, а где именно ошибка, я показал…
4 — 24.07.07 — 18:57
Помню глюк с точкой. Вместо точки в 0.00 попробуй запятую.
5 — 24.07.07 — 19:01
Мда, формат таки записался, спасибо уже прогресс
6 — 24.07.07 — 19:03
(5) Спасибо в карман не положишь
7 — 24.07.07 — 19:05
Странно, хотя через те же макросы выдал точку
8 — 24.07.07 — 19:06
(5) самое прикольное, что на другой машине у тебя может и не записаться…
И это зависит от региональных установок и экселя…
P.S. решение этой проблемы есть…
9 — 24.07.07 — 19:06
(7) Фича известная. И давняя. Помницца Бекас никак не мог решение найти.
10 — 24.07.07 — 19:08
(9) так и не нашел? там же все примитивно делается….
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();
12 — 24.07.07 — 19:18
(9) Про замену точки на запятую я ему сказал, а дальше разобрался он аль нет я не знаю.
ExcelApplication.International?
13 — 24.07.07 — 19:21
Проблема похоже в том, что NumberFormat из 1C срабатывает как NumberFormatLocal
14 — 24.07.07 — 19:37
(13) возможно. У меня были такие подозрения, но решение нашел раньше…
P.S. причем не оязательно точка-запятая…
(11) пристроенный к телеге паровоз…
15 — 24.07.07 — 19:39
(0)
Книга = Новый ComОбъект(«Excel.Application»);
КакБыКнига=Книга.Application.Workbooks.Open(ИмяФайла);
16 — 24.07.07 — 19:50
Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]#,##0.00»;
17 — 24.07.07 — 19:52
Вернее
Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]# ##0,00»;
18 — 24.07.07 — 19:52
(16) А это тут причем???
19 — 24.07.07 — 19:53
(18) см (17)
20 — 24.07.07 — 19:53
+(18) а референсе на всяк случай, если стиль ссылок не тот, то все — пипец
21 — 24.07.07 — 19:53
(19) У него Range() и так срабатывает.
22 — 24.07.07 — 19:55
NumberFormatLocal ничего не меняет.
23 — 24.07.07 — 19:56
(22) меняет, см (17)
24 — 24.07.07 — 19:58
(23) Смотрю, длина строки выросла на 5 символов. Больше ничего не изменилось
Запятая ошибочная убрана в шаблоне, но сработает точно так-же как и NumberFormat
25 — 24.07.07 — 20:00
NS я тебя конечно уважаю, но счас проверю и напишу, все работает, это уж точно, тема была уже далеко не один разок
26 — 24.07.07 — 20:00
см. (8) и (12,13)
27 — 24.07.07 — 20:01
(25) Угу, и так-же всё работает с NumberFormat
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]
29 — 24.07.07 — 20:14
Ну и?
А если теперь попробовать
Диапазон.NumberFormat = «[$$-409]# ##0,00»;
30 — 24.07.07 — 20:15
(27) работает, если формат «локаль» задан, как в (17)
31 — 24.07.07 — 20:15
(29) да
32 — 24.07.07 — 20:16
Да, в смысле они работают одинаково?
33 — 24.07.07 — 20:16
(32) ага ))
34 — 24.07.07 — 20:18
Блин, немного поцарапали машину, повезли ремонтировать по Каско.
Там всё сделали, и сказали (показали) что машина крашенная!!!
Не поверили — нам показали целый цех, где КРАСЯТ НОВЫЕ МАШИНЫ.
Говорят 30% новых машин царапанные/битые.
35 — 24.07.07 — 20:21
(34) жизнь прошла стороной ?
36 — 24.07.07 — 20:22
я тут приору увидал, десятка лучче…
37 — 24.07.07 — 20:23
(35) Собирались её продавать — теперь уйдет чуть дешевле
по идее пустяки, но новость меня ошарашила. Там варят и красят новые иномарки ценой 30, 40, 50 Килобаксов. Люди думая что покупают новую машину в салоне, на самом деле покупают битую машину.
38 — 24.07.07 — 20:25
(36) У нас 15-ая, с модным черным бампером. Оказалось что заводские бамперы только черные. В итоге оказалось что купили в салоне машину с битыми и перекрашенными бамперами, и перекрашена одна задняя дверь. Покупали три года назад — наверно сейчас салону уже претензий не предъявить…
39 — 24.07.07 — 20:25
Опечатался — заводские только серые.
40 — 24.07.07 — 20:27
(34) а ты ВИДЕЛ УСЛОВИЯ ПЕРЕВОЗКИ?
Везли спецзаказом тачку в КОНТЕЙНЕРЕ — так эти уроды буржуи ее даже толком не закрепили, один борт протерся до дыр. Меняли дверь и крыло.
В автовозах — что угодно бывает…
P.S. в контейнере тачку не закрепили толком, но фиксаторы максимальных ускорений — ПОСТАВИЛИ!!! Полные уроды. Хорошо, что ни один не сработал. Так что выставили счет на 35 штук баксов за ремонт, шлифовку и покраску…
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
asked May 29, 2012 at 14:50
intrigued_66intrigued_66
15.7k48 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
answered May 29, 2012 at 15:35
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