Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2019, 18:12   #1
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию VBA при переходе с Wind7 на Wind10

В региональных стандартах установлена запятая в качестве разделителя дробной части.

На листе Excel в ячейке А1 введено число 313,5

Далее имеем простой код:

Private Sub UserForm_Initialize()
TextBox1 = Range("A1")
If IsNumeric(TextBox1) Then
Label1 = "Числовой"
Else
Label1 = "Нечисловой"
End If
End Sub

При запуске UserForm в Windows 7 имеем следующий результат:
в ячейке А1- число 313,5; в TextBox подтянулось тоже 313,5; то есть в обоих случаях имеется ЗАПЯТАЯ; соответственно формат определен как числовой.

А вот в Windows 10 (при тех же региональных стандартах) результат совершенно иной:
в ячейке А1- 313,5
в TextBox- 313.5
То есть в TextBox значение подтянулось с ТОЧКОЙ!
Соответственно формат определен как нечисловой


В результате перехода на Windows 10 у нас полетели все экселевские макросы!

Кто-то может подсказать, что с этим делать (чтобы не переписывать программы и не менять в региональных стандартах запятую на точку)?
tim8579 вне форума Ответить с цитированием
Старый 28.06.2019, 18:26   #2
Igor1961
Пользователь
 
Регистрация: 05.10.2015
Сообщений: 39
По умолчанию

tim8579, а покажите кусочек файла и форму, если не секрет У меня все мои макросы из 2007 и 2003 в десятке работают почему-то...
Igor1961 вне форума Ответить с цитированием
Старый 28.06.2019, 18:42   #3
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию

pic_2- Wind 10
pic_3- Wind 7
Изображения
Тип файла: gif pic_2.gif (42.0 Кб, 72 просмотров)
Тип файла: gif pic_3.gif (52.1 Кб, 72 просмотров)
tim8579 вне форума Ответить с цитированием
Старый 28.06.2019, 19:07   #4
Igor1961
Пользователь
 
Регистрация: 05.10.2015
Сообщений: 39
По умолчанию

Вообще-то про файл Excel разговор был, а не gif или jpeg... Может у Вас что-то в форме в контролах есть, может какой-то еще макрос в файле безобразничает, как догадаться? По фотографии? Может нужно посмотреть в сторону форматов - как ячеек, так и TextBox, или может Clng и т.п... Пока не ясно, где и чего смотреть и искать
Igor1961 вне форума Ответить с цитированием
Старый 28.06.2019, 19:14   #5
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию

Только в архиве- файл .xlsm не прикрепляется
Вложения
Тип файла: zip Книга1.zip (17.2 Кб, 17 просмотров)
tim8579 вне форума Ответить с цитированием
Старый 28.06.2019, 19:47   #6
Igor1961
Пользователь
 
Регистрация: 05.10.2015
Сообщений: 39
По умолчанию

А можете рассказать, в чем именно проблема? Нужно обработать то, что находится в текстбоксе? Или в ячейке? Что во что нужно преобразовать, или что вычислить? Или чтобы IsNumeric(TextBox1) стало=True? Если последнее, то навряд ли смогу Вам помочь. TextBox: ключевое слово - "Text". А потом уже с ним производятся действия.
Или это Вам нужно:
Код:
TextBox1.Value = Val(TextBox1.Value)
?

Последний раз редактировалось Igor1961; 28.06.2019 в 20:05.
Igor1961 вне форума Ответить с цитированием
Старый 28.06.2019, 22:38   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Private Sub CommandButton1_Click()
  If IsNumeric(Replace(TextBox1, ".", ",")) Then
    MsgBox "Числовой"
    n = Replace(TextBox1, ".", ",") - 0
    Range("A1") = n
    Else
    MsgBox "Нечисловой"
    Range("A1").ClearComments
  End If
End Sub

Private Sub UserForm_Initialize()
  TextBox1 = Range("A1")
  If IsNumeric(Replace(TextBox1, ".", ",")) Then
   Label1 = "Числовой"
  Else
   Label1 = "Нечисловой"
  End If
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.06.2019, 12:46   #8
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Igor1961 Посмотреть сообщение
А можете рассказать, в чем именно проблема? Нужно обработать то, что находится в текстбоксе? Или в ячейке? Что во что нужно преобразовать, или что вычислить? Или чтобы IsNumeric(TextBox1) стало=True? Если последнее, то навряд ли смогу Вам помочь. TextBox: ключевое слово - "Text". А потом уже с ним производятся действия.
Или это Вам нужно:
Код:
TextBox1.Value = Val(TextBox1.Value)
?

На самом деле проблема очень простая. Большое количество наших макросов построено по одному принципу. В старой Винде если в ячейке содержалось значение 313,5 , то и в TextBox подтягивалось 313,5. В десятке же в TextBox подтягивается 313.5. Из-за этого макрос не работает. Я пока нашел 2 решения: 1) частное- внести изменения в код каждого макроса. С учетом того, что макросов сотни- это не лучшая идея 2) установить в региональных стандартах точку вместо запятой. Тогда все работает. Но это придется делать на каждом компьютере в офисе.
tim8579 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания при переходе в защищённый режим Вопрос Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 02.05.2018 13:59
Предупреждение при переходе на сайт. countess Общие вопросы .NET 1 18.10.2011 13:54
Ошибка при переходе по ссылке Anubys PHP 2 05.07.2011 06:55
Выбор в листе при переходе Ghennadiy PHP 25 25.12.2010 13:30
Refresh при переходе на страницу nikleb JavaScript, Ajax 8 20.12.2007 18:24