Excel VBA — проблема с форматом даты между версией на английском языке и версией на датском языке

#excel #vba

#excel #vba

Вопрос:

Я столкнулся с проблемой с форматами дат в книге Excel с поддержкой макросов. Я использую версию Office365 на датском языке.

По сути, рабочая книга импортирует кучу файлов CSV на отдельные листы рабочей книги. Каждый CSV содержит учетные данные, содержащие даты в формате DDMMYYY. Все даты «приведены» как.NumberFormat =»дд-мм-гггг»

Для обработки данных на листах выполняется несколько макросов, создавая «базовый лист», объединяющий все интересующие данные, из которых выполняются последующие пользовательские поиски. При этом строки кода VBA добавляются в ячейки на некоторых листах, объединяя данные с разных листов. Добавленный код в макросах написан на английском языке, но они не будут работать во внешнем интерфейсе, где графический интерфейс требует ввода на датском языке (например, VLOOKUP используется в макросе, в то время как для внешнего интерфейса требуется датская версия LOPSLAG) (это может иметь какое-то отношение к моей проблеме)

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

Даже если я добавил «приведение даты», мне нужно выполнить поиск по дате в американском формате MMDDYYYY.

У кого-нибудь есть идея о том, как «глобально» привести даты в желаемый формат по всей книге?

Комментарии:

1. каково точное содержимое ячейки после импорта CSV в Excel? Это строка, которая может выглядеть как дата, или это реальная дата? Вы не можете преобразовать в числовой формат — numberFormat просто сообщает Excel, как отображать дату. Вы можете отображать дату в разных локальных версиях, но значение самой даты (которая на самом деле является числом) не меняется.

2. поскольку Excel и vba отличаются в работе с датами, если ваши данные хранятся в рабочей книге xlsx или xls… вы можете добавить вспомогательный столбец и написать пользовательскую функцию vba или функцию рабочего листа, которая будет извлекать даты в нужном вам формате, а затем обрабатывать их. Но делайте частые проверки в своем вспомогательном столбце, чтобы узнать, есть ли у вас месяц больше 12 или только дни меньше 20 и лет по отношению к данным. Если даты перепутаны, вы можете оказаться в среднем возрасте, и как Excel, так и vba обработают это без каких-либо видимых проблем

3. Excel хранит даты как количество дней с (обычно) 1 января 1900 года. Пока вы правильно импортируете данные, чтобы импортируемые даты были » реальными датами Excel», а не текстовыми строками, у макросов, которые ссылаются на эти даты, не должно возникнуть проблем. Если вы правильно импортировали даты, проблема заключается в ваших подпрограммах VBA и в том, как вы пытаетесь обработать даты. Проблема, связанная с языком, в подпрограмме VBA может возникнуть, если вы пытаетесь установить .NumberFormat свойство диапазона или записываете формулы в ячейки вместо выполнения вычисления в VBA.

4. Если вы записываете формулы в ячейки, вы можете попробовать использовать .FormulaLocal свойство`

5. @FunThomas — даты импортируются правильно — мое «приведение» — это просто определение формата даты, а не приведение текста к дате. Мои импортированные данные показывают правильные значения в желаемом формате (DDMMYYYYY), но для моего поиска требуется формат США MMDDYYYYY. Проблема должна заключаться где-то в интерпретации systerm — и я просто хочу это исправить 🙂