нельзя установить свойство numberformat класса range vba

«Невозможно установить свойство NumberFormat класса Range»

Этот код работает уже много лет. Я подумал, что, может быть, случайно нажал клавишу, но мне кажется, что я этого не вижу. Я вдруг получаю ошибку:

Невозможно установить свойство NumberFormat класса Range

В приведенном ниже коде:

2 ответа

Проблема, обнаруженная в чате, заключалась в том, что книга имела более 64 000 форматов, из-за чего пользователь получал сообщение об ошибке « Слишком много разных форматов ячеек » в Excel.

Тема: в Excel появляется сообщение об ошибке «Слишком много разных форматов ячеек»

ЦИТАТА из приведенной выше ссылки

В файлах Microsoft Excel 2007/2010 может появиться следующее сообщение об ошибке;

Excel обнаружил в файле нечитаемое содержимое

Эта проблема возникает, когда книга содержит более 4000 различных комбинаций форматов ячеек в Excel 2003 или 64 000 в Excel 2007 и более поздних версиях.

Я столкнулся с этой проблемой, используя надстройку Fuzzy LookUp в Office365ProPlus. После того, как я запустил FuzzyLookUp, было сгенерировано только 10 строк вывода, и это сообщение появилось.

Проблема была вызвана моей локальной настройкой Excell.

Чтобы исправить это, мне пришлось изменить десятичный разделитель с запятой на точку в общих настройках Excel.

С моей стороны, это отлично решило проблему.

Источник

forum.clarionlife.net

Место общения программистов, форум разработчиков БД на Clarion

[OLE] [Excel] Установка формата ячейки

Модератор: Дед Пахом

Сообщение Гость » 31 Март 2004, 8:44

(С55EE(G); WinXP,98; ExcelXP,2000)

OLE Automation Error
«Нельзя установить свойство NumberFormat класса Range»

==================================================
3. Я хочу записать в ячейку дробное число
?OLE <'Cells(' & i & ',' & j+1 & ').Value'>= YVol[m#,j]
как обеспечить распознавание числа ^^^^^^^^
как дробного числа с DecimalSeparator = «.» и автоматического приведение его к DecimalSeparator, установленному в системе.
Т.е. чтобы из Clarion в Excel число записывалось именно как число и именно с тем DecimalSeparator, который установлен в системе

Вариант (ExcelXP)
?OLE <'Application.DecimalSeparator'>= ‘».»‘
?OLE <'Application.UseSystemSeparators'>= FALSE
Не работает под Excel2000 (ну нет там таких свойств)
Пробую обойти это так:

но здесь проблема с NumberFormat (см. Выше) (оставить в том виде что есть (текстовом) нельзя, так как на его основе не строятся ChartObjects)

Посоветуйте, плиз: как надо правильно записывать в ячейки Excel дробные числа независимо от настроек системы

Сообщение Гость » 01 Апрель 2004, 8:36

ГОСПОДА КЛАРИОНИСТЫ!
Если не поможете, начну о вас плохо думать.

Раз никто не отвечает, то либо лениво писать, либо некогда. Зачем сразу «плохо думать»

От себя: Конкретно ручками писать работу с Excel через OLE не писал.
Сразу стал писать используя OfficeTemplate. Там это без проблем, например:

Сообщение Гость » 01 Апрель 2004, 11:08

Я при выводе дробного числа в Excel делаю так

Сообщение Гость » 01 Апрель 2004, 11:36

Да при чем тут это?
Мне не нужно менять установки в системе.

Мне нужно только
1. Правильно вывести число с десятичной точкой в Excel
2. Задать числовой формат ячейки в Excel

Я не понял, что следующий код не работает?:

Если правильно понял то проблема десятичной точки тогда
Format(FSN:SNMBR,@n5`2)
Меняет точку на запятую

Liudvikas Jagucanskis
Написал: ClaList(2)

Сообщение Гость » 01 Апрель 2004, 14:31

В случае, когда в качестве системного десятичного разделителя установлена запятая.
НЕ работает вот что

?OLE <'Selection.NumberFormat'>= ‘»0.00″‘
выдает ошибку:
OLE Automation Error
«Нельзя установить свойство NumberFormat класса Range»

Читайте также:  кому нельзя принимать милдронат

и наоборот: использовать «0,00», когда в системе разделителем является точка, тоже нельзя. Ошибки при работе нет, но вот данные в Excel искажаются.

у Вас в настройках системы какой десятичный разделитель установлен?
(и еще если можно: какой Excel, какая Windows?)

Я тут покопался малость и вот что выяснил:

Ошибки при работе нет, но вот данные в Excel искажаются.

Тогда почему в коде VBA (в макросе Excel) стоит именно «0.00».

Подскажите: как определить какой символ используется в качестве десятичного разделителя? Я так понимаю это через API делать надо?
Приведите пример вызова функции API в Clarion.


Best regards,
Ivan
Написал: ClaList(2)

Сообщение Гость » 01 Апрель 2004, 18:44

Ну почему бы самому не написать 1 раз функцию, чтоб потом ее пользовать в каждом проекте?

format_str = ‘»0’ & sys:get_decimal_divider & ’00″‘


Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

дык я с удовольствием
знал бы я как к ней подступиться

это что за выражение.
это и имеется ввиду под функцией?
а почему «sys:» вначале?

Ну что ребята, так сложно мс-дэ-эну почитать?

где конкретно тебя должно интересовать 4 поле сверху

О-о-о, сенкс, об этой функции не знал!


Best regards,
Maxim Yemelyanov
Написал: ClaList(2)

Источник

Нельзя установить свойство numberformat класса range vba

Написанное приложение, прекрасно работающие с Excel’ем на собственном компьютере, часто, после переноса приложения на другой компьютер, оказывается неработоспособным! Отчего так происходит? В этой статья я собираюсь описать разницу в работе русской версии Excel’я из VBA и через COM интерфейс (библиотеку типов, TLB) из Delphi. Почему возникли расхождения? Ответа на эти вопросы у Microsoft я не нашел…

Примечание:
сравнивались только русская и английская (American English) версии Excel с номером версии 9.0 (MS Office 2000) и выше. Другие версии не рассматривались.

Описание типов объектов, применяемых в примерах:

Используемые в примерах » дополнительные » модули:
OleServer, Excel2000, Office2000 из стандартной поставки Delphi Enterprise версии 6 и выше.

У вас русская версия Excel?

Определить наличие русской версии Excel возможно так:

Примечание:
в Office97 свойство LanguageSettings отсутствует

Далее мы рассмотрим приемы работы с » русским » Excel’ем.

Работа со свойством объекта Range NumberFormat

NumberFormat и NumberFormatLocal четко работают в VBA и полностью соответствуют своему содержанию в названиях, но только не при работе из Delphi. В Excel2000.pas (D7) они описаны как

Формат даты

Формат чисел. Разделители. (DecimalSeparator, ThousendSeparator)

И это еще не все! Заходим в настройки Excel’я «Сервис/Параметры» переходим на закладку «Международные» и видим опять «Разделитель целой и дробной части», «Разделитель разрядов» и чекбокс «Использовать системные разделители». Т.е. использование системных разделителей не может гарантировать правильного применения при форматировании чисел в Excel’е. Решение: использовать свойство ExcelApplication.International (о нем дальше). Причем, даже при установленном свойстве ExcelApplication.UseSystemSeparators = False и отличных от системных ExcelApplication.DecimalSeparator и ExcelApplication.ThousandsSeparator, ExcelApplication.International отработает корректно.

Далее рассмотрим примеры работы (или не работы), приняв «стандартные» настройки для русских Windows:

Примечание:
в примерах значения записываются в Value2 для предотвращения форматирования «на лету» самим Excel’ем. Так число 123.45, записанное в Value будет автоматически отформатировано Excel’ем в формат валюты, а присвоение Value = Date будет автоматически переведено в формат даты. Запись в Value2 «воспринимает» значение как Double. Подробнее смотрите в справке VBA для Excel’я.

Решения (с использованием ExcelApplication.International):

Читайте также:  какие вопросы можно задать подруге 12 лет

Для получения формата даты можно написать функцию:

Для формата валюты:

Тот же принцип можно применить к времени и другим типам. Также смотрите другие индексы для свойства International (их там много) в справке VBA. Например, получить «основной» (general) формат можно так:

установить основной формат еще можно установить, записав в NumberFormat «пустую» строку, т.е. указать, что нет форматирования для чисел (даты):

Цвет в формате

К сожалению, не лучше обстоит дело и с цветом в форматах. Т.е. цвет в Delphi можно задавать только по-русски: Перечень цветов по-русски, которые можно задавать в формате: черный, красный, зеленый, синий, фиолетовый, желтый, белый. Список небогатый.

Формулы на листе

Здесь приятней и проще пользоваться английскими формулами. Но, иногда, существует необходимость писать формулы из вариантного массива…

Примечание:
системные переменные ListSeparator, DateSeparator описаны в модуле System.

Запись формул из Variant-ного массива

Запись в свойство Formula, FormulaLocal, Value, Value2 из Variant-ного массива идентична в русском Excel’е и при работе из Delphi. Но, если мы хотим вставлять формулы прямо из массива, все они должны быть только русскими! Вот здесь то и всплывает необходимость определения наличия русской версии Excel’я (впрочем, это уже касалось задания цвета в свойстве NumberFormat).

Код на Delphi (тут мы применим знание написания русских формул, описанный выше, а именно ListSeparator):

Примечание:
из примера видно, что при записи из Variant-ного массива в Formula, FormulaLocal, Value, Value2 не имеет значения, какой стиль ссылок используется: A1 и R1C1 работают идентично. Но это не относится к свойствам FormulaR1C1 и FormulaR1C1Local, которые принимают формулы ТОЛЬКО в стиле R1C1.

Создание колонтитулов

Давайте запустим запись макроса создания колонтитула (меню в Excel «Сервис/Макрос/Начать запись…» ). Теперь откроем параметры страницы (меню «Файл/Параметры страницы…»). Создадим центральный нижний колонтитул «Лист &[Страница] из &[Страниц]» шрифтом «Arial», «полужирный» и размером 8pt. Слова «Лист» и «из» с начертанием «обычный». После «сокращения» макроса получим:

Примечание:
если вы хотите увидеть работу вашего макроса в действии (чтоб работал PrintPreview), обязательно внесите на лист хоть какие-нибудь данные.

Вроде бы все ясно, осталось только переписать его под Delphi:

Припоминая русификацию еще Excel’я 4-й версии, напишем русские эквиваленты:

Сработало! Ну, и теперь добавим распознавание русской версии:

Вывод: при вставке кодов форматирования из Delphi в русский Excel должны вставляться только русские коды форматирования. А где их взять? Вот список кодов форматирования, полученных методом пробы:

Работает! Т.е. начертания (Style у класса TFont в Delphi) шрифтов можно уверенно писать по-английски. Или заменить на коды форматирования:

Примечание:
для перевода строки в колонтитуле или ячейке используйте симол LF, ASCI код 10 (
#10 ):

Выводы

При работе с русским Excel’ем из Delphi необходимо соблюдать следующие правила:

Мне не удалось найти документацию, касающуюся моментов описанных выше. Весь материал построен чисто на собственном опыте. И еще: не было возможности проверить на полностью английских версиях Windows и Office.

Все примеры тестировались на Delphi 6, Delphi 7, на русских версиях WindowsXP + OfficeXP, Windows98SE + Office2000 SR?1.

Источник

Нельзя установить свойство numberformat класса range vba

Шустрый

Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет

Работаю с Excel через Microsoft.Office.Interop.Excel.

Возникла проблема: при вызове

Читайте также:  Как называется машина черепашек ниндзя
Код
string decimalCellFormat = «0» + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + «00»;

У юзеров винды могут быть любые. Чем это лечится?

Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.7.2007

Репутация: нет
Всего: нет

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49

Шустрый

Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет

Код
try
<
excel.DisplayAlerts = false;
workbook = excel.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
>
catch (COMException e)
<
switch (e.ErrorCode)
<
case COMConstants.Excel_InvalidTypeLibCulture:
savedCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo(«en-US»);
excel.DisplayAlerts = false;
workbook = excel.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
break;
default:
throw;
>
>

3) На деле выяснилось следующее:
При отображении дробей (если в ячейку было передано decimal-значение) используется NumberDecimalSeparator, но при передаче Excel-ю в строке формата нужно использовать CurrencyDecimalSeparator! Т.е. изначально следовало писать так:

Код
string decimalCellFormat = «0» + CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator + «00»;

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49

Шустрый

Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »

[ Время генерации скрипта: 0.1119 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Нельзя установить свойство numberformat класса range vba

Профиль
Группа: Участник
Сообщений: 25
Регистрация: 6.1.2007
Где: Майкоп

Репутация: нет
Всего: нет

Шустрый

Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет

Бывалый

Профиль
Группа: Участник
Сообщений: 208
Регистрация: 13.4.2006

Репутация: нет
Всего: 1

Evil Skynet

Профиль
Группа: Комодератор
Сообщений: 3287
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108

Код
if FileExist() then
begin
// есть файл
end
else
begin
// нет файла
end;

3. Открывать эксель не новым сервером, а присединяться к запущенному серверу. там проверять все открытые книги.

Цитата(Неопытный @ 17.3.2007, 09:24 )
Как в его отформатировать, чтобы в ячейке Excell оно выглядело 123 657, 12, то есть имело формат
Цитата(Albinos_x @ 17.3.2007, 12:53 )
Установить в Эксель формат ячейки текстовый.

Шустрый

Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет

А как процентный формат установить

ExcelApplication1.Range[‘C’+inttostr(rr+2),EmptyParam].NumberFormat:=’#,##0.00’;

Шустрый

Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет

Evil Skynet

Профиль
Группа: Комодератор
Сообщений: 3287
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108

это просто некоторые особенности при работе в разных версиях Excel, этот должен работать. по идее. для стандартных настроек.

или используй функцию с www.delphikingdom.com

Код
function XL_GetNumberFormat(XLApp: ExcelApplication): String;
begin
Result := Format(‘#%s##0%s%s’, [XLApp.International[xlThousandsSeparator, lcid], XLApp.International[xlDecimalSeparator, lcid],
StringOfChar(‘0’, Integer(XLApp.International[xlCurrencyDigits, lcid]))]);
end;

Шустрый

Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

Репутация: нет
Всего: нет

Бывалый

Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет

говорит что «Нельзя установить свойство NumberFormat класса Range».

Бывалый

Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »

[ Время генерации скрипта: 0.1273 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Портал про кино и шоу-биз