Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Cells только для чтения? Добавлено: 17.12.06 23:02  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su
Никак не могу понять причину ошибки:
t1 = (Cells(nR, nC).Text)

где nR и nC - переменные типа интеджер.

Type mismatch

хотя конструкции типа:
                        Select Case Cells(nR, nC).Value
                        Case 0.7 To 1.5
Работают без проблем.

В чем проблема? Помогите
Заранее спасибо

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #1
Добавлено: 18.12.06 00:30
____ Может быть стоит скобки убрать вокруг Cells?

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 18.12.06 01:16
или объявить переменную t1 и делать преобразование к объявленному типу...

Ответить

Номер ответа: 3
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #3
Добавлено: 18.12.06 21:15
____ Может быть стоит скобки убрать вокруг Cells?
эх... да при чем здесь скобки?

t1 выше объявлен как Single
если ты имел в виду это:
t1 = CSng(Cells(nR, nC).Text)

то не в этом. Ошибка остается. (ВБ я знаю, чтобы такие ошибки глупые допускать)

Мне думается, здесь проблема в nR, nC и cells, с Rangeм все рулит. Проблема в том, что я не знаю екселевского вба столь тонко...

кто знает в чем дело?

Ответить

Номер ответа: 4
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #4
Добавлено: 18.12.06 21:47
Я только через несколько попыток таки умудрился спровоцировать ошибку в Вашей конструкции только при следующих обстоятельствах:
- t1 - объявленный явно числовой тип данных
- Cells(nR,nC) содержит текст (не число), который Ексел не может сам преобразовать в число (например, только текст или строка из цифр и текстовых и разделительных символов).

Решение может быть в такой конструкции:

t1 = ([B]Val[/B];(Cells(nC, nR).Text))

Ответить

Номер ответа: 5
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #5
Добавлено: 18.12.06 21:48
ой... забыл, что в коде никаие другие управляющие коды не работают:

    t1 = (Val(Cells(nC, nR).Text))

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 18.12.06 22:15
t1 = (Val(Cells(nC, nR).Text))

вот вы объясните мне.. по какой фиг крайние скобки ставите??? Вы что, с булевой величиной работаете??

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 18.12.06 22:21
и еще, как вы можете вызывать свойство Cells без указания какого-либо обекта??? Где ссылка на Range или WorkSheet? Даже если Вы юзаете Cell в конструкции With.. End With, то в любом случае перед ним должна стоять точка!!!
И на сколько я помню, то предпочтительнее использовать свойство Value а не Text ...

Ответить

Номер ответа: 8
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #8
Добавлено: 18.12.06 22:46
GenyaA, спасибо!
Вот именно, там у меня и оказался текст. (таблица Шевелева. В ней все параметры численные, но некоторые отсутствуют), так вот, те, кот. отсутствуют я записал прочерками. А теперь бегая по ней циклом не мог понять, почему он ругается.

Благодарю!

EROS

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

а скобки остались от выражения, кот. я удалил,...

и еще, как вы можете вызывать свойство Cells без указания какого-либо обекта??? Где ссылка на Range или WorkSheet? Даже если Вы юзаете Cell в конструкции With.. End With, то в любом случае перед ним должна стоять точка!!!
А зачем писать лишнее если так работает?
Ccылка на Range.Cells??????????????
Гы-Гы
на WorkSheet - согласен, если компилятору так будет быстрее, но разницы я не чувствую.

Ответить

Номер ответа: 9
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #9
Добавлено: 18.12.06 22:47
В исходной конструкции были скобки... я их оставил... Я не имею привычки учить уму-разуму тех, кто ставит задачу и спрашивает помощи... тем более что "лишняя" пара скобок в некоторых случаях предписывает интерпретатору предпринять попытку согласования данных (при передаче аргументов в процедуры и функции это может быть вполне полезным).

А Cells без объекта вполне можно использовать... это не возбраняется, ибо в этом случае (по умолчанию) подразумевается активный лист в активной книге, согласно документации VBA Excel. Может быть такое использование не совсем соответствует строгому стилю оформления кода, но по закону не преследуется и депортации не подлежит.

Ответить

Номер ответа: 10
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #10
Добавлено: 18.12.06 22:48
____ Естественно, надо использовать преобразование текста в числовой формат с помощью функции Val().
____ А юзать Cells() можно и без объекта, так как по умолчанию — Activesheet.
____ А скобки, конечно, ничего не решают. Можно ещё две-три пары поставить — кому как нравится...

Ответить

Номер ответа: 11
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #11
Добавлено: 18.12.06 22:54
____ Естественно, надо использовать преобразование текста в числовой формат с помощью функции Val().
не-а, у меня дробные числа, так дроби пропадут.
(лучше CSng)

 если написать Val("-";), как у меняя, то ошибка выйдет такая же

С уважением, -АлександР-!

Спасибо всем, заглянувшим в этот топик!

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 19.12.06 13:16
тьфу, блин..я думал эт на нормальном языке.. а это на VBA..(( Тогда разумеется Cells можно и без ссылок юзать..

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам