|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Здравствуйте! Волею судеб пришлось написать свою первую функцию на VBA. Никак не могу отойти от шока ;( Это же жуть какая-то, редактор постоянно пытается компилировать строки, показывая дурацкие диалоги с предложением открыть справку. Сохраняет функцию секунд 5. Как такое средство разработки может существовать в 2012 году??? ;((( Теперь вопрос ) v1 - число с плавающей точкой. При его форматировании в качестве десятичного разделителя используется запятая, но функция CountIf понимает критерий только если десятичный разделитель - точка! Хак с Replace это нормальное решение или есть более правильное? Ещё более удивительно то, что если сделать переменные n1 и n2 типа Integer, функция валится на вычислении (n1 * n2 * (n1 + n2 + 1). Как это возможно??? n1, n2 - меньше 50. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 12:34 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekb...редактор постоянно пытается компилировать строки, показывая дурацкие диалоги с предложением открыть справку...Ежели длани кривые, неча на зеркало пенять :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 12:53 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekb, >редактор постоянно пытается компилировать строки - быть такого в ВБА не может Вы бы весь код показали, как Вы в эту функцию уходите ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:04 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekbТеперь вопрос ) v1 - число с плавающей точкой. При его форматировании в качестве десятичного разделителя используется запятая, но функция CountIf понимает критерий только если десятичный разделитель - точка! Хак с Replace это нормальное решение или есть более правильное? Ещё более удивительно то, что если сделать переменные n1 и n2 типа Integer, функция валится на вычислении (n1 * n2 * (n1 + n2 + 1). Как это возможно??? n1, n2 - меньше 50.Для VBA разделитель целой и дробной части - точка. Replace - нормальное решение. А что, если переменные n1 и n2 меньше единицы? Тогда VBA при приведении их типу Integer вполне может округлить до нулей(как и положено). Что при Ваших условиях не может не вызвать ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:16 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Serge 007, а почему нельзя просто подсветить строку с ошибочным кодом (как это делается во всех остальных средах разработки), а не выводить дурацкое диалоговое окно? Хотя, наверное к этому можно привыкнуть... Возможно, после постоянного нажатия на Enter для закрытия диалога у меня действительно выпрямятся руки... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:19 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
катастрофабыть такого в ВБА не можетНе знаю, что он делает, но называет это именно так. Функцию вызываю с листа. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:22 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
The_Prist, А если я буду использовать эту функцию в английской локали, в которой запятая будет разделителем тысяч? Replace уже не прокатит. Упростим функцию до такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Смотрим через отладку: n1 = 27 n2 = 34 Функция выдает #ЗНАЧ! Если заменить типы на Double, то 56916 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:30 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
[quot The_PristДля VBA разделитель целой и дробной части - точка.[/quot]Это вполне естественно, но почему тогда он форматирует числа с запятой, а не точкой?? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:32 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
а какой возвращаемый тип у функции? почему не указан? поэтому, т.к. используется тип Integer, то и результату присваивается этот тип, и, вероятно, происходит переполнение. И вообще, вместо Integer в VBA надо использовать Long. Ну и классика жанра, вверху модуля Option Explicit для надежности вот так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:42 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekbЭто же жуть какая-то, редактор постоянно пытается компилировать строки, показывая дурацкие диалоги с предложением открыть справку.Ares_ekbа почему нельзя просто подсветить строку с ошибочным кодом (как это делается во всех остальных средах разработки)Если сразу не впадать в панику и не начинать вопить на весь мир, можно успокоиться, расслабиться, зайти в Tools - Options - Editor и отключить галку Auto Syntax Check. Тогда неверные синтаксически строки будут просто подсвечиваться красным без сообщений. ЗЫ: В любой новой для меня программе я прежде всего захожу в настройки и смотрю, что там есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:48 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekb1. Это же жуть какая-то, редактор постоянно пытается компилировать строки, показывая дурацкие диалоги с предложением открыть справку. 2. Сохраняет функцию секунд 5. 1. настраивается в Tools -> Options, дальше разберетесь 2. Сохраняется не функция, а вся рабочая книга, где эта функция находится. Соответсвенно, если данных там много, то и сохранение займет немало. Есть вариант вынести код в отдельную книгу с типом xla (Microsoft Excel add-in, так, по-моему, в версиях до 2003 включительно называется), потом эту книгу можно кинуть в автозвгрузку Excel и функция будет доступна во всех открытых книгах. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:49 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Диклевич Александр, Shocker.Pro, спасибо ) Я почему-то даже не задумывался о том, что в этой Вселенной Integer может быть 16-битным ))) Но форматирование чисел меня всё-равно смущает. Никак не пойму как отформатировать с точкой ( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 13:56 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekbThe_Prist, А если я буду использовать эту функцию в английской локали, в которой запятая будет разделителем тысяч? Replace уже не прокатит.То, немного подумав, можно определять разделитель внутри кода: Код: vbnet 1. 2.
и уже его заменять или нет на точку ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 14:16 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
The_PristТо, немного подумав, можно определять разделитель внутри кода: Код: vbnet 1. 2.
в ВБА можно и попроще: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 14:28 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Shocker.Pro, Код: vbnet 1.
это используемый в Excel, если UseSystemSeparators = False. Но VBA всегда использует системный разделитель, который Код: vbnet 1. 2.
проверить, что они могут быть разные легко. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 14:59 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Диклевич Александр, спасибо, буду знать ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 15:17 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
The_Prist, спасибо! Хотя всё-равно такое решение выглядит очень странным... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 20:08 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Еще вариант получения системного разделителя дробной части Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 20:29 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Ares_ekbНикак не пойму как отформатировать с точкой (Функция Str(), например Код: vbnet 1.
Для положительных чисел Str возвращает строку с пробелом в начале, но в данном случае (и почти всегда) это не мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 21:13 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Казанский, мдамс, всё оказалось так просто ) спасибо )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2012, 21:22 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
Нашел просто мега-вещь . Страшно представить сколько я писал бы это на VBA: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2012, 17:02 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
2Ares_ekbСтранно... А зачем Вам реализовывать уже имеющееся в аналитической геометрии (и векторной алгебре) с помощью именно VBA, если уже давно известно, что можно подключать любые необходимые (совместимые) библиотеки? Впрочем, а причем здесь вообще VBA? - ведь не так давно был приведён пример по поводу 3D-моделирования и BlitzBASIC, скажем... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2012, 00:21 |
|
Формат чисел Excel VBA
|
|||
---|---|---|---|
#18+
AndreTM, чтобы совсем ничего не писать на VBA, придется подключить какой-нибудь статистический пакет... Про BlitzBASIC тему не нашел. Чем больше разбираюсь с ExcelDNA, тем больше он мне нравится. Работает даже отладка в Visual Studio! Единственная вещь, которую, похоже, не получится сделать - это сохранение результата функции в виде структуры в одной ячейке. Табличные формулы не очень подходят ;( Моя функция вычисляет несколько параметров. Приходится для каждого параметра вызывать её заново и считать то же самое несколько раз. Очень жалко, что Excel не позволяет хранить в ячейках структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2012, 20:41 |
|
|
start [/forum/topic.php?fid=61&tid=2175322]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 148ms |
0 / 0 |