2009-05-21 3 views
29

Я автоматизирую excel, используя макросистему как руководство к тому, что я должен делать с помощью автоматизации. Когда я отформатировать столбец как дату, макрос генерируется в NumberFormat для столбца быть:

[$-409]m/d/yy h:mm AM/PM;@ 

я пытаюсь расшифровать, что это значит. я собирать from googling, что значения в квадратных скобках являются «условие», и что, если условие:

$-409 

удовлетворяется, то он будет использовать NumberFormat

m/d/yy h:mm AM/PM 

если не , он использует NumberFormat

@ 

ссылки я найти сказать, что формат номера «@» является Текст Заполнитель

Так что мои вопросы:

  1. Что такое условная $ -409 тестирование? Сравнивает ли это что-то против -409 (т. Е. отрицательные четыреста девяти), и если да, то какой знак знак это сравнение с?

  2. Если условие терпит неудачу, и оно прибегает к текстовому заполнителю «at-sign», что он показывает как?

+0

Если вы указали примеры даты и времени, которые вы ввели в ячейку, и как Excel отформатировал ее, это было бы полезно –

+0

Как вы начали форматировать ячейку по дате, когда вы записали макрос? Я просто пробовал то же самое, и код VBA, который был выпущен, не имел условной части вообще. –

ответ

30

Для того, чтобы выяснить, что другие сказали:

код [$ -409] является локаль код, получающий в шестнадцатеричном формате. Префикс даты с определенным кодом локали определяет, что отображается при использовании разных кодов формата даты. Например, используя дату

28 ноября 1973 11:28:13 AM

в качестве примера для следующей таблице:

Format Code 409 (English United States) 804 (Chinese PRC) 
=========== =========================== ================= 
m   11       11 
mm   11       11 
mmm   Nov       十一月 
mmmm   November      十一月 
d   27       27 
dd   27       27 
ddd   Mon       二 
dddd   Monday      星期二 
y   73       73 
yy   73       73 
yyy   1973       1973 
yyyy   1973       1973 
AM/PM  AM       上午 

Таким образом, в конце того же кода формата с двумя разными языковыми идентификаторами, дает разные результаты:

[$-409]mmmm dd yyyy h:mm AM/PM 
November 27 1973 11:28 AM 


[$-804]mmmm dd yyyy h:mm AM/PM 
十一月 27 1973 11:28 上午 

Поскольку поиск список кодов языковых стандартов, как вытягивать зубы, вот некоторые ссылки:

Language Identifier Constants and Strings (первичный источник)

Windows Locale Codes Sorted by Locale

Windows Locale Codes Sorted by Locale

+0

Связанный вопрос, не стоит начинать мою собственную тему, но вы, кажется, хорошо знаете тему ... как Excel понимает, что в 'yyyy-mm-dd hh: mm: ss AM/PM', что первый миллиметр представляет месяцы, но вторая минута? ^?^ –

+0

Я бы предположил, что они признают, что 'yyyy' находится рядом с одним, и' hh' или 'ss' рядом с другим. */shrug * –

+3

[specs] (http://www.ecma-international.org/publications/standards/Ecma-376.htm) предусматривают, что если «m» или «mm» сразу после «h» или «m», hh "или непосредственно перед" s "или" ss ", тогда это интерпретируется как минуты; в противном случае это месяц. –

7

This post объясняет это. В основном 409 - это locale ID для «Английский - США». Например, если вы использовали [$-414], тогда дата будет отформатирована для «Norwegian (Bokmål)».

Мое предположение для вопроса (2) заключается в том, что необработанные данные будут представлены в виде строки вместо форматирования. Быстрый тест подтвердит это.

+0

Приятная находка, и ваша догадка о вопросе 2 верна. +1 –

3

[$-409], как представляется, не является условием. Кажется, это код Locale.

Если отформатировать ячейку с форматом пользовательского из [$-409]m/d/yy h:mm AM/PM;@, введите дату: 1/1/9, а затем просмотреть форматирование для ячейки, я вижу Дата формат m/d/yy h:mm AM/PM а с Locale (место) из English (United States).

Если вы изменили формат на что-то вроде [$-439]m/d/yy h:mm AM/PM;@, вы увидите содержимое ячейки на другом языке.

Я не уверен насчет @. Это может указывать, как отображать дату, если правильный шрифт или локаль недоступны.

Вот список Locale IDs Assigned by Microsoft.

+0

@ является текстовым заполнителем. См. Мой ответ за грязные детали, и спасибо за ссылку на идентификаторы Locale. –

10

NAAF и Грант Вагнер аккуратно ответил на вопрос о вашем $-409, так что я просто заполнить недостающие части:

символ «@» после того, как точка с запятой говорит Excel, как относиться к данным, если вы вводите строка вместо допустимой даты. @ просто означает «размещайте любой текст здесь, дословно».

Некоторые быстрые примеры для иллюстрации точки:

=TEXT("abc","hh:mm;@") 
abc 


=TEXT("abc","hh:mm;@@") 
abcabc 

См this article для подробного описания вариантов форматирования текста.

+0

Я считаю, что вы ошибаетесь, по крайней мере частично. Даты в Excel хранятся только как количество дней с 1900 года или 1904 года; часть после точки с запятой - это формат для использования, если базовое число отрицательно. – ysth

3

Существует ошибка в Excel 2007, которая меняет все общие форматы к формату даты типа [$ -409].
Обычно использование [$ -409] - это хороший формат.
Исправлена ​​ошибка, предоставленная Microsoft. Эта ошибка обычно происходит в книгах больших и общих книг Excel.

Если у вас когда-либо есть опыт, когда все ваши общие форматы меняются на даты, попробуйте перейти к ячейкам, щелкнув правой кнопкой мыши по Нормальному и изменив нормальный режим на обычный. Он укажет вам в поле тип формата для Normal. Это ошибка, поскольку она обычно должна быть «общей», а не некоторой версией [$ -409].

В итоге мне пришлось полностью удалить формат из книги. Чтобы это сделать, книга должна быть не разделена. Чтобы удалить формат [$ -409], указанный выше под типом ячейки «Обычный» из рабочей книги, щелкните правой кнопкой мыши по ячейке, выберите «Пользовательский», прокрутите страницу до тех пор, пока не найдете тип формата [$ -409], указанный выше, удалите все форматы вернется к тому, что называется общим.

Смежные вопросы