Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
-1 / 0 / 0
Регистрация: 17.09.2024
Сообщений: 4
1

Всем Ку, и вновь у меня отказывается работать код. (Ошибка runtime error 13 type mismatch)

21.10.2024, 22:38. Показов 675. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub CommandButton1_Click()
Dim t As Single, k As Single, q As Single
t = InputBox("Введите t", "Структура Развилка")
k = Sqr(t)
If k > 2.7 Then
q = ((k)^(0.5))
Else
q = 11.5*((k)^(2/3))
End If
Debug.Print "t=" & t; " q=" & q
End Sub




Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton1_Click()
Dim t As Single, k As Single, q As Single
x = InputBox("Введите x", "Структура Развилка")
If x < 0 Then
y = exp(x)
ElseIf x>=0 And x<=1 Then
y = ((x)^(2))
Else
y = log(x)
End If
Debug.Print "x=" & x; " y=" & y
End Sub


Оба кода отказываются работать по 13 ерору. В чем у них проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2024, 22:38
Ответы с готовыми решениями:

Ошибка runtime error 13 - type mismatch
Здравствуйте Есть программа, которая переводит числа из двоичной сс в десятичную сс, она работает,...

Плавающая ошибка - runtime error 13 - type mismatch
В приложении файл с таблицей эксель и макросом. Для работы макроса - выделите ячейки...

OpenRecordset и ошибка - несоответствие типа. runtime error(13) Type mismatch
У меня возникла следующая проблема: После того как на компьютере вместо Office 97 установили ...

Ошибка runtime error 13 - type mismatch при выполнении простого макроса
Здравствуйте! Была поставлена задача сделать таблицу с кнопками-макросами, чтобы при нажатии на...

runtime error, type mismatch
есть программа, написана под китайскую версию Windows. При попытке запуска на русской версии,...

16
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,673
21.10.2024, 23:04 2
Оба кода рабочие. Предполагаю, что вы вводите дробные числа с точкой. А надо с запятой. Типа -0,78 - тогда переменная x получит значение -0.78. При точке оно пишется как строка и при выполнении матем.операций со строкой - ошибка 13.
Если хочется вводить по InputBox с точкой, пишем примерно так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CommandButton2_Click()
   Dim t As Single, k As Single, q As Single, strS As String
   strS = InputBox("Введите x", "Структура Развилка")
   x = Val(strS)
   If x < 0 Then
      y = Exp(x)
   ElseIf x >= 0 And x <= 1 Then
      y = ((x) ^ (2))
   Else
      y = Log(x)
   End If
   Debug.Print "x=" & x; " y=" & y
End Sub
0
4078 / 1458 / 401
Регистрация: 07.08.2013
Сообщений: 3,643
22.10.2024, 01:47 3
Цитата Сообщение от Zeag Посмотреть сообщение
Предполагаю, что вы вводите дробные числа с точкой
а тут по первому куску и видно
If k > 2.7 Then
q = ((k)^(0.5))
Else
q = 11.5*((k)^(2/3))
0
Модератор
Эксперт MS Access
12072 / 4934 / 789
Регистрация: 07.08.2010
Сообщений: 14,461
Записей в блоге: 4
22.10.2024, 09:52 4
Цитата Сообщение от Слей Посмотреть сообщение
Оба кода отказываются работать по 13 ерору. В чем у них проблема?
в первом коде t должно быть >=0
так как k = Sqr(t)
видимо и во 2-м аналогично

Добавлено через 18 минут
Несоответствие типов (ошибка 13)
Visual Basic может преобразовать и привести большое число значений для присвоений типа данных, которые не были возможны в предыдущих версиях.

Тем не менее, эта ошибка может по-прежнему повторяться и имеет следующие причины и решения:
поэтому надо в inputbox вводить число с точкой и преобразовывать через VAL
1
3915 / 2314 / 783
Регистрация: 02.11.2012
Сообщений: 6,156
22.10.2024, 10:00 5
ну или добавить Replace и не вспоминать при вводе точка или запятая.
1
Модератор
Эксперт MS Access
12072 / 4934 / 789
Регистрация: 07.08.2010
Сообщений: 14,461
Записей в блоге: 4
22.10.2024, 10:05 6
Цитата Сообщение от Vlad999 Посмотреть сообщение
ну или добавить Replace и не вспоминать при вводе точка или запятая
тоже вполне применимо
0
818 / 311 / 41
Регистрация: 10.05.2021
Сообщений: 1,369
Записей в блоге: 10
22.10.2024, 13:00 7
Цитата Сообщение от Zeag Посмотреть сообщение
Предполагаю, что вы вводите дробные числа с точкой. А надо с запятой.
только для нашей локали. Чтобы не надеяться на локаль, нужно проверять региональные настройки и, возможно, настройки приложения.
1
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,673
22.10.2024, 18:11 8
Цитата Сообщение от Jack Famous Посмотреть сообщение
только для нашей локали
Разумеется. Но вряд ли этот пример изучается в Новой Зеландии. ))
Вариант с проверкой разделителя (1/3) известен, но опять же, вряд ли у студентов.
0
help
4396 / 4051 / 807
Регистрация: 13.04.2015
Сообщений: 8,870
22.10.2024, 18:43 9
Цитата Сообщение от Jack Famous Посмотреть сообщение
не надеяться на локаль,
Val всегда точку принимает. Меняем разделитель на точку, применяем Val и все дела.
1
818 / 311 / 41
Регистрация: 10.05.2021
Сообщений: 1,369
Записей в блоге: 10
23.10.2024, 13:50 10
I can, плохая идея — Val обрезает данные и/или не генерирует ошибки преобразования — можно получить совсем не то, что хотели. Выполните ?Val("abc") в Immediate.
Если нужно преобразовать строку в число, то стоит проверить её на IsNumeric() и/или привести к числу, например, с помощью CDbl().
IsNumeric() скажет, как он понимает строку, в соответствии с региональными настройками.
По итогам этого, будет замена либо точки на запятую, либо запятой на точку. Либо что-то другое и/или строку нужно чистить перед повторной проверкой.
0
help
4396 / 4051 / 807
Регистрация: 13.04.2015
Сообщений: 8,870
23.10.2024, 13:52 11
Цитата Сообщение от Jack Famous Посмотреть сообщение
Val обрезает данные
Можно пример? На практике не встречал.
0
818 / 311 / 41
Регистрация: 10.05.2021
Сообщений: 1,369
Записей в блоге: 10
23.10.2024, 13:56 12
I can,
?Val("1,2") вернёт 1 (обрезание)
?Val("1.2") вернёт 1,2
?Val("1 2") вернёт 12
0
help
4396 / 4051 / 807
Регистрация: 13.04.2015
Сообщений: 8,870
23.10.2024, 13:58 13
Цитата Сообщение от Jack Famous Посмотреть сообщение
Val("1,2") вернёт 1 (обрезание)
А я что писал?
Цитата Сообщение от I can Посмотреть сообщение
Меняем разделитель на точку, применяем Val
0
818 / 311 / 41
Регистрация: 10.05.2021
Сообщений: 1,369
Записей в блоге: 10
23.10.2024, 15:47 14
?val("1. 23") вернёт 1 (неразрывный пробел)
?val("a1. 23") вернёт 0

Если такие результаты устраивают, то вполне себе способ.
Я проверяю значения, введённые пользователем, строже. Особенно, даты.
0
help
4396 / 4051 / 807
Регистрация: 13.04.2015
Сообщений: 8,870
23.10.2024, 16:04 15
Цитата Сообщение от Jack Famous Посмотреть сообщение
?val("1. 23") вернёт 1 (неразрывный пробел)
?val("a1. 23") вернёт 0
Да, здесь всё правильно и ожидаемо. Так и должно быть.
0
snipe
23.10.2024, 19:03
  #16

Не по теме:

ууууууу
в какие дебри вы пацаны полезли
ожидается что юзер вводит числа или текст

0
help
4396 / 4051 / 807
Регистрация: 13.04.2015
Сообщений: 8,870
23.10.2024, 19:10 17
Цитата Сообщение от snipe Посмотреть сообщение
ууууууу
в какие дебри вы пацаны полезли
ожидается что юзер вводит числа или текст

А вдруг ТС из Новой Зеландии, а спейсбар у него печатает неразрывный пробел в середине числа?

Добавлено через 10 секунд
Да и обрезание ему мешает
0
23.10.2024, 19:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2024, 19:10
Помогаю со студенческими работами здесь

Runtime error 13 - type mismatch - VBA
Привет всем ! У меня тут не сходится, взгляните, если не сложно. Private Sub...

Выдает ошибку runtime error 13 type mismatch
в чем может быть проблема? Private Sub CommandButton1_Click() Dim I As Integer Dim N As Integer...

Помогите решить проблему. Runtime Error 13 – Type Mismatch.
Помогите. Переустановил винду на ноуте (XP SP3). Открыл файл exel с трехмерными диаграммами. После...

Открытие recordset в Class Module приводит к ошибке "Runtime error 13: type mismatch "
Создаю модуль класса. Пытаюсь в нем обычным образом добраться до recordset-а: dim db as...

Ошибка Run-time Error 13:Type Mismatch Error
Задача: Дан массив размера N. Найти номер его последнего локального максимума (локальный максимум —...

Ошибка Error 26:Type mismatch
program pr3; uses crt; var x,y:integer; z:real; begin clrscr; writeln('Vvedite x , y ');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru