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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 00:43   #1
and150382
Форумчанин
 
Регистрация: 19.10.2012
Сообщений: 217
По умолчанию Автоматический перевод текстового формата в числовой

Добрый вечер!

При вводе чисел через форму, в таблице они преобразуются как текст. От этого у меня не работают формулы.
Написал макрос

Sub Conv()
With ActiveSheet.UsedRange
arr = .Value
.NumberFormat = "General"
.Value = arr
End With
End Sub
При выполнении макроса все преобразуется в числа.( то что нужно)

Подскажите, как сделать чтобы он работал постоянно?

Тоесть чтобы ненужно было каждый раз вызывать макрос, а чтобы числа вводимые через форму- в таблице сами преобразовывались из текстового формата в числовой.
and150382 вне форума Ответить с цитированием
Старый 31.01.2013, 01:59   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

В форме числа вводите в текстбоксы - поэтому при занесении на лист нужно из текста преобразовывать в числа.
Если не ставить проверку на разделитель (т.е. юзер обещал не косячить ) - достаточно --
Т.е. cells(1,1)=--Textbox1.value
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.01.2013, 08:28   #3
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

and150382, в текст преобразуются дробные числа?

Это связано с тем, что в различных странах дробные числа пишутся по-разному. Например, в России дробные числа пишутся с запятой, а в США - с точкой.

Если вы вводите в текстовое поле дробное число с запятой, то Excel воспринимает дробное число не как число, а как текст.

Поэтому у вас два варианта при работе с Excel через VBA-форму:
  1. вводить на форме дробные числа с точкой;
  2. вводить на форме дробные числа с запятой, но перед вставкой на Excel-лист заменять VBA-инструментами запятую на точку.

Примечание

Вводить данные на Excel-лист с помощью самой программы Excel и с помощью VBA - это разные вещи.

Если вы работаете в программе Excel и вводите дробные числа с запятой, то прежде, чем число окажется в ячейке, Excel запускает какой-то механизм, который анализирует вводимые данные.

Если же число вводится из VBA, то Excel такой механизм не запускает и принимает данные в таком виде, в каком они есть.

Последний раз редактировалось Скрипт; 31.01.2013 в 08:45.
Скрипт вне форума Ответить с цитированием
Старый 31.01.2013, 21:06   #4
and150382
Форумчанин
 
Регистрация: 19.10.2012
Сообщений: 217
По умолчанию

Вот тут я ввожу в текстбоксы числа , а они в таблице преобразуются в текстовой формат
Вложения
Тип файла: rar производилка1.rar (47.8 Кб, 29 просмотров)
and150382 вне форума Ответить с цитированием
Старый 31.01.2013, 21:26   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

and150382, не знаю с чем связано, но используйте вот такой код для помещения данных из элементов управления в Excel:
Код:
Range("B1").Value = Me.TextBox1.Value

Примечание

Если вот так сделать:
Код:
Range("B1").Value = Me.TextBox1
то, действительно, число преобразуется в текст.

Последний раз редактировалось Скрипт; 31.01.2013 в 21:30.
Скрипт вне форума Ответить с цитированием
Старый 31.01.2013, 21:46   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Можно и так:
Код:
        .Cells(iLastRow, 2) = --Me.myColumn2
        .Cells(iLastRow, 3) = --Me.myColumn3
Но так нужно обеспечить, чтоб всюду в этих элементах были числа.

Или такой вариант:
Код:
    Dim t&
    With Sheets(iBazaSht.Name)
        iLastRow = .Cells(.Rows.Count, 3).End(xlUp).Row + 1
        t = Me.myColumn2
        .Cells(iLastRow, 2) = t
        t = Me.myColumn3
        .Cells(iLastRow, 3) = t
...
...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 31.01.2013 в 21:49.
Hugo121 вне форума Ответить с цитированием
Старый 31.01.2013, 22:01   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Hugo121, вообще в VBA есть инструменты для перевода текста в числа:
CDbl и Val.

А вот про два минуса где почитать? Я уже встречался с двумя минусами.
Скрипт вне форума Ответить с цитированием
Старый 31.01.2013, 22:18   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

А вот про два минуса где почитать?
F1 - "- Operator", syntax 2, а также "Operator Precedence"
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 01.02.2013 в 10:01. Причина: добавил кавычки для устранения неоднозначности
Казанский вне форума Ответить с цитированием
Старый 31.01.2013, 22:59   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Два минуса в 3 раза короче, чем CDbl(), и в более чем 2 раз короче, чем Val()
Ну и набрать проще.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.02.2013, 06:28   #10
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
Казанский: - - Operator
такого нет в VBA-справке.
Вот такое есть: - Operator

Казанский, не могу найти в справке про два минуса. Скопируйте, пожалуйста, из справки цитату, связанную с двумя минусами, и вставьте сюда.


Цитата:
Hugo121: Два минуса в 3 раза короче
Но что эти два минуса означают - не известно же.
И в чём выражается, что два минуса в 3 раза короче? В количестве символов?

Последний раз редактировалось Скрипт; 01.02.2013 в 06:41.
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод информации из одного пользовательского формата в другой УрбанСникерс Microsoft Office Excel 5 12.10.2012 11:45
перевод из символьного в числовой ya.kudr Общие вопросы C/C++ 11 15.01.2010 00:16
Автоматический перевод времени с гринвича. Demien Общие вопросы Delphi 0 27.08.2009 12:02
автоматический перевод с английского Alar Общие вопросы Delphi 5 04.04.2008 18:23
Перевод кодов символов формата Unicode в строку sshaitan Общие вопросы Delphi 0 12.09.2007 19:09