У меня есть база данных Excel, в которой я написал код VBA для создания сетки цен по ширине и высоте в зависимости от категории товара. Я использую 3 оператора SQL для достижения этой сетки. Один для высоты, один для ширины и один для цены для каждой ширины х высоты. Я использую SQL-запросы для извлечения данных из листа. У меня есть дополнительный код, который запускается первым, чтобы преобразовать данные в числовые или текстовые данные на основе столбца. Таким образом, столбцы «Высота» и «Ширина» всегда будут числами, а не числами, сохраненными в виде текста, а столбцы категории элементов, представляющие собой смешанный текст и числа, будут числами, сохраненными в виде текста. Таким образом, оператор StrSql может извлекать данные без несоответствия. Проблема заключается в том, что, хотя весь столбец является правильным типом данных на листе, а оператор sql извлекает правильный тип данных для одной сетки, а затем следующая сетка извлекает данные числа в виде строки. Я проверил данные на листе, и они действительно преобразованы в число, а столбец отформатирован как число. Некоторые сетки созданы нормально, но в других я получаю ошибку несоответствия данных. Что может заставить SQL-запрос извлекать числовые данные в виде строки только иногда?
StrSql=SELECT DISTINCT [GRIDDATA$].[WIDTH] FROM [GRIDDATA$] WHERE [GRIDDATA$].[ItemCategory] = '" CAT.Fields("ItemCategory")"' ORDER BY [GRIDDATA$].[Width]
Width.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
'more code
StrSql= SELECT DISTINCT [GRIDDATA$].[Price] FROM [GRIDDATA$] WHERE [GRIDDATA$].[WIDTH] = " & Width.Fields("Width") & " AND [GRIDDATA$].[HEIGHT] = " & Height.Fields("Height") & " AND [GRIDDATA$].[ItemCategory] = '"CAT.Fields("ItemCategory")"'
PriceVal.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
Только запрос PriceVal имеет ошибку «Ошибка неверного типа данных» в Width.Fields («Width»). Иногда он вытягивает число, хранящееся в виде числа в виде строки.
Ниже приведен мой код данных Prep
'Convert Width to Numbers
LastRow = sht.Cells(sht.Rows.Count, "Q").End(xlUp).Row
Set SelectR = sht.Range("Q2:Q" & LastRow)
SelectR.TextToColumns Destination:=Range("Q2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True