powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Преобразование типов в VBA MS Excel 2010
20 сообщений из 20, страница 1 из 1
Преобразование типов в VBA MS Excel 2010
    #38040743
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

недавно занялся VBA и прошу помощи, так как самому найти ошибку в своём коде у меня не получилось.

код следующий:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    Dim musculature, roll_musculature, race_mod_musculature, class_mod_musculature, const_mod_musculature As Double
    Dim str_musculature, str_roll_musculature, str_race_mod_musculature, str_class_mod_musculature, str_const_mod_musculature As String
    str_roll_musculature = frm_create_character.tbx_roll_musculature.Text
    str_race_mod_musculature = frm_create_character.lbl_race_mod_musculature.Caption
    str_class_mod_musculature = frm_create_character.lbl_class_mod_musculature.Caption
    str_const_mod_musculature = frm_create_character.lbl_const_mod_musculature.Caption
    roll_musculature = CDbl(str_roll_musculature)
    race_mod_musculature = CDbl(str_race_mod_musculature)
    class_mod_musculature = CDbl(str_class_mod_musculature)
    const_mod_musculature = CDbl(str_const_mod_musculature)
    musculature = roll_musculature + race_mod_musculature + class_mod_musculature + const_mod_musculature
    str_musculature = CStr(musculature)
    frm_create_character.lbl_musculature.Caption = str_musculature



ошибка возникает вот такая:
Run-time error '13': Type mismatch

При нажатии на кнопку Debug ссылается на строку кода:
Код: vbnet
1.
roll_musculature = CDbl(str_roll_musculature)



Предполагаю, что все четыре строки кода, содержащие функцию CDbl выдадут аналогичную ошибку.

Поясню также, что текстовое поле и три лейбла содержат цифры от 0 до 20 (целые, дробей нет, пробовал использовать функцию CInt, та же ошибка). Задача в пятом лейбле выводить сумму цифр, указанных в tbx_roll_musculature, lbl_race_mod_musculature, lbl_class_mod_musculature, lbl_const_mod_musculature. Тестирование провожу при значениях полей 0, 1, 0, 0 соответственно.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38040747
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтение - великая сила:
Код: vbnet
1.
Dim musculature As Double, roll_musculature As Double, race_mod_musculature As Double ' e.t.c.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38040782
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

видимо собака порылась не тут, так как ошибка не ушла несмотря на то, что сделал как вы сказали (правда изменил double на integer):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim musculature As Integer, roll_musculature As Integer, race_mod_musculature As Integer, class_mod_musculature As Integer, const_mod_musculature As Integer
    Dim str_musculature As String, str_roll_musculature As String, str_race_mod_musculature As String, str_class_mod_musculature As String, str_const_mod_musculature As String
    str_roll_musculature = frm_create_character.tbx_roll_musculature.Text
    str_race_mod_musculature = frm_create_character.lbl_race_mod_musculature.Caption
    str_class_mod_musculature = frm_create_character.lbl_class_mod_musculature.Caption
    str_const_mod_musculature = frm_create_character.lbl_const_mod_musculature.Caption
    roll_musculature = CInt(str_roll_musculature)
    race_mod_musculature = CInt(str_race_mod_musculature)
    class_mod_musculature = CInt(str_class_mod_musculature)
    const_mod_musculature = CInt(str_const_mod_musculature)
    musculature = roll_musculature + race_mod_musculature + class_mod_musculature + const_mod_musculature
    str_musculature = CStr(musculature)
    frm_create_character.lbl_musculature.Caption = str_musculature
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38040805
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно... А если просто Val() использовать?
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38040937
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Val вместо CInt?
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38040946
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Val заработало, но вопрос остался, почему не отработали специальные функции?
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38040977
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SolovyovAndreTM,

Val заработало, но вопрос остался, почему не отработали специальные функции?Для ответа на вопрос надо знать, что содержали переменные на момент преобразования. может там были пробелы(внутри числа, спереди или сзади; разделитель, отличный от запятой - например точка). Может еще какой признак текста, который не применим к типу Double. Напишите, какое значение имеют переменные на момент преобрразования - тогда и ответ будет.

Для инфо: тип Integer не может содержать числа, более 32768 и менее -32768. Тоже может вызвать ошибку. Лучше объявлять As Long или As Double, раз Вы именно в тип Double преобразуете.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041182
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

Всё просто: все входящие значения - 0, 1, 0, 0. Изначально при суммировании получал: 0100, так как строка.

Затем стал преобразовывать значения в интеджер/дабл (пробовал и так, и так).

Помог ток Val
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041246
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SolovyovThe_Prist,

Всё просто: все входящие значения - 0, 1, 0, 0. Изначально при суммировании получал: 0100, так как строка.

Затем стал преобразовывать значения в интеджер/дабл (пробовал и так, и так).

Помог ток ValПо опыту: явно проблема во входных данных. Выложили бы Вы проект или часть(я имею ввиду файл, а не код) - тогда было бы точно понятно, где проблема. Не может быть, чтобы целые числа поддавались преобразованию только через Val.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041257
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Solovyov,

Конкретный ответ дайте - чему равна переменная str_roll_musculature в момент когда возникла ошибка. Прямо из immediate в момент ошибки, а не домыслы.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041337
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProDmitry Solovyov,

Конкретный ответ дайте - чему равна переменная str_roll_musculature в момент когда возникла ошибка. Прямо из immediate в момент ошибки, а не домыслы.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041340
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это узнать?
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041364
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда возникла ошибка, нажать Debug
строка
roll_musculature = CDbl(str_roll_musculature)
будет покрашена желтым
нажать Ctrl+G
В окне Immediate написать ?str_roll_musculature и нажать Enter
Скопировать результат и выложить
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041630
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

пишет:

---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected Sub, Function, or Property
---------------------------
ОК Справка
---------------------------
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041637
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая строка у вас в ЭТОТ момент покрашена желтым?
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041685
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

roll_musculature = CInt(str_roll_musculature)
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38041753
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отлично, что видно, если навести курсор на str_roll_musculature?
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38042872
Dmitry Solovyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

str_roll_musculature=""
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38042935
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так о чем и речь, пытаешься преобразовать пустую строку в Int - естественно выдается ошибка.
При этом Val преобразует пустую строку в 0, поэтому ошибки нет, но и смысла тоже нет.
...
Рейтинг: 0 / 0
Преобразование типов в VBA MS Excel 2010
    #38042937
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это прочти , может помочь.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Преобразование типов в VBA MS Excel 2010
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]