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

недавно занялся 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
16.11.2012, 01:21
    #38040747
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов в VBA MS Excel 2010
Чтение - великая сила:
Код: vbnet
1.
Dim musculature As Double, roll_musculature As Double, race_mod_musculature As Double ' e.t.c.
...
Рейтинг: 0 / 0
16.11.2012, 03:23
    #38040782
Dmitry Solovyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов в VBA MS Excel 2010
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
16.11.2012, 05:22
    #38040805
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов в VBA MS Excel 2010
Странно... А если просто Val() использовать?
...
Рейтинг: 0 / 0
16.11.2012, 09:47
    #38040937
Dmitry Solovyov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов в VBA MS Excel 2010
AndreTM,

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

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

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

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

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

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

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

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

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

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

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

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

пишет:

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

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

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

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


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