Запретить Access 2007 использовать научную нотацию при импорте данных

#excel #ms-access #vba #ms-access-2007

#Excel #ms-access #vba #ms-access-2007

Вопрос:

Итак, я импортирую гигантский список номеров деталей из файла Excel (преобразованный из отчета CSV откуда-то еще) с помощью VBA. Книга Excel вызывается для подготовки данных перед импортом, включая следующий код, который форматирует номера деталей, чтобы убедиться, что номера деталей не теряют никакой информации (только недавно поймал это):

Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 2), TrailingMinusNumbers:=True

После создания таблиц Excel я импортирую их в таблицы с помощью:

DoCmd.TransferSpreadsheet acImport, 5, "PartNumberX", "D:TargetImport Data.xlsx", -1, "PartNumberX!" amp; PartDim

Где-то между файлом Excel и таблицей Access номера деталей, в которых нет букв и которые длиннее 10 цифр, преобразуются в научную нотацию и теряют последние несколько цифр в номере. Я могу подтвердить, что в файле Excel нет научной нотации, поэтому я уверен, что это происходит где-то в процессе импорта.

Любая помощь в этом была бы очень признательна!

-Редактировать:

При его использовании DoCmd.TransferSpreadsheet создается таблица «PartNumberX» — она еще не существует.

-Обновить:

Поэтому я подумал, что причиной этой проблемы может быть импорт в новую таблицу. После импорта в заранее определенную таблицу с полем номера детали в качестве текстового поля нет никакой разницы в отношении предотвращения доступа к форме с использованием научной нотации.

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

1. Возможно ли предоставить набор данных, с которым это произойдет, пожалуйста? Я сам видел, как это происходит, но мне трудно воспроизвести это. Если вы можете просто предоставить пару строк данных, которые можно вставить в книгу Excel, это было бы очень полезно.

2. Это будут научные обозначения: 957010802508 957010802008 957010801608 — они будут в порядке: 9405008080 9405008040 9405006080 91640SM4 0030 91626SYA 0030 91618S3N 0030

3. Хм, это странно, для меня работает нормально. Возможно, важен порядок данных. Я даже пробовал это несколькими способами, но, похоже, все в порядке.

4. @ VBlades — Когда вы тестировали это, вы использовали электронную таблицу переноса в уже существующую таблицу или заставляли ее создавать таблицу? Я забыл упомянуть об этом изначально, но он создает таблицу с именем «PartNumberX», которая еще не существует.

Ответ №1:

Похоже, у меня был тупой… Я подумал, что, поскольку я правильно отформатировал исходный список номеров деталей в Excel, данные, скопированные из него, также будут правильно отформатированы. Очевидно, это было неверно. Я использовал

 Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 2), TrailingMinusNumbers:=True
  

для форматирования других итераций списка номеров деталей, и теперь он работает нормально.

Это всегда мелочи, которые заставляют вас …_- ‘