Несоответствие типов чисел с плавающей запятой в VBA
radiokiller
Дата: Вторник, 08.03.2016, 19:44 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация:
0
±
Замечаний:
20% ±
Excel 2007
Добрый вечер! Из Excel в БД делается запрос: [vba]Код
sQuery = sQuery & " TRIM (TO_CHAR (M.NFACTSUMTAX, '9999999999999.00')) sNFACTSUMTAX," sQuery = sQuery & " (select TO_CHAR (NUM_VALUE, '9999999999999.00') from V_DOCS_PROPS_VALS_SHADOW where DOCS_PROP_RN = 389895724 and UNITCODE = 'IncomingOrders' and UNIT_RN = M.NRN)" sum1 = EmpDynaset.Fields(6).Value sum2 = EmpDynaset.Fields(14).Value If sum2 <> 0 Then sum3 = sum1 - sum2 Else: sum3 = sum1 End If Cells(nCount, 6) = sum3
[/vba] При выполнении запроса возникает ошибка несоответствия типов. Подскажите пожалуйста, как данные к одному типу привести? Заранее спасибо
Добрый вечер! Из Excel в БД делается запрос: [vba]Код
sQuery = sQuery & " TRIM (TO_CHAR (M.NFACTSUMTAX, '9999999999999.00')) sNFACTSUMTAX," sQuery = sQuery & " (select TO_CHAR (NUM_VALUE, '9999999999999.00') from V_DOCS_PROPS_VALS_SHADOW where DOCS_PROP_RN = 389895724 and UNITCODE = 'IncomingOrders' and UNIT_RN = M.NRN)" sum1 = EmpDynaset.Fields(6).Value sum2 = EmpDynaset.Fields(14).Value If sum2 <> 0 Then sum3 = sum1 - sum2 Else: sum3 = sum1 End If Cells(nCount, 6) = sum3
[/vba] При выполнении запроса возникает ошибка несоответствия типов. Подскажите пожалуйста, как данные к одному типу привести? Заранее спасибо radiokiller
Сообщение отредактировал radiokiller - Вторник, 08.03.2016, 19:47
Ответить
Сообщение Добрый вечер! Из Excel в БД делается запрос: [vba]Код
sQuery = sQuery & " TRIM (TO_CHAR (M.NFACTSUMTAX, '9999999999999.00')) sNFACTSUMTAX," sQuery = sQuery & " (select TO_CHAR (NUM_VALUE, '9999999999999.00') from V_DOCS_PROPS_VALS_SHADOW where DOCS_PROP_RN = 389895724 and UNITCODE = 'IncomingOrders' and UNIT_RN = M.NRN)" sum1 = EmpDynaset.Fields(6).Value sum2 = EmpDynaset.Fields(14).Value If sum2 <> 0 Then sum3 = sum1 - sum2 Else: sum3 = sum1 End If Cells(nCount, 6) = sum3
[/vba] При выполнении запроса возникает ошибка несоответствия типов. Подскажите пожалуйста, как данные к одному типу привести? Заранее спасибо Автор - radiokiller Дата добавления - 08.03.2016 в 19:44
Апострофф
Дата: Вторник, 08.03.2016, 21:30 |
Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация:
122
±
Замечаний:
0% ±
Excel 1997
VAL, CDBL, REPLACE могут Вам помочь.
VAL, CDBL, REPLACE могут Вам помочь. Апострофф
Ответить
Сообщение VAL, CDBL, REPLACE могут Вам помочь. Автор - Апострофф Дата добавления - 08.03.2016 в 21:30
StoTisteg
Дата: Вторник, 08.03.2016, 21:38 |
Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
[offtop]Интересно, а зачем нужен вот этот [vba]Код
If sum2 <> 0 Then sum3 = sum1 - sum2 Else: sum3 = sum1 End If
[/vba] загадочный If? Если sum2 = 0, то sum3 = sum1 само по себе...
[offtop]Интересно, а зачем нужен вот этот [vba]Код
If sum2 <> 0 Then sum3 = sum1 - sum2 Else: sum3 = sum1 End If
[/vba] загадочный If? Если sum2 = 0, то sum3 = sum1 само по себе... StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Ответить
Сообщение [offtop]Интересно, а зачем нужен вот этот [vba]Код
If sum2 <> 0 Then sum3 = sum1 - sum2 Else: sum3 = sum1 End If
[/vba] загадочный If? Если sum2 = 0, то sum3 = sum1 само по себе... Автор - StoTisteg Дата добавления - 08.03.2016 в 21:38
radiokiller
Дата: Вторник, 08.03.2016, 21:55 |
Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация:
0
±
Замечаний:
20% ±
Excel 2007
StoTisteg, При вычислении разности sum3 = sum1 - sum2 вылетает ошибка "Type mismatch". Есть данные, где sum2 = 0, если этот if использовать, то они в Excel выводятся, а как только sum2 <> 0 вылетает ошибка
StoTisteg, При вычислении разности sum3 = sum1 - sum2 вылетает ошибка "Type mismatch". Есть данные, где sum2 = 0, если этот if использовать, то они в Excel выводятся, а как только sum2 <> 0 вылетает ошибка radiokiller
Ответить
Сообщение StoTisteg, При вычислении разности sum3 = sum1 - sum2 вылетает ошибка "Type mismatch". Есть данные, где sum2 = 0, если этот if использовать, то они в Excel выводятся, а как только sum2 <> 0 вылетает ошибка Автор - radiokiller Дата добавления - 08.03.2016 в 21:55
Апострофф
Дата: Вторник, 08.03.2016, 22:10 |
Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация:
122
±
Замечаний:
0% ±
Excel 1997
radiokiller , отсюда не видно, что находится в sum1 и sum2, где и как они объявлены? Вставьте после присвоения им значений этот код - [vba]Код
debug.print typename(sum1),sum1 debug.print typename(sum2),sum2
[/vba] Возможно, Вы сами догадаетесь по выводу в Immediate (CTRL+G) о причине проблемы. Если нет - покажите этот вывод здесь.
radiokiller , отсюда не видно, что находится в sum1 и sum2, где и как они объявлены? Вставьте после присвоения им значений этот код - [vba]Код
debug.print typename(sum1),sum1 debug.print typename(sum2),sum2
[/vba] Возможно, Вы сами догадаетесь по выводу в Immediate (CTRL+G) о причине проблемы. Если нет - покажите этот вывод здесь.Апострофф
Ответить
Сообщение radiokiller , отсюда не видно, что находится в sum1 и sum2, где и как они объявлены? Вставьте после присвоения им значений этот код - [vba]Код
debug.print typename(sum1),sum1 debug.print typename(sum2),sum2
[/vba] Возможно, Вы сами догадаетесь по выводу в Immediate (CTRL+G) о причине проблемы. Если нет - покажите этот вывод здесь.Автор - Апострофф Дата добавления - 08.03.2016 в 22:10
StoTisteg
Дата: Вторник, 08.03.2016, 22:23 |
Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
При вычислении разности sum3 = sum1 - sum2 вылетает ошибка "Type mismatch". Есть данные, где sum2 = 0
Уже теплее. Ну вот и сейчас Вы имеете тот же Type mismatch, только вид в профиль. Попробуйте тупо [vba]Код
sum3 = val(sum1) - val(sum2)
[/vba] или даже радикальнее — [vba]Код
if not (isnumeric(sum2) and isnumeric(sum1)) then msgbox "Хозяин, тут какую-то фигню подсунули: " & sum1 & " и " & sum2
[/vba] и посмотреть, где заругается...
При вычислении разности sum3 = sum1 - sum2 вылетает ошибка "Type mismatch". Есть данные, где sum2 = 0
Уже теплее. Ну вот и сейчас Вы имеете тот же Type mismatch, только вид в профиль. Попробуйте тупо [vba]Код
sum3 = val(sum1) - val(sum2)
[/vba] или даже радикальнее — [vba]Код
if not (isnumeric(sum2) and isnumeric(sum1)) then msgbox "Хозяин, тут какую-то фигню подсунули: " & sum1 & " и " & sum2
[/vba] и посмотреть, где заругается...StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Ответить
Сообщение При вычислении разности sum3 = sum1 - sum2 вылетает ошибка "Type mismatch". Есть данные, где sum2 = 0
Уже теплее. Ну вот и сейчас Вы имеете тот же Type mismatch, только вид в профиль. Попробуйте тупо [vba]Код
sum3 = val(sum1) - val(sum2)
[/vba] или даже радикальнее — [vba]Код
if not (isnumeric(sum2) and isnumeric(sum1)) then msgbox "Хозяин, тут какую-то фигню подсунули: " & sum1 & " и " & sum2
[/vba] и посмотреть, где заругается...Автор - StoTisteg Дата добавления - 08.03.2016 в 22:23
StoTisteg
Дата: Вторник, 08.03.2016, 22:32 |
Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
И вообще. если у Вас и sum2=Noting, и sum1=Noting, то If возвращает sum3=Noting, что прекрасно проходит... Пока Вы не пытаетесь sum3 пустить в дело.
И вообще. если у Вас и sum2=Noting, и sum1=Noting, то If возвращает sum3=Noting, что прекрасно проходит... Пока Вы не пытаетесь sum3 пустить в дело. StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Ответить
Сообщение И вообще. если у Вас и sum2=Noting, и sum1=Noting, то If возвращает sum3=Noting, что прекрасно проходит... Пока Вы не пытаетесь sum3 пустить в дело. Автор - StoTisteg Дата добавления - 08.03.2016 в 22:32
al-Ex
Дата: Вторник, 08.03.2016, 22:41 |
Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация:
59
±
Замечаний:
0% ±
Excel 2010
как только sum2 <> 0 вылетает ошибка
Попробуй так Привести выдёргиваемые из базы данные к единому типу, например CDbl потом уже проводить манипуляции с ними. [vba]Код
' приводим данные к типу дабл sum1 =CDbl( EmpDynaset.Fields(6).Value) sum2 =CDbl( EmpDynaset.Fields(14).Value) ' далее уже вычисляем '
[/vba]
как только sum2 <> 0 вылетает ошибка
Попробуй так Привести выдёргиваемые из базы данные к единому типу, например CDbl потом уже проводить манипуляции с ними. [vba]Код
' приводим данные к типу дабл sum1 =CDbl( EmpDynaset.Fields(6).Value) sum2 =CDbl( EmpDynaset.Fields(14).Value) ' далее уже вычисляем '
[/vba]al-Ex
Сообщение отредактировал al-Ex - Вторник, 08.03.2016, 22:56
Ответить
Сообщение как только sum2 <> 0 вылетает ошибка
Попробуй так Привести выдёргиваемые из базы данные к единому типу, например CDbl потом уже проводить манипуляции с ними. [vba]Код
' приводим данные к типу дабл sum1 =CDbl( EmpDynaset.Fields(6).Value) sum2 =CDbl( EmpDynaset.Fields(14).Value) ' далее уже вычисляем '
[/vba]Автор - al-Ex Дата добавления - 08.03.2016 в 22:41
radiokiller
Дата: Вторник, 08.03.2016, 22:58 |
Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация:
0
±
Замечаний:
20% ±
Excel 2007
Апострофф, StoTisteg, al-Ex, Спасибо большое, действительно с функцией VAL для сумм в самом вычислении все получилось!
Апострофф, StoTisteg, al-Ex, Спасибо большое, действительно с функцией VAL для сумм в самом вычислении все получилось! radiokiller
Ответить
Сообщение Апострофф, StoTisteg, al-Ex, Спасибо большое, действительно с функцией VAL для сумм в самом вычислении все получилось! Автор - radiokiller Дата добавления - 08.03.2016 в 22:58