Модераторы: mihanik
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Формат числа в ячейке, Не проверить формат 
V
    Опции темы
kit_kat
Дата 11.8.2007, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2007
Где: Петербург

Репутация: нет
Всего: 6



Здравствуйте!
Перевожу макросом прайс в нужный мне текстовый формат. В столбце цены написаны то в долларах, то в рублях, это задано форматом ячейки.
Т.е. формат либо 0" USD", либо 0" Руб."
Теперь мне надо в свой файл записать после числа либо знак доллара, либо знак рубля.
У меня не получается сравнить. Ошибка
Пытаюсь делать  так:

 
Код

strName = Trim(Cells(i, "A").Value)
 strFormat = Cells(i, "B").NumberFormat
 strPrice = Trim(Cells(i, "B").Value)
If StrСomp(strFormat, 0" USD")=0 Then strPrice = strPrice & " USA"
Else
    strPrice = strPrice & " Руб"



По логике вроде верно. Не получается сравнение, т.к. неверно оформлена строка 0" USD
Подскажите, может по-другому можно сделать?
Конечная цель получить в текстовом файле название, цену и единицу измерения цены.
Спасибо.

Это сообщение отредактировал(а) kit_kat - 11.8.2007, 08:49
PM MAIL WWW   Вверх
mihanik
Дата 11.8.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Не берусь утверждать на все 100%, но Cells( ).Value  не всегда строка символов.
Для использования trim необходимо сначала Cells( ).Value преобразовать в строку символов.

Примерно так Trim(Cstr(Cells(i, "B").Value))






--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Genyaa
Дата 11.8.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Усердный
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.9.2006
Где: Москва

Репутация: 2
Всего: 11



У Cells есть свойство Text, возвращающий символьное (строковое) видимое на листе значение:

Код

If InStr(Cells(i, "B").Text,"USD") > 0 Then 
     strPrice = CStr(Cells(i, "B").Value) & " USD"
Else
     strPrice = CStr(Cells(i, "B").Value) & " Руб"
End If


Хотя решение через NumberFormat было бы правильней с точки зрения сути задачи... но раз попросили "по-другому сделать" - решил предложить.

Тем не менее.... о Вашем решении

CStr(Cells(i, "B").NumberFormat в Вашем случае вероятно возращает нечто вроде этого:

[$USD] #,##0.00

Поэтому и анализ нужно делать так:

Код

If Instr(CStr(Cells(i, "B").NumberFormat, "USD") > 0 Then
     strPrice = CStr(Cells(i, "B").Value) & " USD"
Else
     strPrice = CStr(Cells(i, "B").Value) & " Руб"
End If

--------------------
Всякое решение плодит новые проблемы.
PM WWW   Вверх
kit_kat
Дата 11.8.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.2.2007
Где: Петербург

Репутация: нет
Всего: 6



Спасибо, 
Genyaa, mihanik.

В итоге прошел вариант 
Код

If InStr(Cells(i, "B").Text,"USD") > 0 Then 
     strPrice = CStr(Cells(i, "B").Value) & " USD"
Else
     strPrice = CStr(Cells(i, "B").Value) & " Руб"
End If


Второй не прошел.
Еще раз спасибо.
PM MAIL WWW   Вверх
RussianHero
Дата 16.8.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2007
Где: г. Балашиха, МО

Репутация: нет
Всего: нет



Кстати, я тут сам наткнулся недавно на подобную вещ... При работе с Вордовской таблицей, мне надо было сложить числа из двух ячеек.... Я переводил ячейку(она ж типа - строка) в интегер и пытался сложить.. а на меня раулались, что несоответствие типов.... после двух часов геморроя я узнал что и как, оказываетсья если из ячейки считывать текст вот таким образом - 
myTable.Cell(i,2).Range.Text
то в конце добавляеться два лишних символа - пробел и какой-то черный прямоугольник.... Кароче жесть... и если хотите получить само число из ячейки, делайте так - 
TempStr = Mid(myTable.Cell(i,2).Range.Text, 1, Len(myTable.Cell(i,2).Range.Text) - 2)
PM MAIL WWW ICQ   Вверх
mihanik
Дата 16.8.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



RussianHero, 

Цитата(RussianHero @  16.8.2007,  08:30 Найти цитируемый пост)
то в конце добавляеться два лишних символа - пробел и какой-то черный прямоугольник.... 


добавляются два символа, обозначаемые vbCrLf.

T.e. chr(13)+chr(10)

В твоём случае решение такое

Код

   TempStr =cstr(myTable.Cell(i,2).Range.Text)


вместо

Код

TempStr = Mid(myTable.Cell(i,2).Range.Text, 1, Len(myTable.Cell(i,2).Range.Text) - 2)



Кроме того, RussianHero!!!
Делаю тебе замечание.
Ты недавно появился на форуме и уже неоднократно нарушил правила.
Как в этом разделе, так и в разделе посвящённом VB.
Ещё одно-два нелепых замечания и получишь "-" в репутацию...






--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
RussianHero
Дата 16.8.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2007
Где: г. Балашиха, МО

Репутация: нет
Всего: нет



Эм, Мишка, каким образом я нарушил правила???
Я не флужу, говорю по теме, пишу коды в специальных тэгах.... Единственное,что не так - так это один вопрос - одна тема, но и это я уже понял... что-то еще не так?
А вот по теме - 
Код

  TempStr =cstr(myTable.Cell(i,2).Range.Text)

Я так делал... а потом переводил этот TempStr в интеджер... И знаешь что самое смешно - он тут-то и ругаллся на несоответствие типов...
Я все думал, что же не так-то... Потом просто вывел этот TempStr и увидел, что вместо прсото числа "2" там у меня -
"2
 <прямоугольничек>"
После этого сделал Mid и все нормально....
Т.е. CStr  как ты предложил(ничего, что я на "ты"?) работает и я получаю строку.. но мне-то нужно число? а вот перевод в число ругаеться, т.к. в строке еще этои 2 символа. Вот 8)
PM MAIL WWW ICQ   Вверх
mihanik
Дата 16.8.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Цитата(RussianHero @  16.8.2007,  09:22 Найти цитируемый пост)
я получаю строку.. но мне-то нужно число


Используй преобразование типов.
Вместо Cstr используй Cint, Cdbl, Clng.

Или на худой конец Val

Всё!
Эту тему закрываю...



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.