Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
1

не соображу, где собака зарыта?

18.11.2016, 17:22. Просмотров 549. Ответов 21
Метки нет (Все метки)

Всем привет.
Никак не соображу в чем дело... помогите разобраться!

в Exel писал макрос с вычислениями площади, периметра и прочего...
при вычислении двух TextBox'ов - значение третьего TextBox'а принимало результат с ЗАПЯТОЙ (плавающей точкой), (например "0,35") далее программа считала CDbl(TextBox) как число и продолжала работать.

но после закрытия файла Exel и открытия его снова, при вычислении тех же двух TextBox'ов - значение третьего TextBox'а стало принимать результат с ТОЧКОЙ (плавающей), (например "0.35") далее программа уже не воспринимает CDbl(TextBox) как число, а считает его текстом и соответственно выдает ошибку 13 "<Type mismatch>"...

пробовал менять раскладку (русский,английский) - не помогает
в настройках, разделительный знак - запятая.
кстати, после долгих часов исправлений, ковыряний и прочих модификаций в течении дня, код снова стал воспринимать значение TextBox'а с ЗАПЯТОЙ, но опять же после закрытия/открытия файла всё снова "сломалось".

почему так происходит? объясните пожалуйста

Понимаю, что проще было объявить переменные нужного типа и работать с ними, но в процессе обучения программа уже была написана и была полностью работоспособна (до закрытия).
Теперь чувствую придётся её переписывать используя переменные



но вдруг есть способ восстановить её работоспособность..
да и просто интересно, голову ломаю, ПОЧЕМУ ТАК???
подскажите добрые люди, уважаемые ГУРУ, скорее всего я не первый с такой проблемой
0
Миниатюры
не соображу, где собака зарыта?   не соображу, где собака зарыта?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2016, 17:22
Ответы с готовыми решениями:

где зарыта собака?
struct vector { int x; int y; int z; }; vector a, b; // functions...

Где собака зарыта? :)
Добрый день! Уважаемые форумчане, подскажите, что не так делаю. Основная...

Достанет собака прохожего или нет? Даны координаты точки, где находится собака, дана длина веревки, ограничивающей своб
Помогите

Где зарыта ошибка?
Хочу реализовать что бы по клику на картинку список прятался и снова появлялся....

Не могу найти где зарыта ошибка
При вводе буквы вылазит следующее: -8500000 (дофига цифр). Когда ввожу цифры,...

21
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 17:41 2
Посмотрите тип переменной AreaTb в этих двух случаях.
1
Shersh
Заблокирован
18.11.2016, 17:50 3
SoftIce, строка в обоих - к гадалке не ходи, по всплывшим подсказкам видно.
А вот кто с системным разделителем балуется?
1
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 18:01 4
Вам нужно знать почему так происходит или как это победить?
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 18:06  [ТС] 5
SoftIce,
подскажите, КАК посмотреть тип переменной? и...
в случае с запятой посмотреть увы не получится, т.к. не знаю как вернуть до того состояния

хотелось бы конечно решить оба вопроса )) и как и почему?

Добавлено через 3 минуты
Shersh
да, Вы правы, в обоих случаях значение - текст.
но только в одном случае - возможен перевод его в число.
а с настройками (системным разделителем) просто ознакомился, при поиске решений. ничего не менял ))
0
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 18:06 6
В окне Locals можно посмотреть тип переменной. Но у Вас, как заметил Shersh, в обоих случаях String, это видно по кавычкам в подсказке.
Можно просто принудительно менять разделитель. И переменные неплохо было бы объявить явно.
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 18:10  [ТС] 7
может ли система или "что-то ещё" сама принудительно менять разделитель, в зависимости от...?
про переменные конечно понимаю..
так и сделаю, если не найду способ вернуть в рабочее состояние

может это просто я где-то, что-то меняю сам не зная того?
0
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 18:17 8
Что гадать на кофейной гуще? Объявите для начала переменные. Используйте также Option Explicit.
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 18:20  [ТС] 9
Option Explicit используется.
ну раз только такой вариант, с переменными..
значит придётся всё переписывать/исправлять.
спасибо за попытку помочь!
0
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 18:26 10
Я бы не морочил себе голову, а сделал как нибудь так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CommandButton1_Click()
    Dim AreaTb As Double, LengthTb As Double, WidthTb As Double
    
    WidthTb = MyVal(TextBox1.Text)
    LengthTb = MyVal(TextBox2.Text)
 
    AreaTb = (WidthTb * LengthTb) / 10000#
 
End Sub
 
Private Function MyVal(ByVal s As String) As Double
    MyVal = Val(Replace(s, ",", "."))
End Function
Добавлено через 1 минуту
Цитата Сообщение от root_shell Посмотреть сообщение
Option Explicit используется.
Ну тогда показали бы код на всякий случай. Или он секретный?
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 18:40  [ТС] 11
да, видимо так и придётся делать ))
я уже даже начинал, перед тем как код снова "заработал"
потом снова всё вернул обратно, а он (код)....

код нисколько не секретный )) примитивный, дурной, дилетантский, но не секретный ))
просто он длинный и к каждой таблице свой (разновидность его, так сказать)
могу просто выложить сам файл Exel, если это не запрещено и кому-то надо))
0
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 18:42 12
Цитата Сообщение от root_shell Посмотреть сообщение
и кому-то надо
Вряд ли
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 18:47  [ТС] 13
SoftIce, вот я и не стал его выкладывать..
но если это может помочь в решении, разобраться, я без проблем выложу

попробовал - не получилось
"print.xlsm
Invalid File Type. "

с макросами Exel видимо нельзя прикрепить?
0
SoftIce
es geht mir gut
10524 / 4034 / 1027
Регистрация: 27.07.2011
Сообщений: 9,829
Завершенные тесты: 1
18.11.2016, 19:04 14
Цитата Сообщение от root_shell Посмотреть сообщение
с макросами Exel видимо нельзя прикрепить?
Заархивируйте.
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 19:37  [ТС] 15
Вот он
0
Вложения
Тип файла: zip print.xlsm.zip (93.8 Кб, 1 просмотров)
Shersh
Заблокирован
18.11.2016, 20:35 16
root_shell, сказали бы сразу, что AreaTb, WidthTb, LengthTb и ... - это текстбоксы - куча вопросов отпала бы сразу.
1
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
18.11.2016, 20:44  [ТС] 17
Дык не спрашивали) а я и писал, что с текстбоксом проблема. Да и в названии Tb - textbox. Думал это обычное сокращение, каждый догадается)
Извиняюсь, за то что ввел в заблуждение
0
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
19.11.2016, 14:23  [ТС] 18
...я так полагаю, (тем более раз ни у кого никаких догадок нет) что код по-любому придётся исправлять, дабы избежать подобных ошибок в дальнейшем, и на других компьютерах (т.к. программу писал не для себя)

но вот появились новые факты: вчера ночью я пробовал докопаться до истины перебирая этот код на другом (рабочем) компьютере (на котором и начинал собственно писать этот код) и выяснилось... что КОД РАБОТАЕТ

на счёт системного разделителя выяснить не удалось, т.к. стоит пароль Админа, но заметил такое различие:

- дома у меня стоит windows 10 и Exel 2013. Когда я делю (в моем случае) один ТЕКСТБОКС на другой, ответ получается (например "2.5" с точкой), и из него НЕ получается сделать CDBL(AreaTb), выдаёт ошибку <Type mismatch>, (скрины прикреплены в первом моем сообщении) а если я делю одну ПЕРЕМЕННУЮ на другую, то ответ получается уже (например "2,5" с запятой) и из него отлично работает CDbl(Area).

- на работе стоит windows 7 и Exel 2010. Когда я делю (в моем случае) один ТЕКСТБОКС на другой, ответ получается (например "2.5" с точкой), а если я делю одну ПЕРЕМЕННУЮ на другую, то !!! ответ получается тоже ("2.5" с точкой) и из обоих значений отлично работает CDbl(Area). (скрины прикреплены в этом сообщении)

получается в разных версиях Exel, код (в этом случае) ведёт себя по разному???
или это дело в ОС?

допускаю, что моя программа не работает правильно, потому что я начал писать в одном месте, а дописывал в другом. допустим. покончим с этой программой.

возникает другой вопрос! как работает у остальных???
может ли кто-то из вас написать простой код: (по идее он из FormUser)

Private Sub Button_Click()
TextBox3 = TextBox1 / TextBox2
[F7] = CDbl(TextBox3)
End Sub

и посмотреть:
- какое значение принимает TextBox3? 2,5 или 2.5
- преобразует ли CDbl(TextBox3) в Double, если значение TextBox3 равно "2.5"?

Главным образом вопрос в том, можно ли из текста "2.5"(с точкой) преобразовать в Double или в тексте обязательно должно быть "2,5"(с запятой)???

почему (в моем случае) на одном компьютере CDbl("2.5") преобразует в Double, а на другом нет???

ОГРОМНОЕ спасибо, если кто-то возьмётся помочь!
0
Миниатюры
не соображу, где собака зарыта?   не соображу, где собака зарыта?   не соображу, где собака зарыта?  

Shersh
Заблокирован
19.11.2016, 14:35 19
root_shell, если бы Вы были чуть повнимательнее, то давно бы узрели решение проблемы -
Цитата Сообщение от SoftIce Посмотреть сообщение
Visual Basic
1
2
3
Private Function MyVal(ByVal s As String) As Double
    MyVal = Val(Replace(s, ",", "."))
End Function
1
root_shell
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
19.11.2016, 22:15  [ТС] 20
Shersh, в чём простите моя невнимательность? не понимаю.
да, спасибо, я что-то подобное видел на форумах, когда искал ответ на свой вопрос о точках и запятых, я так понимаю эта функция замены запятой на точку (или наоборот). но я далеко не силён в VBA и для меня тут полно неизвестного/незнакомого. (никогда ничего подобного не делал). я понимаю так же, что можно просто заменить (в моём случае) точку на запятую и всё будет работать, но:

теперь просто интересно ПОЧЕМУ на одном компе с точкой работает, а на другом нет

Добавлено через 7 часов 19 минут
Shersh,
не могли бы вы подсказать как правильно пользоваться данной функцией? где её нужно вставить, чтобы она правильно работала в моём коде?

Добавлено через 2 минуты
..а если бы мне ещё и объяснили (подробно), что в этой функции за что отвечает - было бы вообще супер!
0
19.11.2016, 22:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 22:15

Где собака порылась? VB и DBF.
Я новичок в VB. Нужно создать DBF файл и добавить туда записи. Создать не...

Не работает простейший SQL запрос. Где собака?
Подключаюсь через ADO к таблице Excel Запрос select * from where...

Путь к базе данных MySQL, или где собака (файл с базой) зарыт
Добрый день. Опять я. Только вот вопрос у меня теперь совершенно идиотский: Qt...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru