#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
для форматирования других итераций списка номеров деталей, и теперь он работает нормально.
Это всегда мелочи, которые заставляют вас …_- ‘