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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.10.2008, 19:51   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Указать на ошибку

Не могу найти ошибку[Type mismatch (Error 13)], прикрепить файл с "км." кодом, нет смысла, а мона вписать в код что то, что бы указал и курсор поставил на ошибку?
valerij вне форума
Старый 25.10.2008, 20:01   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
а мона вписать в код что то, что бы указал и курсор поставил на ошибку?
А разве VBE не останавливает выполнение кода и не указывает на строку, где произошла ошибка?

В некоторых случаях после нажатия кнопки Debug в сообщении об ошибке надо ещё несколько раз нажать F8, чтобы VBE указал точное местонахождение ошибки (например, при ошибках в модулях класса)

А что вообще происходит при нажатии на кнопку Debug?

Можно просто отключить все обработчики ошибок в коде...

Цитата:
прикрепить файл с "км." кодом, нет смысла
почему нет смысла? так будет проще, по моему
EducatedFool вне форума
Старый 25.10.2008, 21:29   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А разве VBE не останавливает выполнение кода и не указывает на строку, где произошла ошибка?

В некоторых случаях после нажатия кнопки Debug в сообщении об ошибке надо ещё несколько раз нажать F8, чтобы VBE указал точное местонахождение ошибки (например, при ошибках в модулях класса)

А что вообще происходит при нажатии на кнопку Debug?

Можно просто отключить все обработчики ошибок в коде...


почему нет смысла? так будет проще, по моему
Указывает на эту строку
iSS = iSS + Cells(i + 13, 5) * Cells(i + 13, 4)
что ни о чем не говорит, эта строка используется для всех листов и везде работает, попробую скомпоновать Книгу, что бы выложить, есть копия этой же книги, там все ОК!

Последний раз редактировалось valerij; 25.10.2008 в 21:31.
valerij вне форума
Старый 25.10.2008, 21:51   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В одной из ячеек (Cells(i + 13, 5) или Cells(i + 13, 4))
у Вас находится значение, не являющееся числом (например, текст)

Ошибка возникает при попытке умножить текстовое значение.

Попробуйте такой код:

iSS = iSS + val(Cells(i + 13, 5).Value) * val(Cells(i + 13, 4).Value)
EducatedFool вне форума
Старый 25.10.2008, 22:06   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Попробуйте такой код:

iSS = iSS + val(Cells(i + 13, 5).Value) * val(Cells(i + 13, 4).Value)
Все точно, ошибка исчезла.
С П А С И Б О.

З. Ы.
А как объяснить это val(Cells(, по русски?
valerij вне форума
Старый 25.10.2008, 22:15   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Cells(i + 13, 5) - ссылка на ячейку

Cells(i + 13, 5) и Cells(i + 13, 5).Value в данном случае - одно и то же - значение ячейки ( .Value - свойство по умолчанию для ячейки)

функция Val преобразует текстовую строку к числовому значению.

например,
msgbox "123a"*2 вызовет ошибку [Type mismatch (Error 13)]
msgbox val("123a")*2 выдаст результат 246
т.к. функция val строку "123a" преобразует в число 123

Цитата:
А как объяснить это val(Cells(, по русски?
число, содержащееся в ячейке

PS: если в ячейке только текст (например, "фываыфв"), функция val("фываыфв") возвратит ноль

Последний раз редактировалось EducatedFool; 25.10.2008 в 22:18.
EducatedFool вне форума
Старый 25.10.2008, 22:20   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
функция Val преобразует текстовую строку к числовому значению.
Еще раз С П А С И Б О, все понял.
Все работает, я эту то же переделал
Sum = Sum + Cells(i, n)
Sum = Sum + Val(Cells(i, n).Value)
valerij вне форума
Старый 26.10.2008, 01:38   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

EducatedFool
Не совсем корректно считает, т. е. так, обрезает десятичные значение в 5 колонке:
iSS = iSS + val(Cells(i + 13, 5).Value) * val(Cells(i + 13, 4).Value)
а вот так, все ОК:
iSS = iSS + Cells(i + 13, 5) * val(Cells(i + 13, 4).Value)

Но все же удивляет ошибка у меня, вот прикрепил, урезал.
Вводим любые числа в колонку D, а вот на листе УТ-1, если ввести данные в 23.10.08, скажем в яч. D1156 или в любую другую в диапазоне D1125:D1162 выскочит ошибка, во всех других диапазонах в этом листе, ошибки нет, на др. листе, ЛЕН, вообще ошибки, НЕТ!
Вложения
Тип файла: rar Ош_ка.rar (71.5 Кб, 13 просмотров)
valerij вне форума
Старый 26.10.2008, 02:05   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В момент, когда вылетает ошибка, подведите указатель мыши к переменным в коде, и увидите всплывающую подсказку типа

Cells(i + 13, 4)=" " (15 пробелов)

при этом в момент появления ошибки i=1155

Следовательно, в ячейке d1168 у Вас находятся несколько пробелов (непонятно только, зачем), из-за этого и вылетает ошибка...
Ну не умеет VBA умножать числа на пробелы...

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

Возможно, у Вас ошибка в определении диапазона ячеек для суммирования:

либо в строке For i = dat * 51 + 3 To dat * 51 + 40
либо в Cells(i + 13, 5) надо заменить +13 на что-то поменьше

Судя по коду, у Вас в сумму попадают значения ячеек d1163-d1168, чего вроде бы происходить не должно


Кстати, в Вашем случае большую часть вычислений было бы удобнее и проще сделать при помощи формул (не нужно отлавливать события изменения отдельных ячеек и т.д.), да и работать, пожалуй, будет немного быстрее.

Последний раз редактировалось EducatedFool; 26.10.2008 в 02:27.
EducatedFool вне форума
Старый 26.10.2008, 10:16   #10
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Следовательно, в ячейке d1168 у Вас находятся несколько пробелов (непонятно только, зачем), из-за этого и вылетает ошибка....
Вот теперь и я увидел, они, пробелы, конечно не нужны, это мой бух. чудит.
Цитата:
Кстати, в Вашем случае большую часть вычислений было бы удобнее и проще сделать при помощи формул (не нужно отлавливать события изменения отдельных ячеек и т.д.), да и работать, пожалуй, будет немного быстрее.
В начале у меня все было через формулы, тормоза страшенные, это тут два листа, в ориг.: 16 Листов, 7 модулей, одна форма и это не предел.

EducatedFool
А по поводу
iSS = iSS + Cells(i + 13, 5) * val(Cells(i + 13, 4).Value)
я правильно сделал?

EducatedFool
С П А С И Б О
valerij вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указать нужный тип переменной KiDoki Общие вопросы Delphi 3 06.10.2008 17:11
Как указать в регулярке............ Adamant PHP 12 25.03.2008 10:11
Указать критерии поиска? фЁдОр БД в Delphi 28 18.02.2008 17:17
Как указать путь компилируемуму exe файлу shurik_7866 Общие вопросы Delphi 2 18.07.2007 23:24
Как указать диапазон чисел? Inbox Общие вопросы Delphi 2 29.06.2007 01:21