powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / 20000+20000=overflow %)
20 сообщений из 20, страница 1 из 1
20000+20000=overflow %)
    #34474810
Фотография Дадахан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно сабж. microsoft не может переварить это складывание. если заключить их в переменные то может.
какие будут соображения?
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34474932
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дадахансобственно сабж. microsoft не может переварить это складывание. если заключить их в переменные то может.
какие будут соображения?

Может расскадите что это такое? Что это значит? Для общего развития, а там глядишь и соображения появятся.
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34474951
Фотография Дадахан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad Дадахансобственно сабж. microsoft не может переварить это складывание. если заключить их в переменные то может.
какие будут соображения?

Может расскадите что это такое? Что это значит? Для общего развития, а там глядишь и соображения появятся.
excel->ALT F11->New module->New sub->msgbox(20000+20000)=error.
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475003
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Dim x As Long, n As Long, m As Long
n =  20000 : m =  20000 : x = n + m
Debug.Print x
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475008
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толком не разобрался, но методом подбора так работает
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475010
Фотография Дадахан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad
Код: plaintext
1.
2.
Dim x As Long, n As Long, m As Long
n =  20000 : m =  20000 : x = n + m
Debug.Print x

и чего париться то? см.первый пост.
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475022
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: plaintext
Debug.Print CLng( 20000 ) + CLng( 20000 )
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475032
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или даже так
Код: plaintext
Debug.Print  20000  + CLng( 20000 )
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475051
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так
Код: plaintext
Debug.Print  20000  +  20000  * CLng( 1 )
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475055
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем как угодно лиш бы он понял что по крайней мере одна из переменных Long
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475068
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дадахансобственно сабж. microsoft не может переварить это складывание. если заключить их в переменные то может.
какие будут соображения?читать документацию. Компилятор помещает численные литералы в области памяти, и типизирует их константами, подходящие по размеру, тип результата подбирает под "максимальный" тип аргументов. Вообще, проблемы нет ни скакой стороны: поведение компилятора ожидаемо, а использовать в коде "магические числа" не рекомендуется. Deggasad правильно решение написал: Deggasad
Код: plaintext
1.
2.
Dim x As Long, n As Long, m As Long
n =  20000 : m =  20000 : x = n + m
Debug.Print x
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475070
Фотография Дадахан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadВообщем как угодно лиш бы он понял что по крайней мере одна из переменных Long
хм... к сожалению я не искал методы обхода данной ошибки, а лишь хотел поделиться ею с народом и услышать его мнение, почему так происходит. думаю, что это лажа мелкософта.
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475095
Фотография Дадахан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbapro Дадахансобственно сабж. microsoft не может переварить это складывание. если заключить их в переменные то может.
какие будут соображения?читать документацию. Компилятор помещает численные литералы в области памяти, и типизирует их константами, подходящие по размеру, тип результата подбирает под "максимальный" тип аргументов. Вообще, проблемы нет ни скакой стороны: поведение компилятора ожидаемо, а использовать в коде "магические числа" не рекомендуется. Deggasad правильно решение написал: Deggasad
Код: plaintext
1.
2.
Dim x As Long, n As Long, m As Long
n =  20000 : m =  20000 : x = n + m
Debug.Print x

да, к счастью проблем с этим не возникало. редко приходилось использовать выражение без переменных, а то и никогда.
а если считать что 20000+40000 работает, а 20000+20000 не работает, то это не совсем правильно и не повод лезть в документацию и искать там причину лажи.
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475096
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дадахан DeggasadВообщем как угодно лиш бы он понял что по крайней мере одна из переменных Long
хм... к сожалению я не искал методы обхода данной ошибки, а лишь хотел поделиться ею с народом и услышать его мнение, почему так происходит. думаю, что это лажа мелкософта.

Было же объяснение - от vbapro :
VBA подбирает тип константы сам. для 20000 Integer более чем достаточно! Он и присваивает Integer , если никак не намекнуть.
Хотя если честно думал, что по умолчанию всегда Variant , может это для переменной а не для констант?
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475118
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad Variant , может это для переменной а не для констант?это если объявляешь переменную без типа или вообще не объявляешь; правильно рассуждаешь
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475124
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле трудно представить себе ситуацию когда может потребоваться просто сложить 2 числа. Легче ведь наисать 40000!
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475561
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad

на самом деле могут быть приключения такого типа:
Код: plaintext
1.
2.
3.
4.
Sub s()
  Dim i As Integer
  i =  32767 
  Debug.Print i +  1 
End Sub
Причем, если не объявлять тип i как Integer (т.е. оставить ее вариантной) проблемы не возникнет. Но для кого-то такой стиль – moveton.
В этом случае положение может исправить использование type-declaration character, в данном случае – ампесанда:
Код: plaintext
  Debug.Print i +  1 &
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475791
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lena_#### Deggasad

на самом деле могут быть приключения такого типа:
Код: plaintext
1.
2.
3.
4.
Sub s()
  Dim i As Integer
  i =  32767 
  Debug.Print i +  1 
End Sub

Эт понятно!
Можно пару вопросов:
1) Зачем вообще использовать Integer, а не Long, есть ли какие-то причины?
2) lena_####В этом случае положение может исправить использование type-declaration character, в данном случае – ампесанда:
Код: plaintext
  Debug.Print i +  1 &

Что это такое? То есть как работает я понял! Просто что такое type-declaration character и ампесанда ? И если это в ту же тему где можно почитать или что означают различные символы которые время от времени я встречаю в топиках, такие как % или &, обычно они присутствуют в названиях переменных.
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475968
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
type-declaration character
A character appended to a variable name indicating the variable's data type(символ, добавленный к имени переменной, указывающий ее тип)
для типа Long – это ампесанд (&)
для типа Integer – это знак процента (%)
для типа String – это знак доллара ($)

Например
Код: plaintext
1.
  Dim i%
  Debug.Print TypeName(i)
и
Код: plaintext
1.
  Dim i as Integer
  Debug.Print TypeName(i)
вернут одно и тоже – "Integer"

Что касается целесообразности использования типа Long а не Integer можно наверно много говорить, приводя различные доводы в пользу Long . Но некоторые функции VB (например, FreeFile Function) возвращают Integer , а также некоторые функции WinAPI хотят получить ссылку на переменную типа Integer .
...
Рейтинг: 0 / 0
20000+20000=overflow %)
    #34475990
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, мои познания в очередной раз увеличились благодаря Вам!
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / 20000+20000=overflow %)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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