2016-09-28 4 views
0

У меня проблема с сценарием VBA, используемым для импорта данных из одной электронной таблицы, отформатируйте ее, а затем передайте.Excel VBA US/UK date conversion issue

Ввод даты на исходном листе вводится в формате dd/mm/yyyy. Лист назначения использует следующую строку, чтобы импортировать дату:

If RolandSource.Worksheets(tFocus).Cells(rFocus, 2).Value <> "" And RolandSource.Worksheets(tFocus).Cells(4, cFocus) <> "" And RolandSource.Worksheets(tFocus).Cells(rFocus, cFocus) <> "" Then ThisWorkbook.Worksheets(1).Cells(rRecord, 6).Value = RolandSource.Worksheets(tFocus).Cells(rFocus, cFocus).Value 

проблемой является то, что Excel копирует данные, а затем автоматически форматирование в качестве даты. Во время этого процесса даты, которые неоднозначны между форматами даты в Великобритании и США, трансформируются, несмотря на это не требуется.

Импортируемый набор данных может содержать дату (дд/мм/гггг) или текстовые записи, а так как обычные пути обработки дат создают ошибки. Есть ли у кого-нибудь предложения?

Вы можете увидеть этот вопрос я описывающий при форматировании ячейки A1 как текст, набрав «01/02/2003» в ячейке A1, а затем выполняет следующие действия в ближайшем окне:

ThisWorkbook.Worksheets(1).Cells(1,2).value = ThisWorkbook.Worksheets(1).Cells(1,1).Value 

(Обратите внимание , решение будет использоваться как часть цикла, который должен обрабатывать даты и слова).

Спасибо в ожидании.

+3

Выполнение 'ThisWorkbook.Worksheets (1) .Cells (1,2) .NumberFormat =" @ "' сначала, после этого выполните 'ThisWorkbook.Worksheets (1) .Cells (1,2) .Value = ThisWorkbook.Worksheets (1) .Cells (1,1) .Value', чтобы предотвратить автоматическое форматирование в целевой ячейке. – omegastripes

+0

Excel хранит даты как серийные номера с '1 Jan 1900' =' 1'. Если вы введете что-то, похожее на дату, Excel проанализирует его в соответствии с настройками региональной короткой даты Windows. Если даты в «RolandSource» являются «настоящими датами», решение будет отличаться от того, являются ли они текстовыми представлениями дат. Если они представляют собой текстовые представления, то предварительно форматируйте колонку в виде текста, а затем скопируйте свойство '.Text' исходной ячейки. Если они являются настоящими датами и правильны, у вас не должно быть этой проблемы, но вы можете попробовать получить доступ к свойству .Value2 из исходной ячейки. –

+0

Спасибо @omegastripes, попробовал это решение, но запустил цикл. – user3190686

ответ

0

Благодаря @OmegaStripes и @RonRosenfeld ответ заключался в форматировании ячейки перед копированием значения из источника в пункт назначения. Это привело к сбою цикла, но, добавив инструкции if() для защиты цикла от ошибки, я решил. Спасибо вам за помощь.