Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Несоответствие типов чисел с плавающей запятой в VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Несоответствие типов чисел с плавающей запятой в VBA (Макросы/Sub)
Несоответствие типов чисел с плавающей запятой в 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]
При выполнении запроса возникает ошибка несоответствия типов. Подскажите пожалуйста, как данные к одному типу привести?
Заранее спасибо


Сообщение отредактировал 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 могут Вам помочь.

Автор - Апострофф
Дата добавления - 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
Дата добавления - 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
Дата добавления - 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) о причине проблемы.
Если нет - покажите этот вывод здесь.

Автор - Апострофф
Дата добавления - 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
Дата добавления - 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
Дата добавления - 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]


Сообщение отредактировал 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
Дата добавления - 08.03.2016 в 22:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Несоответствие типов чисел с плавающей запятой в VBA (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!